simple_state_machine 0.5.3 → 0.6.2

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 (38) hide show
  1. checksums.yaml +7 -0
  2. data/Changelog.rdoc +23 -0
  3. data/README.rdoc +154 -100
  4. data/lib/simple_state_machine/active_record.rb +2 -62
  5. data/lib/simple_state_machine/decorator/active_record.rb +68 -0
  6. data/lib/simple_state_machine/decorator/default.rb +91 -0
  7. data/lib/simple_state_machine/railtie.rb +1 -1
  8. data/lib/simple_state_machine/simple_state_machine.rb +8 -251
  9. data/lib/simple_state_machine/state_machine.rb +88 -0
  10. data/lib/simple_state_machine/state_machine_definition.rb +72 -0
  11. data/lib/simple_state_machine/tools/graphviz.rb +21 -0
  12. data/lib/simple_state_machine/tools/inspector.rb +44 -0
  13. data/lib/simple_state_machine/transition.rb +40 -0
  14. data/lib/simple_state_machine/version.rb +1 -1
  15. data/lib/simple_state_machine.rb +13 -3
  16. data/lib/tasks/graphviz.rake +31 -0
  17. metadata +37 -150
  18. data/.gitignore +0 -1
  19. data/.rspec +0 -3
  20. data/Gemfile +0 -4
  21. data/Rakefile +0 -28
  22. data/autotest/discover.rb +0 -1
  23. data/examples/conversation.rb +0 -33
  24. data/examples/lamp.rb +0 -21
  25. data/examples/relationship.rb +0 -87
  26. data/examples/traffic_light.rb +0 -17
  27. data/examples/user.rb +0 -37
  28. data/lib/tasks/graphiz.rake +0 -13
  29. data/rails/graphiz.rake +0 -16
  30. data/simple_state_machine.gemspec +0 -31
  31. data/spec/active_record_spec.rb +0 -223
  32. data/spec/decorator_spec.rb +0 -195
  33. data/spec/examples_spec.rb +0 -60
  34. data/spec/mountable_spec.rb +0 -24
  35. data/spec/simple_state_machine_spec.rb +0 -129
  36. data/spec/spec_helper.rb +0 -7
  37. data/spec/state_machine_definition_spec.rb +0 -89
  38. data/spec/state_machine_spec.rb +0 -26
metadata CHANGED
@@ -1,176 +1,63 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: simple_state_machine
3
- version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease:
6
- segments:
7
- - 0
8
- - 5
9
- - 3
10
- version: 0.5.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.2
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Marek de Heus
14
8
  - Petrik de Heus
15
- autorequire:
9
+ autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
-
19
- date: 2011-03-06 00:00:00 +01:00
20
- default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
23
- name: rake
24
- prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 3
31
- segments:
32
- - 0
33
- version: "0"
34
- type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: ZenTest
38
- prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 0
47
- version: "0"
48
- type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: rspec
52
- prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
62
- type: :development
63
- version_requirements: *id003
64
- - !ruby/object:Gem::Dependency
65
- name: activerecord
66
- prerelease: false
67
- requirement: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
- requirements:
70
- - - ~>
71
- - !ruby/object:Gem::Version
72
- hash: 9
73
- segments:
74
- - 2
75
- - 3
76
- - 5
77
- version: 2.3.5
78
- type: :development
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
81
- name: sqlite3-ruby
82
- prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
84
- none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 0
91
- version: "0"
92
- type: :development
93
- version_requirements: *id005
94
- description: Simple State Machine is a state machine that focuses on events instead of states
95
- email:
12
+ date: 2021-12-15 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A simple DSL to decorate existing methods with state transition guards.
15
+ email:
96
16
  - FIX@example.com
97
17
  executables: []
98
-
99
18
  extensions: []
100
-
101
- extra_rdoc_files:
19
+ extra_rdoc_files:
102
20
  - LICENSE
103
21
  - README.rdoc
104
- files:
105
- - .gitignore
106
- - .rspec
107
- - Gemfile
22
+ files:
23
+ - Changelog.rdoc
108
24
  - LICENSE
109
25
  - README.rdoc
