class StubRequests::CallbackRegistry

Class Registry handles callbacks to webmock requests

@author Mikael Henriksson <mikael@zoolutions.se> @since 0.1.3

Attributes

callbacks[R]

@!attribute [r] callbacks

@return [Concurrent::Array<Callback>] a list of callbacks

Public Class Methods

new() click to toggle source

Used by Singleton

# File lib/stub_requests/callback_registry.rb, line 39
def initialize
  @callbacks = Concurrent::Array.new
end

Public Instance Methods

invoke_callbacks(request_stub) click to toggle source

Notifies subscribers that a request was made

@param [RequestStub] request_stub the stubbed request

@return [void]

# File lib/stub_requests/callback_registry.rb, line 95
def invoke_callbacks(request_stub)
  return unless (callback = find_by(request_stub.service_id, request_stub.endpoint_id, request_stub.verb))

  callback.call(request_stub)
end
register(service_id, endpoint_id, verb, block) click to toggle source

Register to a service endpoint call

@param [Symbol] service_id the id of a service @param [Symbol] endpoint_id the id of an endpoint @param [optional, Symbol] verb the HTTP verb to subscribe to @param [proc] block the callback to use for when.a request was made

@return [Callback] the added callback

# File lib/stub_requests/callback_registry.rb, line 63
def register(service_id, endpoint_id, verb, block)
  callback = find_by(service_id, endpoint_id, verb)
  return callback if callback

  callback = Callback.new(service_id, endpoint_id, verb, block)
  callbacks.push(callback)
  callback
end
reset() click to toggle source

Resets the map with registered services

@api private

# File lib/stub_requests/callback_registry.rb, line 48
def reset
  callbacks.clear
end
unregister(service_id, endpoint_id, verb) click to toggle source

Unregister to a service endpoint call

@param [Symbol] service_id the id of a service @param [Symbol] endpoint_id the id of an endpoint @param [optional, Symbol] verb the HTTP verb to subscribe to

@return [Callback] the deleted callback

# File lib/stub_requests/callback_registry.rb, line 82
def unregister(service_id, endpoint_id, verb)
  return unless (callback = find_by(service_id, endpoint_id, verb))

  callbacks.delete(callback)
end

Private Instance Methods

find_by(service_id, endpoint_id, verb) click to toggle source

Finds a callback for a service endpoint

@param [Symbol] service_id the id of a service @param [Symbol] endpoint_id the id of an endpoint @param [optional, Symbol] verb the HTTP verb to subscribe to

@return [Callback]

# File lib/stub_requests/callback_registry.rb, line 113
def find_by(service_id, endpoint_id, verb)
  find do |sub|
    sub.service_id == service_id &&
      sub.endpoint_id == endpoint_id &&
      ([sub.verb, verb].include?(:any) || sub.verb == verb)
  end
end