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