Sha256: eea4f1e22d7a858e9916eca5bf168ea835227352c91012b0a6291a48a52a18b4

Contents?: true

Size: 1.1 KB

Versions: 3

Compression:

Stored size: 1.1 KB

Contents

#!/usr/bin/env ruby

require 'rack'

module Flapjack
  module Gateways
    class JSONAPI < Sinatra::Base
      module Middleware
        class JsonParamsParser < Struct.new(:app)
          def call(env)
            t = type(env)
            if ['POST', 'PATCH', 'DELETE'].include?(env["REQUEST_METHOD"]) &&
              env['rack.input'] && !input_parsed?(env) && type_match?(t)

              env['rack.request.form_input'] = env['rack.input']
              json_data = env['rack.input'].read
              env['rack.input'].rewind
              data = json_data.empty? ? {} : Flapjack.load_json(json_data)
              env['rack.request.form_hash'] = data
            end
            app.call(env)
          end

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

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

          def type_match?(t)
            Flapjack::Gateways::JSONAPI::JSONAPI_MEDIA_TYPE.eql?(t)
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
flapjack-2.0.0 lib/flapjack/gateways/jsonapi/middleware/json_params_parser.rb
flapjack-2.0.0rc1 lib/flapjack/gateways/jsonapi/middleware/json_params_parser.rb
flapjack-2.0.0b1 lib/flapjack/gateways/jsonapi/middleware/json_params_parser.rb