state_manager 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
@@ -28,8 +28,10 @@ module StateManager
|
|
28
28
|
# reached so we wrap in a lamda.
|
29
29
|
scope state, lambda {
|
30
30
|
conn = ::ActiveRecord::Base.connection
|
31
|
+
table = conn.quote_table_name table_name
|
31
32
|
column = conn.quote_column_name klass._state_property
|
32
|
-
|
33
|
+
namespaced_col = "#{table}.#{column}"
|
34
|
+
query = "#{namespaced_col} = ? OR #{namespaced_col} LIKE ?"
|
33
35
|
like_term = "#{state.to_s}.%"
|
34
36
|
where(query, state, like_term)
|
35
37
|
}
|
@@ -86,15 +88,21 @@ module StateManager
|
|
86
88
|
|
87
89
|
def after_save
|
88
90
|
return unless pending_transition
|
89
|
-
|
91
|
+
transition = pending_transition
|
92
|
+
|
90
93
|
self.uncommitted_transitions ||= []
|
91
94
|
self.uncommitted_transitions << self.pending_transition
|
92
95
|
self.pending_transition = nil
|
96
|
+
|
97
|
+
_run_after_callbacks(*transition)
|
93
98
|
end
|
94
99
|
|
95
100
|
def after_commit
|
96
|
-
self.uncommitted_transitions.
|
101
|
+
transitions = self.uncommitted_transitions.dup
|
102
|
+
|
97
103
|
self.uncommitted_transitions.clear
|
104
|
+
|
105
|
+
transitions.each{ |t| run_commit_callbacks(*t) }
|
98
106
|
end
|
99
107
|
|
100
108
|
def run_commit_callbacks(from_state, to_state, current_event, enter_states, exit_states)
|
@@ -24,6 +24,7 @@ class ActiveRecordTest < Minitest::Test
|
|
24
24
|
end
|
25
25
|
state :active
|
26
26
|
state :rejected
|
27
|
+
state :mutated
|
27
28
|
|
28
29
|
attr_accessor :unsubmitted_entered_count
|
29
30
|
attr_accessor :unsubmitted_enter_committed_count
|
@@ -82,6 +83,15 @@ class ActiveRecordTest < Minitest::Test
|
|
82
83
|
end
|
83
84
|
|
84
85
|
end
|
86
|
+
|
87
|
+
class Mutated
|
88
|
+
|
89
|
+
def entered
|
90
|
+
self.title = 'mutant'
|
91
|
+
save
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
85
95
|
|
86
96
|
end
|
87
97
|
|
@@ -256,4 +266,10 @@ class ActiveRecordTest < Minitest::Test
|
|
256
266
|
assert_equal @resource.state_manager.active_entered_count, 1
|
257
267
|
assert_equal @resource.state_manager.active_enter_committed_count, 1
|
258
268
|
end
|
269
|
+
|
270
|
+
def test_save_in_entered_callback
|
271
|
+
@resource = Post.new(:state => 'mutated')
|
272
|
+
@resource.save
|
273
|
+
assert_equal 'mutant', @resource.title
|
274
|
+
end
|
259
275
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: state_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-06-
|
12
|
+
date: 2014-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|