Method: Decanter::Core::ClassMethods#parse

Defined in:
lib/decanter/core.rb

#parse(key, parsers, values, options) ⇒ Object



158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/decanter/core.rb', line 158

def parse(key, parsers, values, options)
  case
  when !parsers
    { key => values }
  when options[:required] == true && Array.wrap(values).all? { |value| value.nil? || value == "" }
    raise ArgumentError.new("No value for required argument: #{key}")
  else
    Parser.parsers_for(parsers)
          .reduce({key => values}) do |vals_hash, parser|
            vals_hash.keys.reduce({}) { |acc, k| acc.merge(parser.parse(k, vals_hash[k], options)) }
          end
  end
end