110
- - Rakefile
111
- - autotest/discover.rb
112
- - examples/conversation.rb
113
- - examples/lamp.rb
114
- - examples/relationship.rb
115
- - examples/traffic_light.rb
116
- - examples/user.rb
117
26
  - lib/simple_state_machine.rb
118
27
  - lib/simple_state_machine/active_record.rb
28
+ - lib/simple_state_machine/decorator/active_record.rb
29
+ - lib/simple_state_machine/decorator/default.rb
119
30
  - lib/simple_state_machine/rails2_task_loader.rb
120
31
  - lib/simple_state_machine/railtie.rb
121
32
  - lib/simple_state_machine/simple_state_machine.rb
33
+ - lib/simple_state_machine/state_machine.rb
34
+ - lib/simple_state_machine/state_machine_definition.rb
35
+ - lib/simple_state_machine/tools/graphviz.rb
36
+ - lib/simple_state_machine/tools/inspector.rb
37
+ - lib/simple_state_machine/transition.rb
122
38
  - lib/simple_state_machine/version.rb
123
- - lib/tasks/graphiz.rake
124
- - rails/graphiz.rake
125
- - simple_state_machine.gemspec
126
- - spec/active_record_spec.rb
127
- - spec/decorator_spec.rb
128
- - spec/examples_spec.rb
129
- - spec/mountable_spec.rb
130
- - spec/simple_state_machine_spec.rb
131
- - spec/spec_helper.rb
132
- - spec/state_machine_definition_spec.rb
133
- - spec/state_machine_spec.rb
134
- has_rdoc: true
39
+ - lib/tasks/graphviz.rake
135
40
  homepage: http://github.com/mdh/ssm
136
41
  licenses: []
137
-
138
- post_install_message:
139
- rdoc_options:
140
- - --charset=UTF-8
141
- require_paths:
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options:
45
+ - "--charset=UTF-8"
46
+ require_paths:
142
47
  - lib
143
- required_ruby_version: !ruby/object:Gem::Requirement
144
- none: false
145
- requirements:
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
146
50
  - - ">="
147
- - !ruby/object:Gem::Version
148
- hash: 3
149
- segments:
150
- - 0
151
- version: "0"
152
- required_rubygems_version: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
155
55
  - - ">="
156
- - !ruby/object:Gem::Version
157
- hash: 3
158
- segments:
159
- - 0
160
- version: "0"
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
161
58
  requirements: []
162
-
163
- rubyforge_project:
164
- rubygems_version: 1.5.2
165
- signing_key:
166
- specification_version: 3
59
+ rubygems_version: 3.1.6
60
+ signing_key:
61
+ specification_version: 4
167
62
  summary: A simple DSL to decorate existing methods with logic that guards state transitions.
