aasm 3.0.19 → 3.0.20

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/CHANGELOG.md CHANGED
@@ -1,17 +1,21 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 3.0.20
4
+
5
+ * added configuration option to disable automatic scope creation
6
+
3
7
  ## 3.0.19
4
8
 
5
- * fixed deprecation warning with Rails 4 (Relation#update_all with conditions is deprecated)
6
- * fixing issue #69 (ActiveRecord scopes are not chainable)
9
+ * fixed deprecation warning with *Rails 4* (`Relation#update_all` with conditions is deprecated)
10
+ * fixing [issue #69](https://github.com/aasm/aasm/issues/69) ( *ActiveRecord* scopes are not chainable)
7
11
 
8
12
  ## 3.0.18
9
13
 
10
- * fixing issue #66 (state methods not reflecting the current state)
14
+ * fixing [issue #66](https://github.com/aasm/aasm/issues/66) (state methods not reflecting the current state)
11
15
 
12
16
  ## 3.0.17
13
17
 
14
- * supporting instance level inspection for states (including permissible state, see issue #54)
18
+ * supporting instance level inspection for states (including permissible state, see [issue #54](https://github.com/aasm/aasm/issues/54))
15
19
  * added autocreation of constants for each state ([@jherdman](https://github.com/jherdman))
16
20
 
17
21
  ## 3.0.16
@@ -20,7 +24,7 @@
20
24
 
21
25
  ## 3.0.15
22
26
 
23
- * added support for localized state names (on a class level, like Record.aasm.states.map(&:localized_name))
27
+ * added support for localized state names (on a class level, like `Record.aasm.states.map(&:localized_name)`)
24
28
 
25
29
  ## 3.0.14
26
30
 
@@ -40,7 +44,7 @@
40
44
 
41
45
  ## 3.0.10
42
46
 
43
- * added support for transitions from all other states (thanks to *Stefan 'swrobel' Wrobel*)
47
+ * added support for transitions from all other states (thanks to [@swrobel](https://github.com/swrobel))
44
48
 
45
49
  ## 3.0.9
46
50
 
@@ -52,7 +56,7 @@
52
56
 
53
57
  ## 3.0.7
54
58
 
55
- * removed deprecation warning when localizing aasm state names (look at https://github.com/rubyist/aasm/issues/38 for details)
59
+ * removed deprecation warning when localizing aasm state names (look at [issue #38](https://github.com/rubyist/aasm/issues/38) for details)
56
60
 
57
61
  ## 3.0.6
58
62
 
data/README.md CHANGED
@@ -268,6 +268,22 @@ class JobsController < ApplicationController
268
268
  end
269
269
  ```
270
270
 
271
+ If you don't need scopes (or simply don't want them), disable their creation when
272
+ defining the `AASM` states, like this:
273
+
274
+ ```ruby
275
+ class Job < ActiveRecord::Base
276
+ include AASM
277
+
278
+ aasm :create_scopes => false do
279
+ state :sleeping, :initial => true
280
+ state :running
281
+ state :cleaning
282
+ end
283
+ end
284
+ ```
285
+
286
+
271
287
  ### Transaction support
272
288
 
273
289
  Since version *3.0.13* AASM supports ActiveRecord transactions. So whenever a transition
@@ -313,16 +329,16 @@ Given the `Job` class from above:
313
329
  ```ruby
314
330
  job = Job.new
315
331
 
316
- job.states
332
+ job.aasm.states
317
333
  => [:sleeping, :running, :cleaning]
318
334
 
319
- job.states(:permissible => true)
335
+ job.aasm.states(:permissible => true)
320
336
  => [:running]
321
337
  job.run
322
- job.states(:permissible => true)
338
+ job.aasm.states(:permissible => true)
323
339
  => [:cleaning, :sleeping]
324
340
 
325
- job.events
341
+ job.aasm.events
326
342
  => [:run, :clean, :sleep]
327
343
  ```
328
344
 
data/lib/aasm/aasm.rb CHANGED
@@ -2,7 +2,11 @@ module AASM
2
2
 
3
3
  def self.included(base) #:nodoc:
4
4
  base.extend AASM::ClassMethods
5
+
6
+ # do not overwrite existing state machines, which could have been created by
7
+ # inheritance, see class method inherited
5
8
  AASM::StateMachine[base] ||= AASM::StateMachine.new('')
9
+
6
10
  AASM::Persistence.load_persistence(base)
7
11
  super
8
12
  end
data/lib/aasm/base.rb CHANGED
@@ -12,6 +12,12 @@ module AASM
12
12
  @state_machine.config.whiny_transitions = true # this is the default, so let's cry
13
13
  end
14
14
 
15
+ if options.key?(:create_scopes)
16
+ @state_machine.config.create_scopes = options[:create_scopes]
17
+ elsif @state_machine.config.create_scopes.nil?
18
+ @state_machine.config.create_scopes = true # this is the default, so let's create scopes
19
+ end
20
+
15
21
  if options.key?(:skip_validation_on_save)
16
22
  @state_machine.config.skip_validation_on_save = options[:skip_validation_on_save]
17
23
  elsif @state_machine.config.skip_validation_on_save.nil?
data/lib/aasm/event.rb CHANGED
@@ -64,16 +64,16 @@ module AASM
64
64
  self
65
65
  end
66
66
 
67
- # Execute if test? == false, otherwise return true/false depending on whether it would fire
67
+ # Execute if test == false, otherwise return true/false depending on whether it would fire
68
68
  def _fire(obj, test, to_state=nil, *args)
69
+ result = test ? false : nil
69
70
  if @transitions.map(&:from).any?
70
71
  transitions = @transitions.select { |t| t.from == obj.aasm_current_state }
71
- return nil if transitions.size == 0
72
+ return result if transitions.size == 0
72
73
  else
73
74
  transitions = @transitions
74
75
  end
75
76
 
76
- result = test ? false : nil
77
77
  transitions.each do |transition|
78
78
  next if to_state and !Array(transition.to).include?(to_state)
79
79
  if transition.perform(obj, *args)
@@ -87,7 +87,7 @@ module AASM
87
87
  # make sure to create a (named) scope for each state
88
88
  def state_with_scope(name, *args)
89
89
  state_without_scope(name, *args)
90
- unless @clazz.respond_to?(name)
90
+ if AASM::StateMachine[@clazz].config.create_scopes && !@clazz.respond_to?(name)
91
91
  if @clazz.ancestors.map {|klass| klass.to_s}.include?("ActiveRecord::Base")
92
92
 
93
93
  conditions = {"#{@clazz.table_name}.#{@clazz.aasm_column}" => name.to_s}
data/lib/aasm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module AASM
2
- VERSION = "3.0.19"
2
+ VERSION = "3.0.20"
3
3
  end
@@ -0,0 +1,10 @@
1
+ class NoScopeMongoid
2
+ include Mongoid::Document
3
+ include AASM
4
+
5
+ field :status, type: String
6
+
7
+ aasm :create_scopes => false, :column => :status do
8
+ state :ignored_scope
9
+ end
10
+ end
@@ -52,6 +52,13 @@ class SimpleNewDsl < ActiveRecord::Base
52
52
  end
53
53
  end
54
54
 
55
+ class NoScope < ActiveRecord::Base
56
+ include AASM
57
+ aasm :create_scopes => false do
58
+ state :ignored_scope
59
+ end
60
+ end
61
+
55
62
  class Derivate < Simple
56
63
  end
57
64
 
data/spec/schema.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
2
 
3
- %w{gates readers writers transients simples simple_new_dsls thieves localizer_test_models persisted_states provided_and_persisted_states}.each do |table_name|
3
+ %w{gates readers writers transients simples simple_new_dsls no_scopes thieves localizer_test_models persisted_states provided_and_persisted_states}.each do |table_name|
4
4
  create_table table_name, :force => true do |t|
5
5
  t.string "aasm_state"
6
6
  end
@@ -110,6 +110,10 @@ describe "named scopes with the new DSL" do
110
110
  end
111
111
  end
112
112
 
113
+ it "does not create scopes if requested" do
114
+ NoScope.should_not respond_to(:ignored_scope)
115
+ end
116
+
113
117
  end
114
118
 
115
119
  describe 'initial states' do
@@ -55,6 +55,10 @@ describe 'mongoid', :if => Gem::Version.create(RUBY_VERSION.dup) >= Gem::Version
55
55
  end
56
56
  end
57
57
 
58
+ it "does not create scopes if requested" do
59
+ NoScopeMongoid.should_not respond_to(:ignored_scope)
60
+ end
61
+
58
62
  end
59
63
 
60
64
  describe "#find_in_state" do
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.19
4
+ version: 3.0.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,22 +12,27 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-05-29 00:00:00.000000000 Z
15
+ date: 2013-08-06 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activerecord
19
- requirement: &70095838288580 !ruby/object:Gem::Requirement
19
+ requirement: !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
- - - =
22
+ - - '='
23
23
  - !ruby/object:Gem::Version
24
24
  version: 3.2.12
25
25
  type: :development
26
26
  prerelease: false
27
- version_requirements: *70095838288580
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - '='
31
+ - !ruby/object:Gem::Version
32
+ version: 3.2.12
28
33
  - !ruby/object:Gem::Dependency
29
34
  name: mongoid
30
- requirement: &70095838287920 !ruby/object:Gem::Requirement
35
+ requirement: !ruby/object:Gem::Requirement
31
36
  none: false
32
37
  requirements:
33
38
  - - ! '>='
@@ -35,10 +40,15 @@ dependencies:
35
40
  version: '0'
36
41
  type: :development
37
42
  prerelease: false
38
- version_requirements: *70095838287920
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
39
49
  - !ruby/object:Gem::Dependency
40
50
  name: rake
41
- requirement: &70095838287460 !ruby/object:Gem::Requirement
51
+ requirement: !ruby/object:Gem::Requirement
42
52
  none: false
43
53
  requirements:
44
54
  - - ! '>='
@@ -46,10 +56,15 @@ dependencies:
46
56
  version: '0'
47
57
  type: :development
48
58
  prerelease: false
49
- version_requirements: *70095838287460
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
50
65
  - !ruby/object:Gem::Dependency
51
66
  name: sdoc
52
- requirement: &70095838287040 !ruby/object:Gem::Requirement
67
+ requirement: !ruby/object:Gem::Requirement
53
68
  none: false
54
69
  requirements:
55
70
  - - ! '>='
@@ -57,10 +72,15 @@ dependencies:
57
72
  version: '0'
58
73
  type: :development
59
74
  prerelease: false
60
- version_requirements: *70095838287040
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
61
81
  - !ruby/object:Gem::Dependency
62
82
  name: rspec
63
- requirement: &70095838286540 !ruby/object:Gem::Requirement
83
+ requirement: !ruby/object:Gem::Requirement
64
84
  none: false
65
85
  requirements:
66
86
  - - ~>
@@ -68,10 +88,15 @@ dependencies:
68
88
  version: '2.0'
69
89
  type: :development
70
90
  prerelease: false
71
- version_requirements: *70095838286540
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
72
97
  - !ruby/object:Gem::Dependency
73
98
  name: rr
74
- requirement: &70095838286120 !ruby/object:Gem::Requirement
99
+ requirement: !ruby/object:Gem::Requirement
75
100
  none: false
76
101
  requirements:
77
102
  - - ! '>='
@@ -79,10 +104,15 @@ dependencies:
79
104
  version: '0'
80
105
  type: :development
81
106
  prerelease: false
82
- version_requirements: *70095838286120
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
83
113
  - !ruby/object:Gem::Dependency
84
114
  name: sqlite3
85
- requirement: &70095838285660 !ruby/object:Gem::Requirement
115
+ requirement: !ruby/object:Gem::Requirement
86
116
  none: false
87
117
  requirements:
88
118
  - - ! '>='
@@ -90,10 +120,15 @@ dependencies:
90
120
  version: '0'
91
121
  type: :development
92
122
  prerelease: false
93
- version_requirements: *70095838285660
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
94
129
  - !ruby/object:Gem::Dependency
95
130
  name: minitest
96
- requirement: &70095838285240 !ruby/object:Gem::Requirement
131
+ requirement: !ruby/object:Gem::Requirement
97
132
  none: false
98
133
  requirements:
99
134
  - - ! '>='
@@ -101,10 +136,15 @@ dependencies:
101
136
  version: '0'
102
137
  type: :development
103
138
  prerelease: false
104
- version_requirements: *70095838285240
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
105
145
  - !ruby/object:Gem::Dependency
106
146
  name: ruby-debug-completion
107
- requirement: &70095838284820 !ruby/object:Gem::Requirement
147
+ requirement: !ruby/object:Gem::Requirement
108
148
  none: false
109
149
  requirements:
110
150
  - - ! '>='
@@ -112,10 +152,15 @@ dependencies:
112
152
  version: '0'
113
153
  type: :development
114
154
  prerelease: false
115
- version_requirements: *70095838284820
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
116
161
  - !ruby/object:Gem::Dependency
117
162
  name: coveralls
118
- requirement: &70095838284400 !ruby/object:Gem::Requirement
163
+ requirement: !ruby/object:Gem::Requirement
119
164
  none: false
120
165
  requirements:
121
166
  - - ! '>='
@@ -123,7 +168,12 @@ dependencies:
123
168
  version: '0'
124
169
  type: :development
125
170
  prerelease: false
126
- version_requirements: *70095838284400
171
+ version_requirements: !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ! '>='
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
127
177
  description: AASM is a continuation of the acts as state machine rails plugin, built
128
178
  for plain Ruby objects.
129
179
  email: scott@elitists.net, ttilley@gmail.com, aasm@mt7.de
@@ -171,6 +221,7 @@ files:
171
221
  - spec/models/father.rb
172
222
  - spec/models/foo.rb
173
223
  - spec/models/invalid_persistor.rb
224
+ - spec/models/mongoid/no_scope_mongoid.rb
174
225
  - spec/models/mongoid/simple_mongoid.rb
175
226
  - spec/models/mongoid/simple_new_dsl_mongoid.rb
176
227
  - spec/models/not_auto_loaded/process.rb
@@ -222,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
273
  version: '0'
223
274
  requirements: []
224
275
  rubyforge_project:
225
- rubygems_version: 1.8.11
276
+ rubygems_version: 1.8.24
226
277
  signing_key:
227
278
  specification_version: 3
228
279
  summary: State machine mixin for Ruby objects
@@ -240,6 +291,7 @@ test_files:
240
291
  - spec/models/father.rb
241
292
  - spec/models/foo.rb
242
293
  - spec/models/invalid_persistor.rb
294
+ - spec/models/mongoid/no_scope_mongoid.rb
243
295
  - spec/models/mongoid/simple_mongoid.rb
244
296
  - spec/models/mongoid/simple_new_dsl_mongoid.rb
245
297
  - spec/models/not_auto_loaded/process.rb