Class: Celluloid::Internals::Registry
- Inherits:
-
Object
- Object
- Celluloid::Internals::Registry
- Defined in:
- lib/celluloid/internals/registry.rb
Overview
The Registry allows us to refer to specific actors by human-meaningful names
Instance Method Summary collapse
-
#[](name) ⇒ Object
(also: #get)
Retrieve an actor by name.
-
#[]=(name, actor) ⇒ Object
(also: #set)
Register an Actor.
- #add(name, actor, branch = :services) ⇒ Object
- #branch(name) ⇒ Object
-
#clear ⇒ Object
removes and returns all registered actors as a hash of ‘name => actor` can be used in testing to clear the registry.
- #delete(name) ⇒ Object
- #include?(name) ⇒ Boolean
- #index ⇒ Object
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
-
#names ⇒ Object
List all registered actors by name.
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
7 8 9 10 11 12 13 |
# File 'lib/celluloid/internals/registry.rb', line 7 def initialize @root = nil # keep root out of the standard list of registered names @actors = {} # hash of name => actor @index = {} # hash of name => branch @branches = {} # hash of branch => [ actors ] @registry = Mutex.new end |
Instance Method Details
#[](name) ⇒ Object Also known as: get
Retrieve an actor by name
53 54 55 56 57 58 |
# File 'lib/celluloid/internals/registry.rb', line 53 def [](name) return @root if name == :root @registry.synchronize do @actors[name.to_sym] end end |
#[]=(name, actor) ⇒ Object Also known as: set
Register an Actor
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/celluloid/internals/registry.rb', line 16 def []=(name, actor) if name == :root @registry.synchronize do @root = actor end else actor_singleton = class << actor; self; end unless actor_singleton.ancestors.include? Proxy::Abstract fail TypeError, "not an actor" end # if actor.class.ancestors.include? Supervision::Container # puts "Supervisor: #{actor.links.inspect}" # end @registry.synchronize do @actors[name.to_sym] = actor end actor.mailbox << NamingRequest.new(name.to_sym) end end |
#add(name, actor, branch = :services) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/celluloid/internals/registry.rb', line 37 def add(name, actor, branch=:services) set(name, actor) @registry.synchronize do unless @branches.key? branch @branches[branch] = [] self.class.instance_eval do remove_method(branch) rescue nil define_method(branch) { @branches[branch] } end @branches[branch] << name end @index[name.to_sym] = branch end end |
#branch(name) ⇒ Object
60 61 62 63 64 |
# File 'lib/celluloid/internals/registry.rb', line 60 def branch(name) @registry.synchronize do @index.select { |a, b| b == name } end end |
#clear ⇒ Object
removes and returns all registered actors as a hash of ‘name => actor` can be used in testing to clear the registry
91 92 93 94 95 96 97 98 99 |
# File 'lib/celluloid/internals/registry.rb', line 91 def clear hash = nil @registry.synchronize do hash = @actors.dup @actors.clear @index.clear end hash end |
#delete(name) ⇒ Object
69 70 71 72 73 74 |
# File 'lib/celluloid/internals/registry.rb', line 69 def delete(name) @registry.synchronize do @index.delete name.to_sym @actors.delete name.to_sym end end |
#include?(name) ⇒ Boolean
76 77 78 |
# File 'lib/celluloid/internals/registry.rb', line 76 def include?(name) names.include? name end |
#index ⇒ Object
85 86 87 |
# File 'lib/celluloid/internals/registry.rb', line 85 def index @registry.synchronize { @index } end |
#names ⇒ Object
List all registered actors by name
81 82 83 |
# File 'lib/celluloid/internals/registry.rb', line 81 def names @registry.synchronize { @actors.keys } end |