aasm 3.0.19 → 3.0.20

Sign up to get free protection for your applications and to get access to all the features.
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