Sha256: bc3d15198bceedb87ae717653feb7a6f6cbdb971f7310df038edf55e91c47e8a

Contents?: true

Size: 980 Bytes

Versions: 7

Compression:

Stored size: 980 Bytes

Contents

# frozen_string_literal: true

require 'httparty'
require 'api_signature'

module ApiProxy
  class SignedRequest
    include ::HTTParty

    attr_reader :request_method, :url, :options

    def initialize(request_method, url, options = {})
      @request_method = request_method.to_s.downcase
      @url = URI.parse(url)
      @options = options
    end

    def perform
      self.class.send(request_method, url, headers: headers, body: body, format: :json)
    end

    private

    def headers
      (options[:headers] || {}).merge(signature_headers)
    end

    def body
      options[:body]
    end

    def signature_headers
      ApiSignature::Builder.new(signature_options).headers
    end

    def signature_options
      {
        access_key: config.api_key,
        secret: config.api_secret,
        request_method: request_method,
        path: url.path
      }
    end

    def config
      ApiProxy.configuration(options[:namespace]) || :default
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
api_proxy-0.2.9 lib/api_proxy/signed_request.rb
api_proxy-0.2.8 lib/api_proxy/signed_request.rb
api_proxy-0.2.7 lib/api_proxy/signed_request.rb
api_proxy-0.2.6 lib/api_proxy/signed_request.rb
api_proxy-0.2.5 lib/api_proxy/signed_request.rb
api_proxy-0.2.4 lib/api_proxy/signed_request.rb
api_proxy-0.2.3 lib/api_proxy/signed_request.rb