aasm 3.0.13 → 3.0.14

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.
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: 3.0.13
4
+ version: 3.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-10-24 00:00:00.000000000 Z
15
+ date: 2012-11-06 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activerecord
19
- requirement: &70225605361380 !ruby/object:Gem::Requirement
19
+ requirement: &70345873130760 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: '0'
25
25
  type: :development
26
26
  prerelease: false
27
- version_requirements: *70225605361380
27
+ version_requirements: *70345873130760
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
- requirement: &70225605360580 !ruby/object:Gem::Requirement
30
+ requirement: &70345873130340 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
- version_requirements: *70225605360580
38
+ version_requirements: *70345873130340
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: sdoc
41
- requirement: &70225605359780 !ruby/object:Gem::Requirement
41
+ requirement: &70345873129920 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :development
48
48
  prerelease: false
49
- version_requirements: *70225605359780
49
+ version_requirements: *70345873129920
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rspec
52
- requirement: &70225605358760 !ruby/object:Gem::Requirement
52
+ requirement: &70345873129420 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ~>
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '2.0'
58
58
  type: :development
59
59
  prerelease: false
60
- version_requirements: *70225605358760
60
+ version_requirements: *70345873129420
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rr
63
- requirement: &70225605358000 !ruby/object:Gem::Requirement
63
+ requirement: &70345873129000 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70225605358000
71
+ version_requirements: *70345873129000
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: shoulda
74
- requirement: &70225605357260 !ruby/object:Gem::Requirement
74
+ requirement: &70345873128540 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70225605357260
82
+ version_requirements: *70345873128540
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: sqlite3
85
- requirement: &70225605356360 !ruby/object:Gem::Requirement
85
+ requirement: &70345873128120 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *70225605356360
93
+ version_requirements: *70345873128120
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: minitest
96
- requirement: &70225605355320 !ruby/object:Gem::Requirement
96
+ requirement: &70345873127700 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,10 +101,10 @@ dependencies:
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *70225605355320
104
+ version_requirements: *70345873127700
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: ruby-debug-completion
107
- requirement: &70225605367020 !ruby/object:Gem::Requirement
107
+ requirement: &70345873143660 !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
110
110
  - - ! '>='
@@ -112,7 +112,7 @@ dependencies:
112
112
  version: '0'
113
113
  type: :development
114
114
  prerelease: false
115
- version_requirements: *70225605367020
115
+ version_requirements: *70345873143660
116
116
  description: AASM is a continuation of the acts as state machine rails plugin, built
117
117
  for plain Ruby objects.
118
118
  email: scott@elitists.net, ttilley@gmail.com, aasm@mt7.de
@@ -136,7 +136,9 @@ files:
136
136
  - lib/aasm/errors.rb
137
137
  - lib/aasm/persistence.rb
138
138
  - lib/aasm/persistence/active_record_persistence.rb
139
+ - lib/aasm/persistence/base.rb
139
140
  - lib/aasm/persistence/mongoid_persistence.rb
141
+ - lib/aasm/persistence/read_state.rb
140
142
  - lib/aasm/state_machine.rb
141
143
  - lib/aasm/supporting_classes/event.rb
142
144
  - lib/aasm/supporting_classes/localizer.rb
@@ -146,9 +148,13 @@ files:
146
148
  - spec/database.yml
147
149
  - spec/en.yml
148
150
  - spec/en_deprecated_style.yml
151
+ - spec/models/auth_machine.rb
152
+ - spec/models/callback_new_dsl.rb
153
+ - spec/models/callback_old_dsl.rb
149
154
  - spec/models/conversation.rb
150
155
  - spec/models/invalid_persistor.rb
151
156
  - spec/models/not_auto_loaded/process.rb
157
+ - spec/models/persistence.rb
152
158
  - spec/models/process_with_new_dsl.rb
153
159
  - spec/models/silencer.rb
154
160
  - spec/models/sub_classing.rb
@@ -159,14 +165,15 @@ files:
159
165
  - spec/spec_helper.rb
160
166
  - spec/spec_helpers/models_spec_helper.rb
161
167
  - spec/unit/aasm_spec.rb
162
- - spec/unit/active_record_persistence_spec.rb
163
- - spec/unit/auth_machine_spec.rb
164
- - spec/unit/before_after_callbacks_spec.rb
165
- - spec/unit/conversation_spec.rb
168
+ - spec/unit/callbacks_new_dsl_spec.rb
169
+ - spec/unit/callbacks_old_dsl_spec.rb
170
+ - spec/unit/complex_example_spec.rb
166
171
  - spec/unit/event_spec.rb
