Class: Legion::Extensions::HandleRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/handle_registry.rb

Instance Method Summary collapse

Constructor Details

#initializeHandleRegistry

Returns a new instance of HandleRegistry.



8
9
10
11
# File 'lib/legion/extensions/handle_registry.rb', line 8

def initialize
  @handles = {}
  @mutex = Mutex.new
end

Instance Method Details

#allObject



37
38
39
# File 'lib/legion/extensions/handle_registry.rb', line 37

def all
  @mutex.synchronize { @handles.values.dup }
end

#delete(lex_name) ⇒ Object



56
57
58
# File 'lib/legion/extensions/handle_registry.rb', line 56

def delete(lex_name)
  @mutex.synchronize { @handles.delete(normalize_name(lex_name)) }
end

#dispatch_allowed?(lex_name) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
# File 'lib/legion/extensions/handle_registry.rb', line 49

def dispatch_allowed?(lex_name)
  handle = fetch(lex_name)
  return true unless handle

  handle.dispatchable?
end

#fetch(lex_name) ⇒ Object



33
34
35
# File 'lib/legion/extensions/handle_registry.rb', line 33

def fetch(lex_name)
  @mutex.synchronize { @handles[normalize_name(lex_name)] }
end

#loadedObject



45
46
47
# File 'lib/legion/extensions/handle_registry.rb', line 45

def loaded
  all.select(&:loaded?)
end

#register(lex_name, **attrs) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/legion/extensions/handle_registry.rb', line 13

def register(lex_name, **attrs)
  key = normalize_name(lex_name)
  @mutex.synchronize do
    current = @handles[key]
    @handles[key] = current ? current.with(**attrs) : Handle.new(lex_name: key, **attrs)
  end
end

#reset!Object



60
61
62
# File 'lib/legion/extensions/handle_registry.rb', line 60

def reset!
  @mutex.synchronize { @handles.clear }
end

#runningObject



41
42
43
# File 'lib/legion/extensions/handle_registry.rb', line 41

def running
  all.select(&:running?)
end

#transition(lex_name, state) ⇒ Object



21
22
23
# File 'lib/legion/extensions/handle_registry.rb', line 21

def transition(lex_name, state)
  update(lex_name, state: state)
end

#update(lex_name, **attrs) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/legion/extensions/handle_registry.rb', line 25

def update(lex_name, **attrs)
  key = normalize_name(lex_name)
  @mutex.synchronize do
    current = @handles[key] || Handle.new(lex_name: key)
    @handles[key] = current.with(**attrs)
  end
end