Method: Decanter::Core::ClassMethods#parse

Defined in:
lib/decanter/core.rb

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



195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/decanter/core.rb', line 195

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