Class: Gruf::Interceptors::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/gruf/interceptors/registry.rb

Overview

Handles registration of interceptors

Defined Under Namespace

Classes: InterceptorNotFoundError

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



24
25
26
# File 'lib/gruf/interceptors/registry.rb', line 24

def initialize
  @registry ||= []
end

Instance Method Details

#clearObject

Clear the registry



101
102
103
104
105
# File 'lib/gruf/interceptors/registry.rb', line 101

def clear
  interceptors_mutex do
    @registry = []
  end
end

#countInteger

Returns The number of interceptors currently loaded.

Returns:

  • (Integer)

    The number of interceptors currently loaded



110
111
112
113
114
115
# File 'lib/gruf/interceptors/registry.rb', line 110

def count
  interceptors_mutex do
    @registry ||= []
    @registry.count
  end
end

#insert_after(after_class, interceptor_class, options = {}) ⇒ Object

Insert an interceptor after another specified interceptor

Parameters:

  • after_class (Gruf::Interceptors::Base)

    The interceptor to insert after

  • interceptor_class (Gruf::Interceptors::Base)

    The class of the interceptor to add

  • options (Hash) (defaults to: {})

    A hash of options to pass into the interceptor during initialization



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/gruf/interceptors/registry.rb', line 69

def insert_after(after_class, interceptor_class, options = {})
  interceptors_mutex do
    pos = @registry.find_index { |opts| opts.fetch(:klass, '') == after_class }
    raise InterceptorNotFoundError if pos.nil?
    @registry.insert(
      (pos + 1),
      klass: interceptor_class,
      options: options
    )
  end
end

#insert_before(before_class, interceptor_class, options = {}) ⇒ Object

Insert an interceptor before another specified interceptor

Parameters:

  • before_class (Gruf::Interceptors::Base)

    The interceptor to insert before

  • interceptor_class (Gruf::Interceptors::Base)

    The class of the interceptor to add

  • options (Hash) (defaults to: {})

    A hash of options to pass into the interceptor during initialization



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/gruf/interceptors/registry.rb', line 50

def insert_before(before_class, interceptor_class, options = {})
  interceptors_mutex do
    pos = @registry.find_index { |opts| opts.fetch(:klass, '') == before_class }
    raise InterceptorNotFoundError if pos.nil?
    @registry.insert(
      pos,
      klass: interceptor_class,
      options: options
    )
  end
end

#prepare(request, error) ⇒ Array<Gruf::Interceptors::Base>

Load and return all interceptors for the given request

Parameters:

Returns:



88
89
90
91
92
93
94
95
96
# File 'lib/gruf/interceptors/registry.rb', line 88

def prepare(request, error)
  is = []
  interceptors_mutex do
    @registry.each do |o|
      is << o[:klass].new(request, error, o[:options])
    end
  end
  is
end

#use(interceptor_class, options = {}) ⇒ Object

Add an interceptor to the registry

Parameters:

  • interceptor_class (Gruf::Interceptors::Base)

    The class of the interceptor to add

  • options (Hash) (defaults to: {})

    A hash of options to pass into the interceptor during initialization



34
35
36
37
38
39
40
41
# File 'lib/gruf/interceptors/registry.rb', line 34

def use(interceptor_class, options = {})
  interceptors_mutex do
    @registry << {
      klass: interceptor_class,
      options: options
    }
  end
end