Sha256: 91c4d654832555348dda02c235ed09dc9bd9a31e8f8b953c1ebf6596fb930afa

Contents?: true

Size: 1.48 KB

Versions: 7

Compression:

Stored size: 1.48 KB

Contents

require "akamai_ccu/client"
require "akamai_ccu/endpoint"
require "akamai_ccu/signer"
require "akamai_ccu/response"

module AkamaiCCU
  class Wrapper
    class << self
      Endpoint::Network.constants.each do |network|
        Endpoint::Action.constants.each do |action|
          Endpoint::Mode.constants.each do |mode|
            endpoint = Endpoint.by_constants(network, action, mode)
            define_method(endpoint.to_s) do |objects, secret, headers = [], &block|
              wrapper = new(secret: secret, endpoint: endpoint, headers: headers)
              block.call(wrapper) if block
              wrapper.call(objects)
            end
          end
        end
      end
    end

    attr_accessor :endpoint, :client_klass, :signer_klass, :response_klass

    def initialize(secret:, endpoint:, headers: [],
                   client_klass: Client, signer_klass: Signer, response_klass: Response)
      @secret = secret
      @endpoint = endpoint
      @client_klass = client_klass
      @signer_klass = signer_klass
      @response_klass = response_klass
      @headers = headers
    end

    def call(objects = [])
      return if objects.empty?
      res = client.call(path: @endpoint.path) do |request|
        request.body = { objects: objects }.to_json
        @secret.touch
        @signer_klass.new(request, @secret, @headers).call!
      end
      response_klass.factory(res.body)
    end

    private def client
      @client ||= @client_klass.new(host: @secret.host)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
akamai_ccu-1.3.4 lib/akamai_ccu/wrapper.rb
akamai_ccu-1.3.3 lib/akamai_ccu/wrapper.rb
akamai_ccu-1.3.2 lib/akamai_ccu/wrapper.rb
akamai_ccu-1.3.1 lib/akamai_ccu/wrapper.rb
akamai_ccu-1.3.0 lib/akamai_ccu/wrapper.rb
akamai_ccu-1.2.1 lib/akamai_ccu/wrapper.rb
akamai_ccu-1.2.0 lib/akamai_ccu/wrapper.rb