Class: NxtHttpClient::ResponseHandler

Inherits:
Object
  • Object
show all
Includes:
NxtRegistry
Defined in:
lib/nxt_http_client/response_handler.rb

Constant Summary collapse

CallbackAlreadyRegistered =
Class.new(StandardError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeResponseHandler

Returns a new instance of ResponseHandler.



6
7
8
# File 'lib/nxt_http_client/response_handler.rb', line 6

def initialize
  @result = nil
end

Instance Attribute Details

#resultObject

Returns the value of attribute result.



10
11
12
# File 'lib/nxt_http_client/response_handler.rb', line 10

def result
  @result
end

Instance Method Details

#callback_for_response(response) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/nxt_http_client/response_handler.rb', line 37

def callback_for_response(response)
  key_from_response = response.code.to_s
  matching_any_callback = callbacks.resolve('any')
  return matching_any_callback if matching_any_callback.present?

  callbacks.resolve(key_from_response) ||
    response.success? && callbacks.resolve('success') ||
    response.timed_out? && callbacks.resolve('timed_out') ||
    !response.success? && callbacks.resolve('error') ||
    callbacks.resolve('others')
end

#callbacksObject



49
50
51
52
53
54
55
# File 'lib/nxt_http_client/response_handler.rb', line 49

def callbacks
  @callbacks ||= NxtRegistry::Registry.new(
    :callbacks,
    call: false,
    on_key_already_registered: ->(key) { raise_callback_already_registered(key) }
  )
end

#configure(&block) ⇒ Object



16
17
18
# File 'lib/nxt_http_client/response_handler.rb', line 16

def configure(&block)
  tap { |handler| block.call(handler) }
end

#eval_callback(target, key, response) ⇒ Object



12
13
14
# File 'lib/nxt_http_client/response_handler.rb', line 12

def eval_callback(target, key, response)
  target.instance_exec(response, &callbacks.resolve(key))
end

#register_callback(code, overwrite: false, &block) ⇒ Object Also known as: on



20
21
22
23
24
25
26
27
28
# File 'lib/nxt_http_client/response_handler.rb', line 20

def register_callback(code, overwrite: false, &block)
  code = regex_or_code(code)

  if overwrite
    callbacks.register!(code, block)
  else
    callbacks.register(code, block)
  end
end

#register_callback!(code, &block) ⇒ Object Also known as: on!



30
31
32
# File 'lib/nxt_http_client/response_handler.rb', line 30

def register_callback!(code, &block)
  register_callback(code, overwrite: true, &block)
end