aasm 2.0.2 → 2.0.4
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/Rakefile +2 -2
- data/lib/aasm.rb +32 -18
- data/lib/event.rb +11 -0
- data/lib/persistence/active_record_persistence.rb +9 -1
- data/lib/state_machine.rb +6 -0
- data/lib/version.rb +0 -5
- metadata +2 -2
data/Rakefile
CHANGED
@@ -14,7 +14,7 @@ rescue Exception
|
|
14
14
|
nil
|
15
15
|
end
|
16
16
|
|
17
|
-
if `ruby -Ilib -
|
17
|
+
if `ruby -Ilib -raasm -e "print AASM.Version"` =~ /([0-9.]+)$/
|
18
18
|
CURRENT_VERSION = $1
|
19
19
|
else
|
20
20
|
CURRENT_VERSION = '0.0.0'
|
@@ -71,7 +71,7 @@ else
|
|
71
71
|
Spec::Rake::SpecTask.new('cruise') do |t|
|
72
72
|
t.spec_files = FileList['spec/**/*.rb']
|
73
73
|
t.rcov = true
|
74
|
-
t.rcov_opts = ['--exclude', 'spec', '--exclude', 'Library']
|
74
|
+
t.rcov_opts = ['--exclude', 'spec', '--exclude', 'Library', '--exclude', 'rcov.rb']
|
75
75
|
end
|
76
76
|
|
77
77
|
desc "Run all examples"
|
data/lib/aasm.rb
CHANGED
@@ -4,7 +4,14 @@ require File.join(File.dirname(__FILE__), 'state_machine')
|
|
4
4
|
require File.join(File.dirname(__FILE__), 'persistence')
|
5
5
|
|
6
6
|
module AASM
|
7
|
-
|
7
|
+
def self.Version
|
8
|
+
'2.0.4'
|
9
|
+
end
|
10
|
+
|
11
|
+
class InvalidTransition < RuntimeError
|
12
|
+
end
|
13
|
+
|
14
|
+
class UndefinedState < RuntimeError
|
8
15
|
end
|
9
16
|
|
10
17
|
def self.included(base) #:nodoc:
|
@@ -14,15 +21,14 @@ module AASM
|
|
14
21
|
base.extend AASM::ClassMethods
|
15
22
|
AASM::Persistence.set_persistence(base)
|
16
23
|
AASM::StateMachine[base] = AASM::StateMachine.new('')
|
17
|
-
|
18
|
-
base.class_eval do
|
19
|
-
def base.inherited(klass)
|
20
|
-
AASM::StateMachine[klass] = AASM::StateMachine[self].dup
|
21
|
-
end
|
22
|
-
end
|
23
24
|
end
|
24
25
|
|
25
26
|
module ClassMethods
|
27
|
+
def inherited(klass)
|
28
|
+
AASM::StateMachine[klass] = AASM::StateMachine[self].clone
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
26
32
|
def aasm_initial_state(set_state=nil)
|
27
33
|
if set_state
|
28
34
|
AASM::StateMachine[self].initial_state = set_state
|
@@ -96,11 +102,14 @@ module AASM
|
|
96
102
|
end
|
97
103
|
|
98
104
|
private
|
99
|
-
def
|
105
|
+
def set_aasm_current_state_with_persistence(state)
|
106
|
+
save_success = true
|
100
107
|
if self.respond_to?(:aasm_write_state) || self.private_methods.include?('aasm_write_state')
|
101
|
-
aasm_write_state(state)
|
108
|
+
save_success = aasm_write_state(state)
|
102
109
|
end
|
103
|
-
self.aasm_current_state = state
|
110
|
+
self.aasm_current_state = state if save_success
|
111
|
+
|
112
|
+
save_success
|
104
113
|
end
|
105
114
|
|
106
115
|
def aasm_current_state=(state)
|
@@ -111,7 +120,9 @@ module AASM
|
|
111
120
|
end
|
112
121
|
|
113
122
|
def aasm_state_object_for_state(name)
|
114
|
-
self.class.aasm_states.find {|s| s == name}
|
123
|
+
obj = self.class.aasm_states.find {|s| s == name}
|
124
|
+
raise AASM::UndefinedState, "State :#{name} doesn't exist" if obj.nil?
|
125
|
+
obj
|
115
126
|
end
|
116
127
|
|
117
128
|
def aasm_fire_event(name, persist, *args)
|
@@ -122,18 +133,21 @@ module AASM
|
|
122
133
|
unless new_state.nil?
|
123
134
|
aasm_state_object_for_state(new_state).call_action(:enter, self)
|
124
135
|
|
125
|
-
|
126
|
-
self.aasm_event_fired(self.aasm_current_state, new_state)
|
127
|
-
end
|
128
|
-
|
136
|
+
persist_successful = true
|
129
137
|
if persist
|
130
|
-
|
131
|
-
self.
|
138
|
+
persist_successful = set_aasm_current_state_with_persistence(new_state)
|
139
|
+
self.class.aasm_events[name].execute_success_callback(self) if persist_successful
|
132
140
|
else
|
133
141
|
self.aasm_current_state = new_state
|
134
142
|
end
|
135
143
|
|
136
|
-
|
144
|
+
if persist_successful
|
145
|
+
self.aasm_event_fired(self.aasm_current_state, new_state) if self.respond_to?(:aasm_event_fired)
|
146
|
+
else
|
147
|
+
self.aasm_event_failed(name) if self.respond_to?(:aasm_event_failed)
|
148
|
+
end
|
149
|
+
|
150
|
+
persist_successful
|
137
151
|
else
|
138
152
|
if self.respond_to?(:aasm_event_failed)
|
139
153
|
self.aasm_event_failed(name)
|
data/lib/event.rb
CHANGED
@@ -32,6 +32,17 @@ module AASM
|
|
32
32
|
@transitions.any? { |t| t.from == state }
|
33
33
|
end
|
34
34
|
|
35
|
+
def execute_success_callback(obj)
|
36
|
+
case success
|
37
|
+
when String, Symbol:
|
38
|
+
obj.send(success)
|
39
|
+
when Array:
|
40
|
+
success.each { |meth| obj.send(meth) }
|
41
|
+
when Proc:
|
42
|
+
success.call(obj)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
35
46
|
private
|
36
47
|
def transitions(trans_opts)
|
37
48
|
Array(trans_opts[:from]).each do |s|
|
@@ -188,7 +188,15 @@ module AASM
|
|
188
188
|
#
|
189
189
|
# NOTE: intended to be called from an event
|
190
190
|
def aasm_write_state(state)
|
191
|
-
|
191
|
+
old_value = read_attribute(self.class.aasm_column)
|
192
|
+
write_attribute(self.class.aasm_column, state.to_s)
|
193
|
+
|
194
|
+
unless self.save
|
195
|
+
write_attribute(self.class.aasm_column, old_value)
|
196
|
+
return false
|
197
|
+
end
|
198
|
+
|
199
|
+
true
|
192
200
|
end
|
193
201
|
end
|
194
202
|
|
data/lib/state_machine.rb
CHANGED
@@ -22,6 +22,12 @@ module AASM
|
|
22
22
|
@config = OpenStruct.new
|
23
23
|
end
|
24
24
|
|
25
|
+
def clone
|
26
|
+
klone = super
|
27
|
+
klone.states = states.clone
|
28
|
+
klone
|
29
|
+
end
|
30
|
+
|
25
31
|
def create_state(name, options)
|
26
32
|
@states << AASM::SupportingClasses::State.new(name, options) unless @states.include?(name)
|
27
33
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aasm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Barron
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-12-22 03:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|