Sha256: 22453caf94ea14c40188e9cc511544e3ce8cf42acc20f99af2ea2dcaddf39b55

Contents?: true

Size: 1.1 KB

Versions: 6

Compression:

Stored size: 1.1 KB

Contents

#!/usr/bin/env ruby

require 'rack'

module Flapjack
  module Gateways
    class JSONAPI < Sinatra::Base
      module Rack
        class JsonParamsParser < Struct.new(:app)
          def call(env)
            t = type(env)
            if env['rack.input'] and not input_parsed?(env) and type_match?(t)
              env['rack.request.form_input'] = env['rack.input']
              json_data = env['rack.input'].read
              env['rack.input'].rewind

              data = Oj.load(json_data)
              env['rack.request.form_hash'] = data.empty? ? {} :
                (('application/json-patch+json'.eql?(t)) ? {'ops' => data} : data)
            end
            app.call(env)
          end

          def input_parsed? env
            env['rack.request.form_input'].eql? env['rack.input']
          end

          def type(env)
            return unless env['CONTENT_TYPE']
            env['CONTENT_TYPE'].split(/\s*[;,]\s*/, 2).first.downcase
          end

          def type_match?(t)
            Flapjack::Gateways::JSONAPI::JSON_REQUEST_MIME_TYPES.include?(t)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
flapjack-0.8.10 lib/flapjack/gateways/jsonapi/rack/json_params_parser.rb
flapjack-0.8.9 lib/flapjack/gateways/jsonapi/rack/json_params_parser.rb
flapjack-0.8.8 lib/flapjack/gateways/jsonapi/rack/json_params_parser.rb
flapjack-0.8.7 lib/flapjack/gateways/jsonapi/rack/json_params_parser.rb
flapjack-0.8.6 lib/flapjack/gateways/jsonapi/rack/json_params_parser.rb
flapjack-0.8.5 lib/flapjack/gateways/jsonapi/rack/json_params_parser.rb