Sha256: 86f8582c9588ad4378b14675c2e28a422d59c83cb5cd42e52159c607228076d9

Contents?: true

Size: 1.82 KB

Versions: 8

Compression:

Stored size: 1.82 KB

Contents

module NxtHttpClient
  module ClientDsl
    def configure(opts = {}, &block)
      opts.each do |k,v|
        default_config.send(k, v)
      end
      default_config.tap { |d| block.call(d) }
      default_config
    end

    def before_fire(&block)
      @before_fire_callback = block
    end

    def before_fire_callback
      @before_fire ||= dup_instance_variable_from_ancestor_chain(:@before_fire_callback)
    end

    def after_fire(&block)
      @after_fire_callback = block
    end

    def after_fire_callback
      @after_fire_callback ||= dup_instance_variable_from_ancestor_chain(:@after_fire_callback)
    end

    def default_config
      @default_config ||= dup_instance_variable_from_ancestor_chain(:@default_config) { DefaultConfig.new }
    end

    def register_response_handler(handler = nil, &block)
      @response_handler = handler
      @response_handler ||= dup_instance_variable_from_ancestor_chain(:@response_handler) { NxtHttpClient::ResponseHandler.new }
      @response_handler.configure(&block) if block_given?
      @response_handler
    end

    def response_handler
      @response_handler ||= dup_instance_variable_from_ancestor_chain(:@response_handler) { NxtHttpClient::ResponseHandler.new }
    end

    def client_ancestors
      ancestors.select { |ancestor| ancestor <= NxtHttpClient::Client }
    end

    def instance_variable_from_ancestor_chain(instance_variable_name)
      client = client_ancestors.find do |client|
        client.instance_variable_get(instance_variable_name)
      end

      client.instance_variable_get(instance_variable_name)
    end

    def dup_instance_variable_from_ancestor_chain(instance_variable_name)
      result = instance_variable_from_ancestor_chain(instance_variable_name).dup

      if block_given?
        result || yield
      else
        result
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
nxt_http_client-0.2.9 lib/nxt_http_client/client_dsl.rb
nxt_http_client-0.2.8 lib/nxt_http_client/client_dsl.rb
nxt_http_client-0.2.7 lib/nxt_http_client/client_dsl.rb
nxt_http_client-0.2.6 lib/nxt_http_client/client_dsl.rb
nxt_http_client-0.2.5 lib/nxt_http_client/client_dsl.rb
nxt_http_client-0.2.4 lib/nxt_http_client/client_dsl.rb
nxt_http_client-0.2.3 lib/nxt_http_client/client_dsl.rb
nxt_http_client-0.2.2 lib/nxt_http_client/client_dsl.rb