class NxtHttpClient::FireCallbacks
Attributes
registry[R]
Public Class Methods
new()
click to toggle source
# File lib/nxt_http_client/fire_callbacks.rb, line 3 def initialize @registry = build_registry end
Public Instance Methods
any_after_callbacks?()
click to toggle source
# File lib/nxt_http_client/fire_callbacks.rb, line 33 def any_after_callbacks? registry.resolve(:after).any? end
clear(*kinds)
click to toggle source
# File lib/nxt_http_client/fire_callbacks.rb, line 7 def clear(*kinds) Array(kinds).each { |kind| registry.register!(kind, []) } end
register(kind, callback)
click to toggle source
# File lib/nxt_http_client/fire_callbacks.rb, line 11 def register(kind, callback) registry.resolve!(kind) << callback end
run(target, kind, *args)
click to toggle source
# 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:)
click to toggle source
# 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:)
click to toggle source
# File lib/nxt_http_client/fire_callbacks.rb, line 37 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:)
click to toggle source
# 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
Private Instance Methods
build_registry()
click to toggle source
# File lib/nxt_http_client/fire_callbacks.rb, line 58 def build_registry NxtRegistry::Registry.new(:callbacks) do register(:before, []) register(:around, []) register(:after, []) end end
run_callback(target, callback, *args)
click to toggle source
# File lib/nxt_http_client/fire_callbacks.rb, line 53 def run_callback(target, callback, *args) args = args.take(callback.arity) target.instance_exec(*args, &callback) end