172
+ - spec/unit/inspection_spec.rb
167
173
  - spec/unit/localizer_spec.rb
168
174
  - spec/unit/memory_leak_spec.rb
169
175
  - spec/unit/new_dsl_spec.rb
176
+ - spec/unit/persistence/active_record_persistence_spec.rb
170
177
  - spec/unit/state_spec.rb
171
178
  - spec/unit/state_transition_spec.rb
172
179
  homepage: https://github.com/aasm/aasm
@@ -190,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
197
  version: '0'
191
198
  requirements: []
192
199
  rubyforge_project:
193
- rubygems_version: 1.8.11
200
+ rubygems_version: 1.8.15
194
201
  signing_key:
195
202
  specification_version: 3
196
203
  summary: State machine mixin for Ruby objects
@@ -198,9 +205,13 @@ test_files:
198
205
  - spec/database.yml
199
206
  - spec/en.yml
200
207
  - spec/en_deprecated_style.yml
208
+ - spec/models/auth_machine.rb
209
+ - spec/models/callback_new_dsl.rb
210
+ - spec/models/callback_old_dsl.rb
201
211
  - spec/models/conversation.rb
202
212
  - spec/models/invalid_persistor.rb
203
213
  - spec/models/not_auto_loaded/process.rb
214
+ - spec/models/persistence.rb
204
215
  - spec/models/process_with_new_dsl.rb
205
216
  - spec/models/silencer.rb
206
217
  - spec/models/sub_classing.rb
@@ -211,13 +222,14 @@ test_files:
211
222
  - spec/spec_helper.rb
212
223
  - spec/spec_helpers/models_spec_helper.rb
213
224
  - spec/unit/aasm_spec.rb
214
- - spec/unit/active_record_persistence_spec.rb
215
- - spec/unit/auth_machine_spec.rb
216
- - spec/unit/before_after_callbacks_spec.rb
217
- - spec/unit/conversation_spec.rb
225
+ - spec/unit/callbacks_new_dsl_spec.rb
226
+ - spec/unit/callbacks_old_dsl_spec.rb
227
+ - spec/unit/complex_example_spec.rb
218
228
  - spec/unit/event_spec.rb
229
+ - spec/unit/inspection_spec.rb
219
230
  - spec/unit/localizer_spec.rb
220
231
  - spec/unit/memory_leak_spec.rb
221
232
  - spec/unit/new_dsl_spec.rb
233
+ - spec/unit/persistence/active_record_persistence_spec.rb
222
234
  - spec/unit/state_spec.rb
223
235
  - spec/unit/state_transition_spec.rb
