Sha256: c64cface7c3c4e3c3c92b47483955ae090d574ef2a733137fbeb8e7755917c8d

Contents?: true

Size: 1 KB

Versions: 11

Compression:

Stored size: 1 KB

Contents

# frozen_string_literal: true

module Shark
  module Middleware
    class ComposeRequest < Faraday::Middleware
      HTTP_METHODS_WITH_BODY = %i[post patch put].freeze
      CONTENT_TYPE = 'Content-Type'
      JSON_MIME_TYPE = 'application/json'
      JSON_MIME_TYPE_REGEX = %r{^application/(vnd\..+\+)?json$}.freeze

      def call(env)
        compose_request_body(env) if request_with_body?(env)

        @app.call(env)
      end

      def request_with_body?(env)
        HTTP_METHODS_WITH_BODY.include?(env[:method])
      end

      def compose_request_body(env)
        type = request_type(env)
        params = env[:body] || {}

        params = if JSON_MIME_TYPE_REGEX =~ type
                   ::JSON.dump(params)
                 else
                   params.to_param
                 end

        env[:body] = params
      end

      def request_type(env)
        type = env[:request_headers][CONTENT_TYPE].to_s
        type = type.split(';', 2).first if type.index(';')
        type
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
bima-shark-sdk-3.1.1 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.5.0 lib/shark/middleware/compose_request.rb
bima-shark-sdk-3.1.0 lib/shark/middleware/compose_request.rb
bima-shark-sdk-3.0.0 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.4.4 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.4.3 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.4.2 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.4.1 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.4.0 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.3.1 lib/shark/middleware/compose_request.rb
bima-shark-sdk-2.3.0 lib/shark/middleware/compose_request.rb