168
- test_files:
169
- - spec/active_record_spec.rb
170
- - spec/decorator_spec.rb
171
- - spec/examples_spec.rb
172
- - spec/mountable_spec.rb
173
- - spec/simple_state_machine_spec.rb
174
- - spec/spec_helper.rb
175
- - spec/state_machine_definition_spec.rb
176
- - spec/state_machine_spec.rb
63
+ test_files: []
data/.gitignore DELETED
@@ -1 +0,0 @@
1
- *.swp
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --color
2
- #--debugger
3
- --backtrace
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- # A sample Gemfile
2
- source "http://rubygems.org"
3
-
4
- gemspec
data/Rakefile DELETED
@@ -1,28 +0,0 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
3
-
4
- #require 'spec/rake/spectask'
5
- #Spec::Rake::SpecTask.new(:spec) do |spec|
6
- # spec.libs << 'lib' << 'spec'
7
- # spec.spec_files = FileList['spec/**/*_spec.rb']
8
- #end
9
- #
10
- #Spec::Rake::SpecTask.new(:rcov) do |spec|
11
- # spec.libs << 'lib' << 'spec'
12
- # spec.pattern = 'spec/**/*_spec.rb'
13
- # spec.rcov = true
14
- #end
15
- #
16
- #task :spec => :check_dependencies
17
- #
18
- #task :default => :spec
19
-
20
- require 'rake/rdoctask'
21
- Rake::RDocTask.new do |rdoc|
22
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
23
-
24
- rdoc.rdoc_dir = 'rdoc'
25
- rdoc.title = "simple_state_machine #{version}"
26
- rdoc.rdoc_files.include('README*')
27
- rdoc.rdoc_files.include('lib/**/*.rb')
28
- end
data/autotest/discover.rb DELETED
@@ -1 +0,0 @@
1
- Autotest.add_discovery { "rspec2" }
@@ -1,33 +0,0 @@
1
- # Implementation of the AASM Conversation
2
- #
3
- # class Conversation
4
- # include AASM
5
- #
6
- # aasm_column :current_state # defaults to aasm_state
7
- #
8
- # aasm_initial_state :unread
9
- #
10
- # aasm_state :unread
11
- # aasm_state :read
12
- # aasm_state :closed
13
- #
14
- # aasm_event :view do
15
- # transitions :to => :read, :from => [:unread]
16
- # end
17
- #
18
- # aasm_event :close do
19
- # transitions :to => :closed, :from => [:read, :unread]
20
- # end
21
- # end
22
-
23
- class Conversation
24
- extend SimpleStateMachine
25
-
26
- def initialize
27
- self.state = 'unread'
28
- end
29
-
30
- event :view, :unread => :read
31
- event :close, :all => :closed
32
-
33
- end
data/examples/lamp.rb DELETED
@@ -1,21 +0,0 @@
1
- class Lamp
2
-
3
- extend SimpleStateMachine
4
-
5
- def initialize
6
- self.state = 'off'
7
- end
8
-
9
- def push_button1
10
- puts "click1: #{state}"
11
- end
12
- event :push_button1, :off => :on,
13
- :on => :off
14
-
15
- def push_button2
16
- puts "click2: #{state}"
17
- end
18
- event :push_button2, :off => :on,
19
- :on => :off
20
-
21
- end
@@ -1,87 +0,0 @@
1
- # Implementation of the AASM Conversation
2
- #
3
- # class Relationship
4
- # include AASM
5
- #
6
- # aasm_column :status
7
- #
8
- # aasm_initial_state Proc.new { |relationship| relationship.strictly_for_fun? ? :intimate : :dating }
9
- #
10
- # aasm_state :dating, :enter => :make_happy, :exit => :make_depressed
11
- # aasm_state :intimate, :enter => :make_very_happy, :exit => :never_speak_again
12
- # aasm_state :married, :enter => :give_up_intimacy, :exit => :buy_exotic_car_and_wear_a_combover
13
- #
14
- # aasm_event :get_intimate do
15
- # transitions :to => :intimate, :from => [:dating], :guard => :drunk?
16
- # end
17
- #
18
- # aasm_event :get_married do
19
- # transitions :to => :married, :from => [:dating, :intimate], :guard => :willing_to_give_up_manhood?
20
- # end
21
- #
22
- # def strictly_for_fun?; end
23
- # def drunk?; end
24
- # def willing_to_give_up_manhood?; end
25
- # def make_happy; end
26
- # def make_depressed; end
27
- # def make_very_happy; end
28
- # def never_speak_again; end
29
- # def give_up_intimacy; end
30
- # def buy_exotic_car_and_wear_a_combover; end
31
- # end
32
-
33
- class Relationship
34
- extend SimpleStateMachine
35
-
36
- def initialize
37
- self.state = relationship.strictly_for_fun? ? get_intimate : start_dating
38
- end
39
-
40
- def start_dating
41
- make_happy
42
- # make_depressed not called on exit
43
- end
44
- event :start_dating, nil => :dating
45
-
46
- def get_intimate
47
- # exit if drunk?
48
- make_very_happy
49
- # never_speak_again not called on exit
50
- end
51
- event :get_intimate, :dating => :intimate
52
-
53
- def get_married
54
- give_up_intimacy
55
- #exit unless willing_to_give_up_manhood?
56
- # buy_exotic_car_and_wear_a_combover not called on exit
57
- end
58
- event :get_married, :dating => :married,
59
- :intimate => :married
60
-
61
- # extra event added
62
- def stop_dating
63
- make_depressed
64
- end
65
- event :stop_dating, :dating => nil
66
-
67
- def dump
68
- never_speak_again
69
- end
70
- event :dump, :intimate => :dump
71
-
72
- def divorce
73
- buy_exotic_car_and_wear_a_combover
74
- end
75
- event :divorce, :married => :divorced
76
-
77
-
78
- def strictly_for_fun?; end
79
- def drunk?; end
80
- def willing_to_give_up_manhood?; end
81
- def make_happy; end
82
- def make_depressed; end
83
- def make_very_happy; end
84
- def never_speak_again; end
85
- def give_up_intimacy; end
86
- def buy_exotic_car_and_wear_a_combover; end
87
- end
@@ -1,17 +0,0 @@
1
- class TrafficLight
2
-
3
- extend SimpleStateMachine
4
-
5
- def initialize
6
- self.state = 'green'
7
- end
8
-
9
- # state machine events
10
- def change_state
11
- puts "#{state} => #{@next_state}"
12
- end
13
-
14
- event :change_state, :green => :orange,
15
- :orange => :red,
16
- :red => :green
17
- end
data/examples/user.rb DELETED
@@ -1,37 +0,0 @@
1
- require 'digest/sha1'
2
- class User < ActiveRecord::Base
3
-
4
- validates_presence_of :name
5
-
6
- extend SimpleStateMachine::ActiveRecord
7
-
8
- def after_initialize
9
- self.state ||= 'new'
10
- end
11
-
12
- def invite
13
- self.activation_code = Digest::SHA1.hexdigest("salt #{Time.now.to_f}")
14
- send_activation_email(self.activation_code)
15
- end
16
- event :invite, :new => :invited
17
-
18
- def confirm_invitation activation_code
19
- if self.activation_code != activation_code
20
- errors.add 'activation_code', 'is invalid'
21
- end
22
- end
23
- event :confirm_invitation, :invited => :active
24
-
25
- #event :log_send_activation_code_failed, :new => :send_activation_code_failed
26
- #
27
- # def reset_password(new_password)
28
- # self.password = new_password
29
- # end
30
- # # do not change state, but ensure that we are in proper state
31
- # event :reset_password, :active => :active
32
-
33
- def send_activation_email(code)
34
- true
35
- end
36
-
37
- end
@@ -1,13 +0,0 @@
1
- namespace :ssm do
2
- namespace :graph do
3
- desc 'Generate a url for a google chart for [class]'
4
- task :url => :environment do
5
- puts ENV['class'].constantize.state_machine_definition.google_chart_url
6
- end
7
-
8
- desc 'Opens the google chart in the browser for [class]'
9
- task :open => :environment do
10
- `open '#{::CGI.unescape(ENV['class'].constantize.state_machine_definition.google_chart_url)}'`
11
- end
12
- end
13
- end
data/rails/graphiz.rake DELETED
@@ -1,16 +0,0 @@
1
- namespace :ssm do
2
-
3
- namespace :graph do
4
-
5
- desc 'url'
6
- task 'url' do |t|
7
- end
8
-
9
- desc 'image'
10
- task 'image' do |t|
11
- end
12
-
13
- end
14
-
15
- end
16
-
@@ -1,31 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "simple_state_machine/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = %q{simple_state_machine}
7
- s.version = SimpleStateMachine::VERSION
8
- s.platform = Gem::Platform::RUBY
9
-
10
- s.authors = ["Marek de Heus", "Petrik de Heus"]
11
- s.description = %q{Simple State Machine is a state machine that focuses on events instead of states}
12
- s.email = ["FIX@example.com"]
13
- s.homepage = %q{http://github.com/mdh/ssm}
14
- s.extra_rdoc_files = [
15
- "LICENSE",
16
- "README.rdoc"
17
- ]
18
- s.files = `git ls-files`.split("\n")
19
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
- s.rdoc_options = ["--charset=UTF-8"]
21
- s.require_paths = ["lib"]
22
- s.rubygems_version = %q{1.3.7}
23
- s.summary = %q{A simple DSL to decorate existing methods with logic that guards state transitions.}
24
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
- s.add_development_dependency "rake"
26
- s.add_development_dependency "ZenTest"
27
- s.add_development_dependency "rspec"
28
- s.add_development_dependency "activerecord", "~>2.3.5"
29
- s.add_development_dependency "sqlite3-ruby"
30
- end
31
-