ministry_of_state 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/README.rdoc +2 -2
- data/gemfiles/Gemfile.rails-3.2.x +10 -0
- data/gemfiles/Gemfile.rails-4.0.x +6 -0
- data/gemfiles/Gemfile.rails-4.1.x +6 -0
- data/lib/ministry_of_state/ministry_of_state.rb +12 -2
- data/lib/ministry_of_state/version.rb +1 -1
- data/test/blog.rb +5 -0
- data/test/helper.rb +3 -1
- data/test/test_ministry_of_state.rb +51 -0
- metadata +24 -22
- data/VERSION +0 -1
- data/gemfiles/Gemfile.rails-3.2.13 +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9987f8af486f7e33c06b18925622f9b6a696e34f
|
|
4
|
+
data.tar.gz: d3c34e4a6898e962e772baec3a4fb9e5a4c53bfd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 165f45dcbbab28525c54d9d7f2a0e533e3dbd7a574a77ab4dde02c9370d1c5a1d88008a76f47dac1fef62a8995c70b4127656a816e36e74532dc75041672050f
|
|
7
|
+
data.tar.gz: 658b915271b7242f849767205eadf63ef108c46478061165b4be87a2f18608a70baa802254830f9f937f961b6e21272efaddf3b14715b3e439a2addc71250193
|
data/.travis.yml
CHANGED
|
@@ -2,10 +2,13 @@ language: ruby
|
|
|
2
2
|
rvm:
|
|
3
3
|
- 1.9.3
|
|
4
4
|
- 2.0.0
|
|
5
|
+
- 2.1.5
|
|
5
6
|
|
|
6
7
|
gemfile:
|
|
7
8
|
- Gemfile
|
|
8
|
-
- gemfiles/Gemfile.rails-3.2.
|
|
9
|
+
- gemfiles/Gemfile.rails-3.2.x
|
|
10
|
+
- gemfiles/Gemfile.rails-4.0.x
|
|
11
|
+
- gemfiles/Gemfile.rails-4.1.x
|
|
9
12
|
|
|
10
13
|
script:
|
|
11
14
|
- bundle exec rake test
|
data/README.rdoc
CHANGED
|
@@ -8,8 +8,8 @@ Because State machines are simple, they do not have to be greater than 2000 line
|
|
|
8
8
|
= Features
|
|
9
9
|
* Supports rails4 now. No changes required.
|
|
10
10
|
* Events are wrapped in a transaction and record is locked before going for a state change.
|
|
11
|
-
* Ignores dirty attributes
|
|
12
|
-
* Events and states can be
|
|
11
|
+
* Ignores dirty attributes while going for state change. This means unlike AASM you can't use an event transition as shorthand of `save`.
|
|
12
|
+
* Events and states can be inherited across classes.
|
|
13
13
|
* Simple 136 lines of code, covered with close to > 98% test coverage.
|
|
14
14
|
|
|
15
15
|
= Using it
|
|
@@ -37,7 +37,7 @@ module MinistryOfState
|
|
|
37
37
|
self.states = HashWithIndifferentAccess.new
|
|
38
38
|
self.events = HashWithIndifferentAccess.new
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
after_initialize :set_initial_states_for_new_record
|
|
41
41
|
after_create :run_initial_state_actions
|
|
42
42
|
end
|
|
43
43
|
end
|
|
@@ -83,6 +83,10 @@ module MinistryOfState
|
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def transitions(opts = {})
|
|
86
|
+
if opts[:from] == :any
|
|
87
|
+
opts[:from] = self.states.keys
|
|
88
|
+
end
|
|
89
|
+
|
|
86
90
|
if opts[:from].blank? || opts[:to].blank?
|
|
87
91
|
raise TransitionNotAllowed.new("You need to specify from and to states")
|
|
88
92
|
end
|
|
@@ -108,6 +112,11 @@ module MinistryOfState
|
|
|
108
112
|
end
|
|
109
113
|
end
|
|
110
114
|
|
|
115
|
+
|
|
116
|
+
def set_initial_states_for_new_record
|
|
117
|
+
set_initial_states if new_record?
|
|
118
|
+
end
|
|
119
|
+
|
|
111
120
|
def run_initial_state_actions
|
|
112
121
|
states.each do |name, state|
|
|
113
122
|
next unless state.initial?
|
|
@@ -129,7 +138,8 @@ module MinistryOfState
|
|
|
129
138
|
|
|
130
139
|
def check_state(state)
|
|
131
140
|
column = states[state].column
|
|
132
|
-
|
|
141
|
+
method = new_record? ? column : "#{column}_was"
|
|
142
|
+
send(method) == state.to_s
|
|
133
143
|
end
|
|
134
144
|
|
|
135
145
|
def fire(event)
|
data/test/blog.rb
CHANGED
|
@@ -8,10 +8,15 @@ class Blog < ActiveRecord::Base
|
|
|
8
8
|
add_initial_state 'pending'
|
|
9
9
|
|
|
10
10
|
add_state :approved, :enter => :test_method
|
|
11
|
+
add_state :cancelled
|
|
11
12
|
|
|
12
13
|
add_event :approve do
|
|
13
14
|
transitions :from => 'pending', :to => 'approved'
|
|
14
15
|
end
|
|
16
|
+
|
|
17
|
+
add_event(:cancel) do
|
|
18
|
+
transitions from: :any, to: 'cancelled'
|
|
19
|
+
end
|
|
15
20
|
end
|
|
16
21
|
|
|
17
22
|
def test_method
|
data/test/helper.rb
CHANGED
|
@@ -7,7 +7,9 @@ rescue Bundler::BundlerError => e
|
|
|
7
7
|
$stderr.puts "Run `bundle install` to install missing gems"
|
|
8
8
|
exit e.status_code
|
|
9
9
|
end
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
require 'minitest/autorun'
|
|
12
|
+
require 'minitest/unit'
|
|
11
13
|
require 'shoulda'
|
|
12
14
|
|
|
13
15
|
# TODO: Fix this one when shoulda-context patches MiniTest::Unit::TestCase
|
|
@@ -147,6 +147,26 @@ class TestMinistryOfState < ActiveSupport::TestCase
|
|
|
147
147
|
end
|
|
148
148
|
end
|
|
149
149
|
|
|
150
|
+
context "can specify from transition as any" do
|
|
151
|
+
should "cancel a pending blog" do
|
|
152
|
+
@pending_blog = Blog.create(status: 'pending', text: "some text")
|
|
153
|
+
assert @pending_blog.cancel!
|
|
154
|
+
assert @pending_blog.errors.blank?
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
should "cancel a approved blog" do
|
|
158
|
+
@approved_blog = Blog.create(status: 'approved', text: "some text")
|
|
159
|
+
assert @approved_blog.cancel!
|
|
160
|
+
assert @approved_blog.errors.blank?
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
should "cancel an already cancelled blog" do
|
|
164
|
+
@cancelled_blog = Blog.create(status: 'cancelled', text: "some text")
|
|
165
|
+
assert @cancelled_blog.cancel!
|
|
166
|
+
assert @cancelled_blog.errors.blank?
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
150
170
|
context "calling enter and exit callbacks for normal events" do
|
|
151
171
|
setup do
|
|
152
172
|
@post = Post.create(:title => "Hello", :content => "Good world")
|
|
@@ -227,4 +247,35 @@ class TestMinistryOfState < ActiveSupport::TestCase
|
|
|
227
247
|
assert @cargo.paid?
|
|
228
248
|
end
|
|
229
249
|
end
|
|
250
|
+
|
|
251
|
+
context 'status helpers without persisting objects' do
|
|
252
|
+
should 'be able to read value from mos column' do
|
|
253
|
+
@cargo = Cargo.new
|
|
254
|
+
assert @cargo.unpaid?
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
should 'be able to read updated value from mos column' do
|
|
258
|
+
@cargo = Cargo.new
|
|
259
|
+
@cargo.payment = 'paid'
|
|
260
|
+
assert @cargo.paid?
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
should 'be able to persist with a different state' do
|
|
264
|
+
@cargo = Cargo.create(payment: 'paid')
|
|
265
|
+
assert @cargo.reload.paid?
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
context 'fetching records from database' do
|
|
270
|
+
setup do
|
|
271
|
+
@cargo = Cargo.create(payment: 'paid')
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
should 'not fire set initial state callback' do
|
|
275
|
+
Cargo.any_instance.expects(:set_initial_state).times(0)
|
|
276
|
+
|
|
277
|
+
fetch_cargo_from_db = Cargo.find(@cargo.id)
|
|
278
|
+
assert fetch_cargo_from_db.paid?
|
|
279
|
+
end
|
|
280
|
+
end
|
|
230
281
|
end
|
metadata
CHANGED
|
@@ -1,97 +1,97 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ministry_of_state
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hemant Kumar
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2014-11-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: 3.2.13
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 3.2.13
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '1.3'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '1.3'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rake
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: sqlite3
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - ~>
|
|
59
|
+
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: 1.3.7
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - ~>
|
|
66
|
+
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: 1.3.7
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: shoulda
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - ~>
|
|
73
|
+
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: 3.5.0
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - ~>
|
|
80
|
+
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: 3.5.0
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: mocha
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - ~>
|
|
87
|
+
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
89
|
version: 0.14.0
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - ~>
|
|
94
|
+
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: 0.14.0
|
|
97
97
|
description: A ActiveRecord plugin for working with state machines
|
|
@@ -103,15 +103,16 @@ extra_rdoc_files:
|
|
|
103
103
|
- LICENSE.txt
|
|
104
104
|
- README.rdoc
|
|
105
105
|
files:
|
|
106
|
-
- .document
|
|
107
|
-
- .gitignore
|
|
108
|
-
- .travis.yml
|
|
106
|
+
- ".document"
|
|
107
|
+
- ".gitignore"
|
|
108
|
+
- ".travis.yml"
|
|
109
109
|
- Gemfile
|
|
110
110
|
- LICENSE.txt
|
|
111
111
|
- README.rdoc
|
|
112
112
|
- Rakefile
|
|
113
|
-
-
|
|
114
|
-
- gemfiles/Gemfile.rails-
|
|
113
|
+
- gemfiles/Gemfile.rails-3.2.x
|
|
114
|
+
- gemfiles/Gemfile.rails-4.0.x
|
|
115
|
+
- gemfiles/Gemfile.rails-4.1.x
|
|
115
116
|
- lib/ministry_of_state.rb
|
|
116
117
|
- lib/ministry_of_state/ministry_of_state.rb
|
|
117
118
|
- lib/ministry_of_state/railtie.rb
|
|
@@ -135,17 +136,17 @@ require_paths:
|
|
|
135
136
|
- lib
|
|
136
137
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
138
|
requirements:
|
|
138
|
-
- -
|
|
139
|
+
- - ">="
|
|
139
140
|
- !ruby/object:Gem::Version
|
|
140
141
|
version: '0'
|
|
141
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
143
|
requirements:
|
|
143
|
-
- -
|
|
144
|
+
- - ">="
|
|
144
145
|
- !ruby/object:Gem::Version
|
|
145
146
|
version: '0'
|
|
146
147
|
requirements: []
|
|
147
148
|
rubyforge_project:
|
|
148
|
-
rubygems_version: 2.
|
|
149
|
+
rubygems_version: 2.2.2
|
|
149
150
|
signing_key:
|
|
150
151
|
specification_version: 4
|
|
151
152
|
summary: Handling state machines
|
|
@@ -158,3 +159,4 @@ test_files:
|
|
|
158
159
|
- test/student.rb
|
|
159
160
|
- test/test_ministry_of_state.rb
|
|
160
161
|
- test/user.rb
|
|
162
|
+
has_rdoc: true
|
data/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.0.1
|