class Objectifier::ArrayValue
Attributes
name[R]
type[R]
Public Class Methods
new(name, args)
click to toggle source
# File lib/objectifier/array_value.rb, line 7 def initialize(name, args) raise ArgumentError, "name required" if name.nil? raise ArgumentError, "type required" unless args[:type] @name = name.to_s @type = args[:type] @required = args.fetch(:required, true) end
Public Instance Methods
call(parameters)
click to toggle source
# File lib/objectifier/array_value.rb, line 20 def call(parameters) if @required && !key_present(parameters) ErrorResult.err(@name, "required field missing") elsif key_present(parameters) transform(key_value(parameters)) else SuccessResult.new(@name) end end
required?()
click to toggle source
# File lib/objectifier/array_value.rb, line 16 def required? @required end
Protected Instance Methods
key_present(parameters)
click to toggle source
# File lib/objectifier/array_value.rb, line 32 def key_present(parameters) parameters.has_key?(@name) end
key_value(parameters)
click to toggle source
# File lib/objectifier/array_value.rb, line 36 def key_value(parameters) parameters.fetch( @name, parameters[@name] ) end
to_s()
click to toggle source
# File lib/objectifier/array_value.rb, line 65 def to_s "array %s - type: %s - required: %s" % [ @name, @type.to_s, @required.to_s ] end
transform(value)
click to toggle source
# File lib/objectifier/array_value.rb, line 43 def transform(value) return ErrorResult.err(@name, "items must be Array type") unless value.kind_of? Array # TODO return result type result = value.map { |element| Objectifier.factories.for_type(@type).call(@name, element) } values, errors = result.partition do |v| v.success? end if errors.empty? xr = values.map do |v| v.value end ValueResult.new(@name, xr) else errors.reduce(ErrorResult.new) { |total, err| total.merge(err) }.scope(@scope) end end