Class: NxtHttpClient::FireCallbacks
- Inherits:
-
Object
- Object
- NxtHttpClient::FireCallbacks
- Defined in:
- lib/nxt_http_client/fire_callbacks.rb
Instance Method Summary collapse
- #any_after_callbacks? ⇒ Boolean
- #any_around_callbacks? ⇒ Boolean
- #clear(*kinds) ⇒ Object
-
#initialize ⇒ FireCallbacks
constructor
A new instance of FireCallbacks.
- #initialize_copy(original) ⇒ Object
- #register(kind, callback) ⇒ Object
- #run(target, kind, *args) ⇒ Object
- #run_after(target:, request:, response:, result:, error:) ⇒ Object
- #run_around(target:, request:, response_handler:, fire:) ⇒ Object
- #run_before(target:, request:, response_handler:) ⇒ Object
Constructor Details
#initialize ⇒ FireCallbacks
Returns a new instance of FireCallbacks.
3 4 5 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 3 def initialize @registry = build_registry end |
Instance Method Details
#any_after_callbacks? ⇒ Boolean
37 38 39 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 37 def any_after_callbacks? registry.resolve(:after).any? end |
#any_around_callbacks? ⇒ Boolean
33 34 35 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 33 def any_around_callbacks? registry.resolve(:around).any? end |
#clear(*kinds) ⇒ Object
7 8 9 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 7 def clear(*kinds) Array(kinds).each { |kind| registry.register!(kind, []) } end |
#initialize_copy(original) ⇒ Object
53 54 55 56 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 53 def initialize_copy(original) @registry = original.instance_variable_get(:@registry).clone super end |
#register(kind, callback) ⇒ Object
11 12 13 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 11 def register(kind, callback) registry.resolve!(kind) << callback end |
#run(target, kind, *args) ⇒ Object
15 16 17 18 19 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 15 def run(target, kind, *args) registry.resolve!(kind).each do |callback| run_callback(target, callback, *args) end end |
#run_after(target:, request:, response:, result:, error:) ⇒ Object
27 28 29 30 31 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 27 def run_after(target:, request:, response:, result:, error:) registry.resolve!(:after).inject(result) do |_, callback| run_callback(target, callback, *[target, request, response, result, error]) end end |
#run_around(target:, request:, response_handler:, fire:) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 41 def run_around(target:, request:, response_handler:, fire:) around_callbacks = registry.resolve!(:around) return fire.call unless around_callbacks.any? args = *[target, request, response_handler] callback_chain = around_callbacks.reverse.inject(fire) do |previous, callback| -> { target.instance_exec(*args, previous, &callback) } end callback_chain.call end |
#run_before(target:, request:, response_handler:) ⇒ Object
21 22 23 24 25 |
# File 'lib/nxt_http_client/fire_callbacks.rb', line 21 def run_before(target:, request:, response_handler:) registry.resolve!(:before).each do |callback| run_callback(target, callback, *[target, request, response_handler]) end end |