Class: PikoTools::State
- Inherits:
-
Object
- Object
- PikoTools::State
- Defined in:
- lib/piko_tools/state.rb
Instance Method Summary collapse
- #[](key) ⇒ Object
- #clear! ⇒ Object
- #define(key, start, stop: nil) ⇒ Object
- #define!(key, start, stop: nil) ⇒ Object
- #define?(key) ⇒ Boolean
-
#initialize {|_self| ... } ⇒ State
constructor
A new instance of State.
- #keys ⇒ Object
- #reload(key) ⇒ Object
- #start(key) ⇒ Object
- #start_all ⇒ Object
- #started?(key) ⇒ Boolean
- #stop(key) ⇒ Object
- #stop_all ⇒ Object
Constructor Details
#initialize {|_self| ... } ⇒ State
Returns a new instance of State.
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
38 39 40 |
# File 'lib/piko_tools/state.rb', line 38 def define?(key) @definitions.key?(key) end |
#keys ⇒ Object
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
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_all ⇒ Object
46 47 48 |
# File 'lib/piko_tools/state.rb', line 46 def start_all keys.each { |k| start(k) } end |
#started?(key) ⇒ 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_all ⇒ Object
50 51 52 |
# File 'lib/piko_tools/state.rb', line 50 def stop_all keys.reverse_each { |k| stop(k) } end |