Sha256: 88055c5a9b513f2d095e44ba28c01b834aed6b7e459e169edf5568e9a3a01696

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

require 'api_signature'

module ApiProxy
  class RequestOptionsBuilder
    attr_reader :env, :config

    delegate :api_key,
             :api_secret,
             :api_host,
             :api_port,
             :api_prefix,
             :url_scheme,
             :request_starts_with, to: :config

    def initialize(env, config)
      @env = env
      @config = config
    end

    def options
      { headers: headers, format: :json }
    end

    def url
      URI::Generic.build(scheme: url_scheme, host: api_host, port: api_port, path: path)
    end

    def request_method
      env['REQUEST_METHOD'].to_s.downcase
    end

    private

    def headers
      custom_headers = config.custom_headers.call(env)

      signature_builder.headers.merge(custom_headers)
    end

    def signature_builder
      @signature_builder ||= ApiSignature::Builder.new(request_params)
    end

    def request_params
      {
        access_key: api_key,
        secret: api_secret,
        request_method: request_method,
        scheme: url_scheme,
        host: api_host,
        port: api_port,
        path: path
      }
    end

    def path
      request_path = env['REQUEST_PATH'].gsub(request_starts_with, '')

      File.join(api_prefix, request_path)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
api_proxy-0.1.2 lib/api_proxy/request_options_builder.rb