state_shifter 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +16 -0
- data/VERSION +1 -1
- data/examples/malformed_persistence.rb +97 -0
- data/lib/state_shifter/definition/class_methods.rb +8 -2
- data/lib/state_shifter/definition/contents.rb +6 -8
- data/lib/state_shifter/definition/instance_methods.rb +17 -14
- data/lib/state_shifter.rb +1 -3
- data/spec/spec_helper.rb +5 -1
- data/spec/state_shifter_spec.rb +12 -15
- data/state_shifter.gemspec +6 -6
- metadata +20 -7
- data/examples/mounted.rb +0 -8
- data/lib/state_shifter/mountable/class_methods.rb +0 -13
- data/lib/state_shifter/mountable/instance_methods.rb +0 -20
- data/lib/state_shifter/mountable.rb +0 -10
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,22 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
activemodel (3.2.8)
|
5
|
+
activesupport (= 3.2.8)
|
6
|
+
builder (~> 3.0.0)
|
7
|
+
activerecord (3.2.8)
|
8
|
+
activemodel (= 3.2.8)
|
9
|
+
activesupport (= 3.2.8)
|
10
|
+
arel (~> 3.0.2)
|
11
|
+
tzinfo (~> 0.3.29)
|
12
|
+
activesupport (3.2.8)
|
13
|
+
i18n (~> 0.6)
|
14
|
+
multi_json (~> 1.0)
|
15
|
+
arel (3.0.2)
|
16
|
+
builder (3.0.0)
|
4
17
|
diff-lcs (1.1.3)
|
5
18
|
git (1.2.5)
|
19
|
+
i18n (0.6.0)
|
6
20
|
jeweler (1.8.4)
|
7
21
|
bundler (~> 1.0)
|
8
22
|
git (>= 1.2.5)
|
@@ -26,12 +40,14 @@ GEM
|
|
26
40
|
multi_json (~> 1.0)
|
27
41
|
simplecov-html (~> 0.5.3)
|
28
42
|
simplecov-html (0.5.3)
|
43
|
+
tzinfo (0.3.33)
|
29
44
|
yard (0.8.2.1)
|
30
45
|
|
31
46
|
PLATFORMS
|
32
47
|
ruby
|
33
48
|
|
34
49
|
DEPENDENCIES
|
50
|
+
activerecord (~> 3.2.x)
|
35
51
|
bundler (~> 1.1.0)
|
36
52
|
jeweler (~> 1.8.4)
|
37
53
|
rdoc (~> 3.12)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.2
|
@@ -0,0 +1,97 @@
|
|
1
|
+
class Advanced
|
2
|
+
include StateShifter::Definition
|
3
|
+
|
4
|
+
###
|
5
|
+
|
6
|
+
state_machine do
|
7
|
+
|
8
|
+
state :initialized do
|
9
|
+
|
10
|
+
event :start_date_changed, :call => :handle_start_date_changed
|
11
|
+
event :forced_start => :running
|
12
|
+
event :start_date_reached => :running, :if => :start_date_reached?
|
13
|
+
event :abort_initialized_contest => :finalized
|
14
|
+
end
|
15
|
+
|
16
|
+
state :running do
|
17
|
+
|
18
|
+
on_entry do |previous_state, trigger_event|
|
19
|
+
running_entry previous_state, trigger_event
|
20
|
+
end
|
21
|
+
|
22
|
+
event :abort_running_contest => :notify_stakeholders
|
23
|
+
event :changed_properties
|
24
|
+
event :keep_users_engaged
|
25
|
+
event :deadline_reached => :notify_organizers, :if => :entries_deadline_reached?
|
26
|
+
event :spots_filled => :notify_organizers, :if => :spots_filled?
|
27
|
+
event :deadline_reached_without_approvals => :notify_pending_users, :if => :entries_deadline_reached_without_approvals?
|
28
|
+
event :deadline_reached_without_entries => :finalized, :if => :entries_deadline_reached_without_entries?
|
29
|
+
end
|
30
|
+
|
31
|
+
state :notify_organizers do
|
32
|
+
on_entry :send_notification_to_organizers
|
33
|
+
event :organizers_notified => :awaiting_organizer_reply
|
34
|
+
end
|
35
|
+
|
36
|
+
state :awaiting_organizer_reply do
|
37
|
+
event :organizer_confirmation_missing => :notify_stakeholders, :if => :organizer_confirmation_deadline_reached?
|
38
|
+
event :keep_organizers_engaged
|
39
|
+
event :organizer_confirmation_received => :notify_approved_users
|
40
|
+
event :organizer_has_more_tickets => :running
|
41
|
+
end
|
42
|
+
|
43
|
+
state :notify_stakeholders do
|
44
|
+
on_entry :send_notification_to_stakeholders
|
45
|
+
event :stakeholders_notified => :cancelled
|
46
|
+
end
|
47
|
+
|
48
|
+
state :cancelled
|
49
|
+
|
50
|
+
state :notify_pending_users do
|
51
|
+
on_entry :send_notification_to_pending_users
|
52
|
+
event :pending_users_notified => :finalized
|
53
|
+
end
|
54
|
+
|
55
|
+
state :notify_approved_users do
|
56
|
+
on_entry :send_notification_to_approved_users
|
57
|
+
event :approved_users_notified => :send_list_to_organizers
|
58
|
+
end
|
59
|
+
|
60
|
+
state :send_list_to_organizers do
|
61
|
+
on_entry :send_guestlist_to_organizers
|
62
|
+
event :list_sent_to_organizers => :awaiting_attendance
|
63
|
+
end
|
64
|
+
|
65
|
+
state :awaiting_attendance do
|
66
|
+
event :remind_to_fill_in_report => :create_report_filling_requests
|
67
|
+
end
|
68
|
+
|
69
|
+
state :create_report_filling_requests do
|
70
|
+
on_entry :send_report_filling_requests
|
71
|
+
event :finalize => :finalized
|
72
|
+
end
|
73
|
+
|
74
|
+
state :finalized
|
75
|
+
|
76
|
+
on_transition do |from,to,trigger_event, duration|
|
77
|
+
benchmark from, to, trigger_event, duration
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
persist_attribute :lollies
|
82
|
+
|
83
|
+
###
|
84
|
+
|
85
|
+
def entries_deadline_reached?
|
86
|
+
true
|
87
|
+
end
|
88
|
+
|
89
|
+
def running_entry previous_state, trigger_event
|
90
|
+
#
|
91
|
+
end
|
92
|
+
|
93
|
+
def benchmark from, to, trigger_event, duration
|
94
|
+
#
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -2,9 +2,15 @@ module StateShifter
|
|
2
2
|
module Definition
|
3
3
|
module ClassMethods
|
4
4
|
|
5
|
-
attr_accessor :state_machine_definition
|
5
|
+
attr_accessor :state_machine_definition, :persist_attr_name
|
6
|
+
|
7
|
+
def persist_attribute attr_name
|
8
|
+
raise ::StateShifter::PersistenceAttributeAlreadyDefined if @persist_attr_name
|
9
|
+
@persist_attr_name = attr_name.to_sym
|
10
|
+
end
|
6
11
|
|
7
12
|
def state_machine &definition
|
13
|
+
@persist_attr_name ||= :current_state
|
8
14
|
@state_machine_definition = Contents.new(&definition)
|
9
15
|
|
10
16
|
@state_machine_definition.states.each do |state_name, state_definition|
|
@@ -18,7 +24,7 @@ module StateShifter
|
|
18
24
|
|
19
25
|
state_machine_definition.get(:state, from_state).events.each do |event_name, event_def|
|
20
26
|
if event_def.has_guards? && check_guards
|
21
|
-
next if
|
27
|
+
next if self.send(:check_guards, event_name).is_a?(Array)
|
22
28
|
end
|
23
29
|
|
24
30
|
next_states_hash.merge!( event_def.to.nil? ? { from_state.to_sym => event_name } : { event_def.to => event_def.name } )
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module StateShifter
|
2
|
-
|
3
2
|
module Definition
|
4
|
-
|
5
3
|
class Contents
|
6
4
|
|
7
5
|
attr_accessor :states, :initial_state, :events, :on_transition_proc
|
@@ -61,6 +59,12 @@ module StateShifter
|
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
62
|
+
def on_transition &proc_contents
|
63
|
+
@on_transition_proc = proc_contents
|
64
|
+
end
|
65
|
+
|
66
|
+
### end of DSL methods
|
67
|
+
|
64
68
|
def get key, what
|
65
69
|
case key
|
66
70
|
when :event
|
@@ -70,16 +74,10 @@ module StateShifter
|
|
70
74
|
end
|
71
75
|
end
|
72
76
|
|
73
|
-
def on_transition &proc_contents
|
74
|
-
@on_transition_proc = proc_contents
|
75
|
-
end
|
76
|
-
|
77
77
|
def has_on_transition_proc?
|
78
78
|
!@on_transition_proc.nil?
|
79
79
|
end
|
80
80
|
|
81
81
|
end
|
82
|
-
|
83
82
|
end
|
84
|
-
|
85
83
|
end
|
@@ -1,14 +1,17 @@
|
|
1
1
|
module StateShifter
|
2
|
-
|
3
2
|
module Definition
|
4
|
-
|
5
3
|
module InstanceMethods
|
6
4
|
|
7
|
-
|
5
|
+
def current_state
|
6
|
+
@current_state ||= get_current_state
|
7
|
+
end
|
8
8
|
|
9
|
-
def
|
10
|
-
@current_state
|
11
|
-
|
9
|
+
def get_current_state
|
10
|
+
instance_variable_defined?(:@current_state) ? @current_state : state_machine_definition.initial_state.name.to_sym
|
11
|
+
end
|
12
|
+
|
13
|
+
def set_current_state value
|
14
|
+
@current_state = value
|
12
15
|
end
|
13
16
|
|
14
17
|
def state_machine_definition
|
@@ -42,14 +45,14 @@ module StateShifter
|
|
42
45
|
def check_event_callbacks event_name
|
43
46
|
event_def = state_machine_definition.get(:event, event_name)
|
44
47
|
begin
|
45
|
-
|
48
|
+
self.send event_def.callback
|
46
49
|
rescue NoMethodError
|
47
50
|
raise ::StateShifter::CallbackMethodNotDefined, event_def.callback
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
51
54
|
def current_state_def
|
52
|
-
state_machine_definition.get(:state,
|
55
|
+
state_machine_definition.get(:state, current_state)
|
53
56
|
end
|
54
57
|
|
55
58
|
def call_state_entry_callback trigger, old_state
|
@@ -57,12 +60,12 @@ module StateShifter
|
|
57
60
|
|
58
61
|
if proc_or_method_name.is_a?(Symbol)
|
59
62
|
begin
|
60
|
-
|
63
|
+
self.send proc_or_method_name
|
61
64
|
rescue NoMethodError
|
62
65
|
raise ::StateShifter::CallbackMethodNotDefined, proc_or_method_name
|
63
66
|
end
|
64
67
|
else
|
65
|
-
|
68
|
+
self.instance_exec(old_state, trigger.to_sym, &proc_or_method_name)
|
66
69
|
end
|
67
70
|
end
|
68
71
|
|
@@ -70,15 +73,16 @@ module StateShifter
|
|
70
73
|
_start = Time.now
|
71
74
|
|
72
75
|
# BOOP!
|
73
|
-
old_state =
|
74
|
-
|
76
|
+
old_state = current_state
|
77
|
+
set_current_state args[:to].to_sym
|
75
78
|
#
|
76
79
|
|
77
80
|
check_event_callbacks(args[:trigger]) if state_machine_definition.get(:event, args[:trigger]).has_callback?
|
78
81
|
|
79
82
|
call_state_entry_callback(args[:trigger], old_state) if current_state_def.has_entry_callback?
|
80
83
|
|
81
|
-
|
84
|
+
self.instance_exec(old_state, current_state, args[:trigger].to_sym, (Time.now - _start), &state_machine_definition.on_transition_proc) if state_machine_definition.has_on_transition_proc?
|
85
|
+
|
82
86
|
true
|
83
87
|
end
|
84
88
|
|
@@ -105,5 +109,4 @@ module StateShifter
|
|
105
109
|
|
106
110
|
end
|
107
111
|
end
|
108
|
-
|
109
112
|
end
|
data/lib/state_shifter.rb
CHANGED
@@ -4,9 +4,6 @@ require 'state_shifter/definition'
|
|
4
4
|
require 'state_shifter/definition/contents'
|
5
5
|
require 'state_shifter/definition/class_methods'
|
6
6
|
require 'state_shifter/definition/instance_methods'
|
7
|
-
require 'state_shifter/mountable'
|
8
|
-
require 'state_shifter/mountable/class_methods'
|
9
|
-
require 'state_shifter/mountable/instance_methods'
|
10
7
|
|
11
8
|
class ::StateShifter::TransitionHalted < Exception ; end
|
12
9
|
class ::StateShifter::GuardMethodUndefined < Exception ; end
|
@@ -14,4 +11,5 @@ class ::StateShifter::GuardNotSatisfied < Exception ; end
|
|
14
11
|
class ::StateShifter::CallbackMethodNotDefined < Exception ; end
|
15
12
|
class ::StateShifter::RedifiningEvent < Exception ; end
|
16
13
|
class ::StateShifter::RedifiningState < Exception ; end
|
14
|
+
class ::StateShifter::PersistenceAttributeAlreadyDefined < Exception ; end
|
17
15
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
3
4
|
require 'rspec'
|
5
|
+
require 'active_record'
|
6
|
+
|
4
7
|
require 'state_shifter'
|
5
|
-
require 'simplecov'
|
6
8
|
|
7
9
|
if ENV['COVERAGE']
|
10
|
+
require 'simplecov'
|
11
|
+
|
8
12
|
SimpleCov.start do
|
9
13
|
add_filter 'spec'
|
10
14
|
end
|
data/spec/state_shifter_spec.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
require_relative '../examples/simple'
|
3
3
|
require_relative '../examples/advanced'
|
4
|
-
require_relative '../examples/mounted'
|
5
4
|
|
6
5
|
shared_examples_for 'a simple state machine' do
|
7
6
|
|
@@ -101,12 +100,6 @@ describe Simple do
|
|
101
100
|
|
102
101
|
end
|
103
102
|
|
104
|
-
describe Mounted do
|
105
|
-
|
106
|
-
it_should_behave_like 'a simple state machine'
|
107
|
-
|
108
|
-
end
|
109
|
-
|
110
103
|
describe 'Malformed state machines' do
|
111
104
|
|
112
105
|
it 'should complain about redifining states' do
|
@@ -117,6 +110,18 @@ describe 'Malformed state machines' do
|
|
117
110
|
lambda { require_relative '../examples/malformed_events' }.should raise_error(StateShifter::RedifiningEvent, 'submit')
|
118
111
|
end
|
119
112
|
|
113
|
+
it 'should complain when the persistence attribute is set after the state machine definition' do
|
114
|
+
lambda { require_relative '../examples/malformed_persistence' }.should raise_error(StateShifter::PersistenceAttributeAlreadyDefined)
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
describe 'Advanced state machine functionality' do
|
120
|
+
|
121
|
+
before(:each) do
|
122
|
+
@advanced = Advanced.new
|
123
|
+
end
|
124
|
+
|
120
125
|
it 'should complain about undefined guards' do
|
121
126
|
advanced = Advanced.new
|
122
127
|
lambda { advanced.can_start_date_reached?}.should raise_error(StateShifter::GuardMethodUndefined, 'start_date_reached?')
|
@@ -129,14 +134,6 @@ describe 'Malformed state machines' do
|
|
129
134
|
lambda { advanced.deadline_reached }.should raise_error(StateShifter::CallbackMethodNotDefined, 'send_notification_to_organizers')
|
130
135
|
end
|
131
136
|
|
132
|
-
end
|
133
|
-
|
134
|
-
describe 'Advanced state machine functionality' do
|
135
|
-
|
136
|
-
before(:each) do
|
137
|
-
@advanced = Advanced.new
|
138
|
-
end
|
139
|
-
|
140
137
|
it 'should complain about looping event callbacks not being defined' do
|
141
138
|
lambda { @advanced.start_date_changed }.should raise_error(StateShifter::CallbackMethodNotDefined, 'handle_start_date_changed')
|
142
139
|
end
|
data/state_shifter.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "state_shifter"
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bruno Antunes"]
|
12
|
-
s.date = "2012-08-
|
12
|
+
s.date = "2012-08-27"
|
13
13
|
s.description = "state_shifter is a gem that adds state machine behavior to a class"
|
14
14
|
s.email = "sardaukar.siet@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,8 +27,8 @@ Gem::Specification.new do |s|
|
|
27
27
|
"VERSION",
|
28
28
|
"examples/advanced.rb",
|
29
29
|
"examples/malformed_events.rb",
|
30
|
+
"examples/malformed_persistence.rb",
|
30
31
|
"examples/malformed_states.rb",
|
31
|
-
"examples/mounted.rb",
|
32
32
|
"examples/simple.rb",
|
33
33
|
"lib/state_shifter.rb",
|
34
34
|
"lib/state_shifter/definition.rb",
|
@@ -36,9 +36,6 @@ Gem::Specification.new do |s|
|
|
36
36
|
"lib/state_shifter/definition/contents.rb",
|
37
37
|
"lib/state_shifter/definition/instance_methods.rb",
|
38
38
|
"lib/state_shifter/event.rb",
|
39
|
-
"lib/state_shifter/mountable.rb",
|
40
|
-
"lib/state_shifter/mountable/class_methods.rb",
|
41
|
-
"lib/state_shifter/mountable/instance_methods.rb",
|
42
39
|
"lib/state_shifter/state.rb",
|
43
40
|
"spec/spec_helper.rb",
|
44
41
|
"spec/state_shifter_spec.rb",
|
@@ -54,6 +51,7 @@ Gem::Specification.new do |s|
|
|
54
51
|
s.specification_version = 3
|
55
52
|
|
56
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
54
|
+
s.add_development_dependency(%q<activerecord>, ["~> 3.2.x"])
|
57
55
|
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
58
56
|
s.add_development_dependency(%q<yard>, ["~> 0.7"])
|
59
57
|
s.add_development_dependency(%q<redcarpet>, [">= 0"])
|
@@ -62,6 +60,7 @@ Gem::Specification.new do |s|
|
|
62
60
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
63
61
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
64
62
|
else
|
63
|
+
s.add_dependency(%q<activerecord>, ["~> 3.2.x"])
|
65
64
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
66
65
|
s.add_dependency(%q<yard>, ["~> 0.7"])
|
67
66
|
s.add_dependency(%q<redcarpet>, [">= 0"])
|
@@ -71,6 +70,7 @@ Gem::Specification.new do |s|
|
|
71
70
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
72
71
|
end
|
73
72
|
else
|
73
|
+
s.add_dependency(%q<activerecord>, ["~> 3.2.x"])
|
74
74
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
75
75
|
s.add_dependency(%q<yard>, ["~> 0.7"])
|
76
76
|
s.add_dependency(%q<redcarpet>, [">= 0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: state_shifter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activerecord
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.x
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.2.x
|
14
30
|
- !ruby/object:Gem::Dependency
|
15
31
|
name: rspec
|
16
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,8 +157,8 @@ files:
|
|
141
157
|
- VERSION
|
142
158
|
- examples/advanced.rb
|
143
159
|
- examples/malformed_events.rb
|
160
|
+
- examples/malformed_persistence.rb
|
144
161
|
- examples/malformed_states.rb
|
145
|
-
- examples/mounted.rb
|
146
162
|
- examples/simple.rb
|
147
163
|
- lib/state_shifter.rb
|
148
164
|
- lib/state_shifter/definition.rb
|
@@ -150,9 +166,6 @@ files:
|
|
150
166
|
- lib/state_shifter/definition/contents.rb
|
151
167
|
- lib/state_shifter/definition/instance_methods.rb
|
152
168
|
- lib/state_shifter/event.rb
|
153
|
-
- lib/state_shifter/mountable.rb
|
154
|
-
- lib/state_shifter/mountable/class_methods.rb
|
155
|
-
- lib/state_shifter/mountable/instance_methods.rb
|
156
169
|
- lib/state_shifter/state.rb
|
157
170
|
- spec/spec_helper.rb
|
158
171
|
- spec/state_shifter_spec.rb
|
@@ -172,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
185
|
version: '0'
|
173
186
|
segments:
|
174
187
|
- 0
|
175
|
-
hash: -
|
188
|
+
hash: -2788732275758639550
|
176
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
190
|
none: false
|
178
191
|
requirements:
|
data/examples/mounted.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
module StateShifter
|
2
|
-
module Mountable
|
3
|
-
module InstanceMethods
|
4
|
-
|
5
|
-
attr_accessor :state_machine_definition
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@state_machine_definition = self.class.mountable_class_name.new
|
9
|
-
@state_machine_definition.instance_variable_set(:@subject,self)
|
10
|
-
|
11
|
-
( @state_machine_definition.methods - Object.methods).sort.each do |meth|
|
12
|
-
self.class.send :define_method, meth, &@state_machine_definition.method(meth)
|
13
|
-
end
|
14
|
-
|
15
|
-
super
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|