Project

General

Profile

Download (1.11 KB) Statistics
| Branch: | Tag: | Revision:
module ForemanMaintain
class Param
attr_reader :name, :description, :options

def initialize(name, description, options, &block)
options.validate_options!(:description, :required, :flag, :array)
@name = name
@description = description || options[:description] || ''
@options = options
@required = @options.fetch(:required, false)
@flag = @options.fetch(:flag, false)
@block = block
@array = @options.fetch(:array, false)
end

def flag?
@flag
end

def required?
@required
end

def array?
@array
end

# rubocop:disable Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity
def process(value)
value = process_array(value) if array?
value = @block.call(value) if @block
if value.nil? && required?
raise ArgumentError, "Param #{name} is required but no value given"
elsif flag?
value = value ? true : false
end
value
end

def process_array(value)
if value.is_a?(Array)
value
else
value.to_s.split(',').map(&:strip)
end
end
end
end
(11-11/20)