@@ -1,334 +0,0 @@
1
- require 'rubygems'
2
- require 'active_record'
3
- require 'logger'
4
- require 'spec_helper'
5
-
6
- load_schema
7
-
8
- # if you want to see the statements while running the spec enable the following line
9
- # ActiveRecord::Base.logger = Logger.new(STDERR)
10
-
11
- class Gate < ActiveRecord::Base
12
- include AASM
13
-
14
- # Fake this column for testing purposes
15
- attr_accessor :aasm_state
16
-
17
- aasm do
18
- state :opened
19
- state :closed
20
-
21
- event :view do
22
- transitions :to => :read, :from => [:needs_attention]
23
- end
24
- end
25
- end
26
-
27
- class Reader < ActiveRecord::Base
28
- def aasm_read_state
29
- "fi"
30
- end
31
- include AASM
32
- end
33
-
34
- class Writer < ActiveRecord::Base
35
- def aasm_write_state(state)
36
- "fo"
37
- end
38
- include AASM
39
- end
40
-
41
- class Transient < ActiveRecord::Base
42
- def aasm_write_state_without_persistence(state)
43
- "fum"
44
- end
45
- include AASM
46
- end
47
-
48
- class Simple < ActiveRecord::Base
49
- include AASM
50
- aasm_column :status
51
- aasm_state :unknown_scope
52
- aasm_state :new
53
- end
54
-
55
- class SimpleNewDsl < ActiveRecord::Base
56
- include AASM
57
- aasm :column => :status
58
- aasm do
59
- state :unknown_scope
60
- state :new
61
- end
62
- end
63
-
64
- class Derivate < Simple
65
- end
66
-
67
- class DerivateNewDsl < SimpleNewDsl
68
- end
69
-
70
- class Thief < ActiveRecord::Base
71
- if ActiveRecord::VERSION::MAJOR >= 3
72
- self.table_name = 'thieves'
73
- else
74
- set_table_name "thieves"
75
- end
76
- include AASM
77
- aasm_initial_state Proc.new { |thief| thief.skilled ? :rich : :jailed }
78
- aasm_state :rich
79
- aasm_state :jailed
80
- attr_accessor :skilled, :aasm_state
81
- end
82
-
83
- shared_examples_for "aasm model" do
84
- it "should include AASM::Persistence::ActiveRecordPersistence" do
85
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence)
86
- end
87
- it "should include AASM::Persistence::ActiveRecordPersistence::InstanceMethods" do
88
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::InstanceMethods)
89
- end
90
- end
91
-
92
- describe Gate, "class methods" do
93
- before(:each) do
94
- @klass = Gate
95
- end
96
- it_should_behave_like "aasm model"
97
- it "should include AASM::Persistence::ActiveRecordPersistence::ReadState" do
98
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::ReadState)
99
- end
100
- it "should include AASM::Persistence::ActiveRecordPersistence::WriteState" do
101
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::WriteState)
102
- end
103
- it "should include AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence" do
104
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence)
105
- end
106
- end
107
-
108
- describe Reader, "class methods" do
109
- before(:each) do
110
- @klass = Reader
111
- end
112
- it_should_behave_like "aasm model"
113
- it "should not include AASM::Persistence::ActiveRecordPersistence::ReadState" do
114
- @klass.included_modules.should_not be_include(AASM::Persistence::ActiveRecordPersistence::ReadState)
115
- end
116
- it "should include AASM::Persistence::ActiveRecordPersistence::WriteState" do
117
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::WriteState)
118
- end
119
- it "should include AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence" do
120
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence)
121
- end
122
- end
123
-
124
- describe Writer, "class methods" do
125
- before(:each) do
126
- @klass = Writer
127
- end
128
- it_should_behave_like "aasm model"
129
- it "should include AASM::Persistence::ActiveRecordPersistence::ReadState" do
130
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::ReadState)
131
- end
132
- it "should not include AASM::Persistence::ActiveRecordPersistence::WriteState" do
133
- @klass.included_modules.should_not be_include(AASM::Persistence::ActiveRecordPersistence::WriteState)
134
- end
135
- it "should include AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence" do
136
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence)
137
- end
138
- end
139
-
140
- describe Transient, "class methods" do
141
- before(:each) do
142
- @klass = Transient
143
- end
144
- it_should_behave_like "aasm model"
145
- it "should include AASM::Persistence::ActiveRecordPersistence::ReadState" do
146
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::ReadState)
147
- end
148
- it "should include AASM::Persistence::ActiveRecordPersistence::WriteState" do
149
- @klass.included_modules.should be_include(AASM::Persistence::ActiveRecordPersistence::WriteState)
150
- end
151
- it "should not include AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence" do
152
- @klass.included_modules.should_not be_include(AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence)
153
- end
154
- end
155
-
156
- describe Gate, "instance methods" do
157
-
158
- before do
159
- @gate = Gate.new
160
- end
161
-
162
- it "should respond to aasm read state when not previously defined" do
163
- @gate.should respond_to(:aasm_read_state)
164
- end
165
-
166
- it "should respond to aasm write state when not previously defined" do
167
- @gate.should respond_to(:aasm_write_state)
168
- end
169
-
170
- it "should respond to aasm write state without persistence when not previously defined" do
171
- @gate.should respond_to(:aasm_write_state_without_persistence)
172
- end
173
-
174
- it "should return the initial state when new and the aasm field is nil" do
175
- @gate.aasm_current_state.should == :opened
176
- end
177
-
178
- it "should return the aasm column when new and the aasm field is not nil" do
179
- @gate.aasm_state = "closed"
180
- @gate.aasm_current_state.should == :closed
181
- end
182
-
183
- it "should return the aasm column when not new and the aasm_column is not nil" do
184
- @gate.stub!(:new_record?).and_return(false)
185
- @gate.aasm_state = "state"
186
- @gate.aasm_current_state.should == :state
187
- end
188
-
189
- it "should allow a nil state" do
190
- @gate.stub!(:new_record?).and_return(false)
191
- @gate.aasm_state = nil
192
- @gate.aasm_current_state.should be_nil
193
- end
194
-
195
- it "should have aasm_ensure_initial_state" do
196
- @gate.send :aasm_ensure_initial_state
197
- end
198
-
199
- it "should call aasm_ensure_initial_state on validation before create" do
200
- @gate.should_receive(:aasm_ensure_initial_state).and_return(true)
201
- @gate.valid?
202
- end
203
-
204
- it "should call aasm_ensure_initial_state on validation before create" do
205
- @gate.stub!(:new_record?).and_return(false)
206
- @gate.should_not_receive(:aasm_ensure_initial_state)
207
- @gate.valid?
208
- end
209
-
210
- end
211
-
212
- describe 'Derivates' do
213
- it "should have the same states as its parent" do
214
- Derivate.aasm_states.should == Simple.aasm_states
215
- end
216
-
217
- it "should have the same events as its parent" do
218
- Derivate.aasm_events.should == Simple.aasm_events
219
- end
220
-
221
- it "should have the same column as its parent" do
222
- Derivate.aasm_column.should == :status
223
- end
224
-
225
- it "should have the same column as its parent even for the new dsl" do
226
- SimpleNewDsl.aasm_column.should == :status
227
- DerivateNewDsl.aasm_column.should == :status
228
- end
229
- end
230
-
231
- describe "AASM::Persistence::ActiveRecordPersistence::NamedScopeMethods" do
232
-
233
- context "Old DSL Does not already respond_to? the scope name" do
234
- it "should add a scope" do
235
- Simple.should respond_to(:unknown_scope)
236
- Simple.unknown_scope.class.should == ActiveRecord::Relation
237
- end
238
- end
239
-
240
- context "Old DSL Already respond_to? the scope name" do
241
- it "should not add a scope" do
242
- Simple.should respond_to(:new)
243
- Simple.new.class.should == Simple
244
- end
245
- end
246
-
247
- context "New DSL Does not already respond_to? the scope name" do
248
- it "should add a scope" do
249
- SimpleNewDsl.should respond_to(:unknown_scope)
250
- SimpleNewDsl.unknown_scope.class.should == ActiveRecord::Relation
251
- end
252
- end
253
-
254
- context "New DSL Already respond_to? the scope name" do
255
- it "should not add a scope" do
256
- SimpleNewDsl.should respond_to(:new)
257
- SimpleNewDsl.new.class.should == SimpleNewDsl
258
- end
259
- end
260
-
261
- end
262
-
263
- describe 'Thieves' do
264
-
265
- it 'should be rich if they\'re skilled' do
266
- Thief.new(:skilled => true).aasm_current_state.should == :rich
267
- end
268
-
269
- it 'should be jailed if they\'re unskilled' do
270
- Thief.new(:skilled => false).aasm_current_state.should == :jailed
271
- end
272
- end
273
-
274
- describe 'transitions with persistence' do
275
-
276
- it 'should not store states for invalid models' do
277
- validator = Validator.create(:name => 'name')
278
- validator.should be_valid
279
- validator.should be_sleeping
280
-
281
- validator.name = nil
282
- validator.should_not be_valid
283
- validator.run!.should be_false
284
- validator.should be_sleeping
285
-
286
- validator.reload
287
- validator.should_not be_running
288
- validator.should be_sleeping
289
-
290
- validator.name = 'another name'
291
- validator.should be_valid
292
- validator.run!.should be_true
293
- validator.should be_running
294
-
295
- validator.reload
296
- validator.should be_running
297
- validator.should_not be_sleeping
298
- end
299
-
300
- it 'should store states for invalid models if configured' do
301
- persistor = InvalidPersistor.create(:name => 'name')
302
- persistor.should be_valid
303
- persistor.should be_sleeping
304
-
305
- persistor.name = nil
306
- persistor.should_not be_valid
307
- persistor.run!.should be_true
308
- persistor.should be_running
309
-
310
- persistor = InvalidPersistor.find(persistor.id)
311
- persistor.valid?
312
- persistor.should be_valid
313
- persistor.should be_running
314
- persistor.should_not be_sleeping
315
-
316
- persistor.reload
317
- persistor.should be_running
318
- persistor.should_not be_sleeping
319
- end
320
-
321
- describe 'transactions' do
322
- it 'should rollback all changes' do
323
- worker = Worker.create!(:name => 'worker', :status => 'sleeping')
324
- transactor = Transactor.create!(:name => 'transactor', :worker => worker)
325
- transactor.should be_sleeping
326
- worker.status.should == 'sleeping'
327
-
328
- lambda {transactor.run!}.should raise_error(StandardError, 'failed on purpose')
329
- transactor.should be_running
330
- worker.reload.status.should == 'sleeping'
331
- end
332
- end
333
-
334
- end