soveran-micromachine 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/README.markdown +14 -8
  2. data/Rakefile +7 -2
  3. data/lib/micromachine.rb +20 -8
  4. metadata +1 -1
@@ -19,16 +19,22 @@ Usage
19
19
 
20
20
  require 'micromachine'
21
21
 
22
- fsm = MicroMachine.new(:new) # Initial state.
22
+ machine = MicroMachine.new(:new) # Initial state.
23
23
 
24
- fsm.transitions_for[:confirm] = { :new => :confirmed }
25
- fsm.transitions_for[:ignore] = { :new => :ignored }
26
- fsm.transitions_for[:reset] = { :confirmed => :new, :ignored => :new }
24
+ machine.transitions_for[:confirm] = { :new => :confirmed }
25
+ machine.transitions_for[:ignore] = { :new => :ignored }
26
+ machine.transitions_for[:reset] = { :confirmed => :new, :ignored => :new }
27
27
 
28
- fsm.fire(:confirm) #=> true
29
- fsm.fire(:ignore) #=> false
30
- fsm.fire(:reset) #=> true
31
- fsm.fire(:ignore) #=> true
28
+ machine.trigger(:confirm) #=> true
29
+ machine.trigger(:ignore) #=> false
30
+ machine.trigger(:reset) #=> true
31
+ machine.trigger(:ignore) #=> true
32
+
33
+ It can also have callbacks when entering some state:
34
+
35
+ machine.on(:confirmed) do
36
+ puts "Confirmed"
37
+ end
32
38
 
33
39
  Installation
34
40
  ------------
data/Rakefile CHANGED
@@ -7,14 +7,19 @@ gem_spec_file = 'micromachine.gemspec'
7
7
 
8
8
  gem_spec = eval(File.read(gem_spec_file)) rescue nil
9
9
 
10
+ task :default => :test
11
+
12
+ Rake::TestTask.new(:test) do |t|
13
+ t.pattern = 'test/**/*_test.rb'
14
+ t.verbose = false
15
+ end
16
+
10
17
  Rake::GemPackageTask.new(gem_spec) do |pkg|
11
18
  pkg.need_zip = false
12
19
  pkg.need_tar = false
13
20
  rm_f FileList['pkg/**/*.*']
14
21
  end if gem_spec
15
22
 
16
- task :default => :gem
17
-
18
23
  desc "Generate the gemspec file."
19
24
  task :gemspec do
20
25
  require 'erb'
@@ -2,17 +2,22 @@
2
2
  #
3
3
  # Usage:
4
4
  #
5
- # fsm = MicroMachine.new(:new) # Initial state.
5
+ # machine = MicroMachine.new(:new) # Initial state.
6
6
  #
7
- # fsm.transitions_for[:confirm] = { :new => :confirmed }
8
- # fsm.transitions_for[:ignore] = { :new => :ignored }
9
- # fsm.transitions_for[:reset] = { :confirmed => :new, :ignored => :new }
7
+ # machine.transitions_for[:confirm] = { :new => :confirmed }
8
+ # machine.transitions_for[:ignore] = { :new => :ignored }
9
+ # machine.transitions_for[:reset] = { :confirmed => :new, :ignored => :new }
10
10
  #
11
- # fsm.trigger(:confirm) #=> true
12
- # fsm.trigger(:ignore) #=> false
13
- # fsm.trigger(:reset) #=> true
14
- # fsm.trigger(:ignore) #=> true
11
+ # machine.trigger(:confirm) #=> true
12
+ # machine.trigger(:ignore) #=> false
13
+ # machine.trigger(:reset) #=> true
14
+ # machine.trigger(:ignore) #=> true
15
15
  #
16
+ # It also handles callbacks that are executed when entering a different state.
17
+ #
18
+ # machine.on(:confirmed) do
19
+ # puts "Confirmed"
20
+ # end
16
21
  class MicroMachine
17
22
  attr :transitions_for
18
23
  attr :state
@@ -20,11 +25,18 @@ class MicroMachine
20
25
  def initialize initial_state
21
26
  @state = initial_state
22
27
  @transitions_for = Hash.new
28
+ @callbacks = Hash.new { |hash, key| hash[key] = [] }
29
+ end
30
+
31
+ def on key, &block
32
+ @callbacks[key] << block
23
33
  end
24
34
 
25
35
  def trigger event
26
36
  if transitions_for[event][@state]
27
37
  @state = transitions_for[event][@state]
38
+ @callbacks[@state].each { |callback| callback.call }
39
+ true
28
40
  end
29
41
  end
30
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soveran-micromachine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michel Martens