Class: Circuitbox

Inherits:
Object
  • Object
show all
Defined in:
lib/circuitbox.rb,
lib/circuitbox/version.rb,
lib/circuitbox/notifier.rb,
lib/circuitbox/errors/error.rb,
lib/circuitbox/circuit_breaker.rb,
lib/circuitbox/excon_middleware.rb,
lib/circuitbox/faraday_middleware.rb,
lib/circuitbox/errors/open_circuit_error.rb,
lib/circuitbox/errors/service_failure_error.rb

Defined Under Namespace

Classes: CircuitBreaker, Error, ExconMiddleware, FaradayMiddleware, Notifier, OpenCircuitError, ServiceFailureError

Constant Summary collapse

VERSION =
'1.0.2'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCircuitbox

Returns a new instance of Circuitbox.



25
26
27
# File 'lib/circuitbox.rb', line 25

def initialize
  self.instance_eval(&@@configure) if @@configure
end

Instance Attribute Details

#circuit_storeObject

Returns the value of attribute circuit_store.



18
19
20
# File 'lib/circuitbox.rb', line 18

def circuit_store
  @circuit_store
end

#circuitsObject

Returns the value of attribute circuits.



18
19
20
# File 'lib/circuitbox.rb', line 18

def circuits
  @circuits
end

Class Method Details

.[](service_identifier, options = {}) ⇒ Object



46
47
48
# File 'lib/circuitbox.rb', line 46

def self.[](service_identifier, options = {})
  self.circuit(service_identifier, options)
end

.circuit(service_identifier, options = {}) ⇒ Object



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

def self.circuit(service_identifier, options = {})
  service_name = self.parameter_to_service_name(service_identifier)

  self.instance.circuits ||= Hash.new
  self.instance.circuits[service_name] ||= CircuitBreaker.new(service_name, options)

  if block_given?
    self.instance.circuits[service_name].run { yield }
  else
    self.instance.circuits[service_name]
  end
end

.circuit_storeObject



38
39
40
# File 'lib/circuitbox.rb', line 38

def self.circuit_store
  self.instance.circuit_store ||= Moneta.new(:Memory)
end

.circuit_store=(store) ⇒ Object



42
43
44
# File 'lib/circuitbox.rb', line 42

def self.circuit_store=(store)
  self.instance.circuit_store = store
end

.configure(&block) ⇒ Object



29
30
31
# File 'lib/circuitbox.rb', line 29

def self.configure(&block)
  @@configure = block if block
end

.instanceObject



21
22
23
# File 'lib/circuitbox.rb', line 21

def self.instance
  @@instance ||= new
end

.parameter_to_service_name(param) ⇒ Object



63
64
65
66
# File 'lib/circuitbox.rb', line 63

def self.parameter_to_service_name(param)
  uri = URI(param.to_s)
  uri.host.present? ? uri.host : param.to_s
end

.resetObject



33
34
35
36
# File 'lib/circuitbox.rb', line 33

def self.reset
  @@instance = nil
  @@configure = nil
end