Module: CollectionJSON::Goliath::Params::Parser

Included in:
CollectionJSON::Goliath::Params
Defined in:
lib/collection-json/goliath.rb

Instance Method Summary collapse

Instance Method Details

#retrieve_params(env) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/collection-json/goliath.rb', line 9

def retrieve_params(env)
  env['params'].tap do |params|
    if env['rack.input']
      body = env['rack.input'].read
      env['rack.input'].rewind
      unless body.empty?
        if env['CONTENT_TYPE'].match COLLECTION_JSON_ENCODED
          begin
            hash = JSON.parse(body)
            template = Template.from_hash(hash['template'])
            template.data.each do |datum|
              params.merge! datum.name => datum.value
            end
          rescue StandardError => e
            raise ::Goliath::Validation::BadRequestError, "Invalid parameters: #{e.class.to_s}"
          end
        end
      end
    end
  end
end