Class: PikoTools::State

Inherits:
Object
  • Object
show all
Defined in:
lib/piko_tools/state.rb

Instance Method Summary collapse

Constructor Details

#initialize {|_self| ... } ⇒ State

Returns a new instance of State.

Yields:

  • (_self)

Yield Parameters:



3
4
5
6
7
# File 'lib/piko_tools/state.rb', line 3

def initialize
  @definitions = {}   # :key => {start:, stop:}
  @instances = {}     # :key => instance
  yield(self) if block_given?
end

Instance Method Details

#[](key) ⇒ Object



30
31
32
# File 'lib/piko_tools/state.rb', line 30

def [](key)
  start(key)
end

#clear!Object



59
60
61
62
# File 'lib/piko_tools/state.rb', line 59

def clear!
  stop_all
  @definitions.clear
end

#define(key, start, stop: nil) ⇒ Object



9
10
11
# File 'lib/piko_tools/state.rb', line 9

def define(key, start, stop: nil)
  @definitions[key] = {start: start, stop: stop}
end

#define!(key, start, stop: nil) ⇒ Object



13
14
15
16
# File 'lib/piko_tools/state.rb', line 13

def define!(key, start, stop: nil)
  define(key, start, stop: stop)
  reload(key)
end

#define?(key) ⇒ Boolean

Returns:

  • (Boolean)


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

def define?(key)
  @definitions.key?(key)
end

#keysObject



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

def keys
  @definitions.keys
end

#reload(key) ⇒ Object



54
55
56
57
# File 'lib/piko_tools/state.rb', line 54

def reload(key)
  stop(key)
  start(key)
end

#start(key) ⇒ Object

Raises:

  • (KeyError)


18
19
20
21
22
# File 'lib/piko_tools/state.rb', line 18

def start(key)
  return @instances[key] if started?(key)
  raise KeyError, "Key not defined: '#{key}'" unless define?(key)
  @instances[key] = @definitions[key][:start].call
end

#start_allObject



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

def start_all
  keys.each { |k| start(k) }
end

#started?(key) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/piko_tools/state.rb', line 34

def started?(key)
  @instances.key?(key)
end

#stop(key) ⇒ Object



24
25
26
27
28
# File 'lib/piko_tools/state.rb', line 24

def stop(key)
  return unless started?(key)
  @definitions[key][:stop]&.call(@instances[key])
  @instances.delete(key)
end

#stop_allObject



50
51
52
# File 'lib/piko_tools/state.rb', line 50

def stop_all
  keys.reverse_each { |k| stop(k) }
end