soveran-micromachine 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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