ttilley-aasm 2.0.7.1 → 2.1.0
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.
- data/README.rdoc +25 -9
- data/Rakefile +3 -3
- data/lib/aasm.rb +28 -13
- data/lib/event.rb +23 -2
- data/lib/state.rb +2 -0
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -11,14 +11,32 @@ AASM has the following features:
|
|
11
11
|
* Events
|
12
12
|
* Transitions
|
13
13
|
|
14
|
-
==
|
14
|
+
== New Callbacks
|
15
15
|
|
16
|
-
The
|
16
|
+
The callback chain & order on a successful event looks like:
|
17
|
+
|
18
|
+
oldstate:exit*
|
19
|
+
event:before
|
20
|
+
__find transition, if possible__
|
21
|
+
transition:on_transition*
|
22
|
+
oldstate:before_exit
|
23
|
+
newstate:before_enter
|
24
|
+
newstate:enter*
|
25
|
+
__update state__
|
26
|
+
event:success*
|
27
|
+
oldstate:after_exit
|
28
|
+
oldstate:after_enter
|
29
|
+
event:after
|
30
|
+
obj:aasm_event_fired*
|
31
|
+
|
32
|
+
(*) marks old callbacks
|
17
33
|
|
18
|
-
* http://github.com/rubyist/aasm/tree/master
|
19
34
|
|
20
|
-
|
35
|
+
== Download
|
36
|
+
|
37
|
+
The latest AASM can currently be pulled from the git repository on github.
|
21
38
|
|
39
|
+
* http://github.com/ttilley/aasm/tree/master
|
22
40
|
|
23
41
|
|
24
42
|
== Installation
|
@@ -26,12 +44,12 @@ A release and a gem are forthcoming.
|
|
26
44
|
=== From GitHub hosted gems
|
27
45
|
|
28
46
|
% sudo gem sources -a http://gems.github.com # (you only need to do this once)
|
29
|
-
% sudo gem install
|
47
|
+
% sudo gem install ttilley-aasm
|
30
48
|
|
31
49
|
=== Building your own gems
|
32
50
|
|
33
51
|
% rake gem
|
34
|
-
% sudo gem install pkg/aasm-2.
|
52
|
+
% sudo gem install pkg/aasm-2.1.gem
|
35
53
|
|
36
54
|
|
37
55
|
== Simple Example
|
@@ -92,11 +110,9 @@ This example uses a few of the more complex features available.
|
|
92
110
|
= Other Stuff
|
93
111
|
|
94
112
|
Author:: Scott Barron <scott at elitists dot net>
|
95
|
-
License:: Copyright 2006, 2007, 2008 by Scott Barron.
|
113
|
+
License:: Original code Copyright 2006, 2007, 2008 by Scott Barron.
|
96
114
|
Released under an MIT-style license. See the LICENSE file
|
97
115
|
included in the distribution.
|
98
|
-
Bugs:: http://rubyist.lighthouseapp.com/projects/13207-aasm/
|
99
|
-
GitHub:: http://github.com/rubyist/aasm/tree/master
|
100
116
|
|
101
117
|
== Warranty
|
102
118
|
|
data/Rakefile
CHANGED
@@ -54,9 +54,9 @@ EOF
|
|
54
54
|
s.extra_rdoc_files = rd.rdoc_files.reject {|fn| fn =~ /\.rb$/}.to_a
|
55
55
|
s.rdoc_options = rd.options
|
56
56
|
|
57
|
-
s.
|
58
|
-
s.email = '
|
59
|
-
s.homepage = 'http://
|
57
|
+
s.authors = ['Scott Barron', 'Scott Petersen']
|
58
|
+
s.email = 'petersen@dunedain289.com'
|
59
|
+
s.homepage = 'http://github.com/dunedain289/aasm'
|
60
60
|
end
|
61
61
|
|
62
62
|
package_task = Rake::GemPackageTask.new(spec) do |pkg|
|
data/lib/aasm.rb
CHANGED
@@ -5,7 +5,7 @@ require File.join(File.dirname(__FILE__), 'persistence')
|
|
5
5
|
|
6
6
|
module AASM
|
7
7
|
def self.Version
|
8
|
-
'2.0
|
8
|
+
'2.1.0'
|
9
9
|
end
|
10
10
|
|
11
11
|
class InvalidTransition < RuntimeError
|
@@ -137,32 +137,47 @@ module AASM
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def aasm_fire_event(name, persist, *args)
|
140
|
-
aasm_state_object_for_state(aasm_current_state)
|
140
|
+
old_state = aasm_state_object_for_state(aasm_current_state)
|
141
|
+
event = self.class.aasm_events[name]
|
141
142
|
|
142
|
-
old_state
|
143
|
-
new_state = self.class.aasm_events[name].fire(self, *args)
|
143
|
+
old_state.call_action(:exit, self)
|
144
144
|
|
145
|
-
|
146
|
-
|
145
|
+
# new event before callback
|
146
|
+
event.call_action(:before, self)
|
147
147
|
|
148
|
+
new_state_name = event.fire(self, *args)
|
149
|
+
|
150
|
+
unless new_state_name.nil?
|
151
|
+
new_state = aasm_state_object_for_state(new_state_name)
|
152
|
+
|
153
|
+
# new before_ callbacks
|
154
|
+
old_state.call_action(:before_exit, self)
|
155
|
+
new_state.call_action(:before_enter, self)
|
156
|
+
|
157
|
+
new_state.call_action(:enter, self)
|
158
|
+
|
148
159
|
persist_successful = true
|
149
160
|
if persist
|
150
|
-
persist_successful = set_aasm_current_state_with_persistence(
|
151
|
-
|
161
|
+
persist_successful = set_aasm_current_state_with_persistence(new_state_name)
|
162
|
+
event.execute_success_callback(self) if persist_successful
|
152
163
|
else
|
153
|
-
self.aasm_current_state =
|
164
|
+
self.aasm_current_state = new_state_name
|
154
165
|
end
|
155
166
|
|
156
|
-
if persist_successful
|
157
|
-
|
167
|
+
if persist_successful
|
168
|
+
old_state.call_action(:after_exit, self)
|
169
|
+
new_state.call_action(:after_enter, self)
|
170
|
+
event.call_action(:after, self)
|
171
|
+
|
172
|
+
self.aasm_event_fired(name, old_state.name, self.aasm_current_state) if self.respond_to?(:aasm_event_fired)
|
158
173
|
else
|
159
|
-
self.aasm_event_failed(name, old_state) if self.respond_to?(:aasm_event_failed)
|
174
|
+
self.aasm_event_failed(name, old_state.name) if self.respond_to?(:aasm_event_failed)
|
160
175
|
end
|
161
176
|
|
162
177
|
persist_successful
|
163
178
|
else
|
164
179
|
if self.respond_to?(:aasm_event_failed)
|
165
|
-
self.aasm_event_failed(name, old_state)
|
180
|
+
self.aasm_event_failed(name, old_state.name)
|
166
181
|
end
|
167
182
|
|
168
183
|
false
|
data/lib/event.rb
CHANGED
@@ -3,12 +3,13 @@ require File.join(File.dirname(__FILE__), 'state_transition')
|
|
3
3
|
module AASM
|
4
4
|
module SupportingClasses
|
5
5
|
class Event
|
6
|
-
attr_reader :name, :success
|
7
|
-
|
6
|
+
attr_reader :name, :success, :options
|
7
|
+
|
8
8
|
def initialize(name, options = {}, &block)
|
9
9
|
@name = name
|
10
10
|
@success = options[:success]
|
11
11
|
@transitions = []
|
12
|
+
@options = options
|
12
13
|
instance_eval(&block) if block
|
13
14
|
end
|
14
15
|
|
@@ -32,6 +33,10 @@ module AASM
|
|
32
33
|
@transitions.any? { |t| t.from == state }
|
33
34
|
end
|
34
35
|
|
36
|
+
def transitions_from_state(state)
|
37
|
+
@transitions.select { |t| t.from == state }
|
38
|
+
end
|
39
|
+
|
35
40
|
def execute_success_callback(obj, success = nil)
|
36
41
|
callback = success || @success
|
37
42
|
case(callback)
|
@@ -44,6 +49,22 @@ module AASM
|
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
52
|
+
def call_action(action, record)
|
53
|
+
action = @options[action]
|
54
|
+
case action
|
55
|
+
when Symbol, String
|
56
|
+
record.send(action)
|
57
|
+
when Proc
|
58
|
+
action.call(record)
|
59
|
+
when Array
|
60
|
+
action.each { |a| record.send(a) }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def all_transitions
|
65
|
+
@transitions
|
66
|
+
end
|
67
|
+
|
47
68
|
private
|
48
69
|
def transitions(trans_opts)
|
49
70
|
Array(trans_opts[:from]).each do |s|
|
data/lib/state.rb
CHANGED