Class: Semian::ProtectedResource

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/semian/protected_resource.rb

Instance Method Summary collapse

Constructor Details

#initialize(resource, circuit_breaker) ⇒ ProtectedResource

Returns a new instance of ProtectedResource.



8
9
10
11
# File 'lib/semian/protected_resource.rb', line 8

def initialize(resource, circuit_breaker)
  @resource = resource
  @circuit_breaker = circuit_breaker
end

Instance Method Details

#acquire(timeout: nil, scope: nil, adapter: nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/semian/protected_resource.rb', line 18

def acquire(timeout: nil, scope: nil, adapter: nil)
  @circuit_breaker.acquire do
    begin
      @resource.acquire(timeout: timeout) do
        Semian.notify(:success, self, scope, adapter)
        yield self
      end
    rescue ::Semian::TimeoutError
      Semian.notify(:busy, self, scope, adapter)
      raise
    end
  end
rescue ::Semian::OpenCircuitError
  Semian.notify(:circuit_open, self, scope, adapter)
  raise
end

#destroyObject



13
14
15
16
# File 'lib/semian/protected_resource.rb', line 13

def destroy
  @resource.destroy
  @circuit_breaker.destroy
end