Sha256: 3230e14232256ec08e913ac76d7a90a3c0c1bbd02c703fc09fb053fdfd89525d

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

module WP
  module HMAC
    class Client
      class UnsuccessfulResponse < StandardError; end

      def initialize(url = nil, app = Rack::Client::Handler::NetHTTP)
        build_rack_client(url, app)
      end

      def build_rack_client(url, app)
        id = key_cabinet.id
        auth_key = key_cabinet.auth_key

        @client = Rack::Client.new(url) do
          use Rack::Config do |env|
            env['HTTP_DATE'] = Time.now.httpdate
          end
          use EY::ApiHMAC::ApiAuth::Client, id, auth_key
          run app
        end
        @client
      end

      def key_cabinet
        @key_cabinet ||= HMAC::KeyCabinet.find_by_auth_id(HMAC.auth_id)
      end

      # Supports:
      # client = WP::HMAC::Client.new('https://www.example.com')
      # client.get('api/staff')
      %i(delete get head options post put patch).each do |method|
        define_method(method) do |*args|
          response = @client.send(method, *args)
          raise UnsuccessfulResponse unless /2\d\d/.match("#{response.status}")
          response
        end
      end

      # Supports:
      # WP::HMAC::Client.get('https://www.example.com/api/staff')
      class << self
        %i(delete get head options post put patch).each do |method|
          define_method(method) do |*args|
            client = Client.new
            client.send(method, *args)
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wp-hmac-0.2.2 lib/wp/hmac/client.rb