Class: NxtHttpClient::FireCallbacks

Inherits:
Object
  • Object
show all
Defined in:
lib/nxt_http_client/fire_callbacks.rb

Instance Method Summary collapse

Constructor Details

#initializeFireCallbacks

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

Returns:

  • (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

Returns:

  • (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