Class: Supervision::Registry

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

Overview

A class responsible for registering/unregistering circuits

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Initialize a Registry



9
10
11
12
# File 'lib/supervision/registry.rb', line 9

def initialize
  @lock = Mutex.new
  @map = {}
end

Instance Method Details

#[](name) ⇒ Object Also known as: get

Retrieve a circuit by name

Parameters:

  • name (String)


40
41
42
43
44
# File 'lib/supervision/registry.rb', line 40

def [](name)
  @lock.synchronize do
    @map[name.to_sym]
  end
end

#[]=(name, circuit) ⇒ Object Also known as: register

Register a circuit

Parameters:



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/supervision/registry.rb', line 23

def []=(name, circuit)
  unless circuit.is_a?(CircuitBreaker)
    raise TypeError, 'not a type of circuit breaker'
  end
  if registered?(name)
    raise DuplicateEntryError, "`#{name}` is already registered"
  end
  @lock.synchronize do
    @map[name.to_sym] = circuit
  end
end

#clearHash

Remove all registered circuits

Examples:

registry.clear

Returns:

  • (Hash)


94
95
96
97
98
99
100
101
# File 'lib/supervision/registry.rb', line 94

def clear
  hash = nil
  @lock.synchronize do
    hash = @map.dup
    @map.clear
  end
  hash
end

#delete(name) ⇒ Object Also known as: unregister

Remove from registry



49
50
51
52
53
# File 'lib/supervision/registry.rb', line 49

def delete(name)
  @lock.synchronize do
    @map.delete name.to_sym
  end
end

#empty?Boolean

Check if registry is empty or not

Returns:

  • (Boolean)


82
83
84
# File 'lib/supervision/registry.rb', line 82

def empty?
  @lock.synchronize { @map.empty? }
end

#namesArray

Retrieve registered circuits’ names

Returns:

  • (Array)


73
74
75
# File 'lib/supervision/registry.rb', line 73

def names
  @lock.synchronize { @map.keys }
end

#registered?(name) ⇒ Boolean

Check if circuit is in registry

Returns:

  • (Boolean)


64
65
66
# File 'lib/supervision/registry.rb', line 64

def registered?(name)
  names.include?(name) || names.include?(name.to_sym)
end