aasm 3.0.2 → 3.0.3

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,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 3.0.3
4
+
5
+ * bugfix: ActiveRecord scopes are generated when using the new DSL
6
+
3
7
  ## 3.0.2
4
8
 
5
9
  * ActiveRecord persistence can ignore validation when trying to save invalid models
data/README.md CHANGED
@@ -92,7 +92,7 @@ This example uses a few of the more complex features available.
92
92
  class Relationship
93
93
  include AASM
94
94
 
95
- aasm :column => :status
95
+ aasm :column => :status do
96
96
  state :dating, :enter => :make_happy, :exit => :make_depressed
97
97
  state :intimate, :enter => :make_very_happy, :exit => :never_speak_again
98
98
  state :married, :enter => :give_up_intimacy, :exit => :buy_exotic_car_and_wear_a_combover
data/Rakefile CHANGED
@@ -15,7 +15,6 @@ end
15
15
 
16
16
  require 'rdoc/task'
17
17
  require 'aasm/version'
18
- require 'sdoc'
19
18
 
20
19
  Rake::RDocTask.new do |rdoc|
21
20
  rdoc.rdoc_dir = 'rdoc'
data/lib/aasm/aasm.rb CHANGED
@@ -3,10 +3,10 @@ module AASM
3
3
  def self.included(base) #:nodoc:
4
4
  base.extend AASM::ClassMethods
5
5
 
6
- AASM::Persistence.set_persistence(base)
7
6
  unless AASM::StateMachine[base]
8
7
  AASM::StateMachine[base] = AASM::StateMachine.new('')
9
8
  end
9
+ AASM::Persistence.set_persistence(base)
10
10
  super
11
11
  end
12
12
 
@@ -38,19 +38,6 @@ module AASM
38
38
  base.send(:include, AASM::Persistence::ActiveRecordPersistence::WriteState) unless base.method_defined?(:aasm_write_state)
39
39
  base.send(:include, AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence) unless base.method_defined?(:aasm_write_state_without_persistence)
40
40
 
41
- if base.respond_to?(:named_scope) || base.respond_to?(:scope)
42
- base.extend(AASM::Persistence::ActiveRecordPersistence::NamedScopeMethods)
43
-
44
- base.class_eval do
45
- class << self
46
- unless method_defined?(:aasm_state_without_scope)
47
- alias_method :aasm_state_without_scope, :aasm_state
48
- alias_method :aasm_state, :aasm_state_with_scope
49
- end
50
- end
51
- end
52
- end
53
-
54
41
  if ActiveRecord::VERSION::MAJOR >= 3
55
42
  base.before_validation(:aasm_ensure_initial_state, :on => :create)
56
43
  else
@@ -159,7 +146,7 @@ module AASM
159
146
  # foo.aasm_state # => nil
160
147
  #
161
148
  def aasm_ensure_initial_state
162
- send("#{self.class.aasm_column}=", self.aasm_enter_initial_state.to_s) if send(self.class.aasm_column).blank?
149
+ aasm_enter_initial_state if send(self.class.aasm_column).blank?
163
150
  end
164
151
 
165
152
  end
@@ -245,18 +232,22 @@ module AASM
245
232
  end
246
233
  end
247
234
 
248
- module NamedScopeMethods
249
- def aasm_state_with_scope name, options = {}
250
- aasm_state_without_scope name, options
251
-
252
- unless self.respond_to?(name)
253
- scope_options = {:conditions => { "#{table_name}.#{self.aasm_column}" => name.to_s}}
254
- scope_method = ActiveRecord::VERSION::MAJOR >= 3 ? :scope : :named_scope
255
- self.send(scope_method, name, scope_options)
256
- end
257
-
258
- end
259
- end
260
235
  end
261
236
  end
262
237
  end
238
+
239
+ class AASM::Base
240
+ def state_with_scope(name, *args)
241
+ state_without_scope(name, *args)
242
+ if @clazz.ancestors.map {|klass| klass.to_s}.include?("ActiveRecord::Base") && !@clazz.respond_to?(name)
243
+ # puts "setting scope #{@clazz.name}.#{name}"
244
+ scope_options = {:conditions => { "#{@clazz.table_name}.#{@clazz.aasm_column}" => name.to_s}}
245
+ scope_method = ActiveRecord::VERSION::MAJOR >= 3 ? :scope : :named_scope
246
+ @clazz.send(scope_method, name, scope_options)
247
+ # else
248
+ # puts "not setting scope #{@clazz.name}.#{name}"
249
+ end
250
+ end
251
+ alias_method :state_without_scope, :state
252
+ alias_method :state, :state_with_scope
253
+ end
data/lib/aasm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module AASM
2
- VERSION = "3.0.2"
2
+ VERSION = "3.0.3"
3
3
  end
data/spec/schema.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
2
 
3
- %w{gates readers writers transients simples thieves localizer_test_models}.each do |table_name|
4
- create_table table_name, :force => true
3
+ %w{gates readers writers transients simples simple_new_dsls thieves localizer_test_models}.each do |table_name|
4
+ create_table table_name, :force => true do |t|
5
+ t.string "aasm_state"
6
+ end
5
7
  end
6
8
 
7
9
  create_table "validators", :force => true do |t|
@@ -46,11 +46,17 @@ end
46
46
  class Simple < ActiveRecord::Base
47
47
  include AASM
48
48
  aasm_column :status
49
+ aasm_state :unknown_scope
50
+ aasm_state :new
49
51
  end
50
52
 
51
53
  class SimpleNewDsl < ActiveRecord::Base
52
54
  include AASM
53
55
  aasm :column => :status
56
+ aasm do
57
+ state :unknown_scope
58
+ state :new
59
+ end
54
60
  end
55
61
 
56
62
  class Derivate < Simple
@@ -60,7 +66,11 @@ class DerivateNewDsl < SimpleNewDsl
60
66
  end
61
67
 
62
68
  class Thief < ActiveRecord::Base
63
- set_table_name "thieves"
69
+ if ActiveRecord::VERSION::MAJOR >= 3
70
+ self.table_name = 'thieves'
71
+ else
72
+ set_table_name "thieves"
73
+ end
64
74
  include AASM
65
75
  aasm_initial_state Proc.new { |thief| thief.skilled ? :rich : :jailed }
66
76
  aasm_state :rich
@@ -216,24 +226,36 @@ describe 'Derivates' do
216
226
  end
217
227
  end
218
228
 
219
- describe AASM::Persistence::ActiveRecordPersistence::NamedScopeMethods do
229
+ describe "AASM::Persistence::ActiveRecordPersistence::NamedScopeMethods" do
220
230
 
221
- context "Does not already respond_to? the scope name" do
231
+ context "Old DSL Does not already respond_to? the scope name" do
222
232
  it "should add a scope" do
223
- Simple.should_not respond_to(:unknown_scope)
224
- Simple.aasm_state :unknown_scope
225
233
  Simple.should respond_to(:unknown_scope)
226
234
  Simple.unknown_scope.class.should == ActiveRecord::Relation
227
235
  end
228
236
  end
229
237
 
230
- context "Already respond_to? the scope name" do
238
+ context "Old DSL Already respond_to? the scope name" do
231
239
  it "should not add a scope" do
232
- Simple.aasm_state :new
233
240
  Simple.should respond_to(:new)
234
241
  Simple.new.class.should == Simple
235
242
  end
236
243
  end
244
+
245
+ context "New DSL Does not already respond_to? the scope name" do
246
+ it "should add a scope" do
247
+ SimpleNewDsl.should respond_to(:unknown_scope)
248
+ SimpleNewDsl.unknown_scope.class.should == ActiveRecord::Relation
249
+ end
250
+ end
251
+
252
+ context "New DSL Already respond_to? the scope name" do
253
+ it "should not add a scope" do
254
+ SimpleNewDsl.should respond_to(:new)
255
+ SimpleNewDsl.new.class.should == SimpleNewDsl
256
+ end
257
+ end
258
+
237
259
  end
238
260
 
239
261
  describe 'Thieves' do
metadata CHANGED
@@ -1,162 +1,125 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: aasm
3
- version: !ruby/object:Gem::Version
4
- hash: 3
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.3
5
5
  prerelease:
6
- segments:
7
- - 3
8
- - 0
9
- - 2
10
- version: 3.0.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Scott Barron
14
9
  - Scott Petersen
15
10
  - Travis Tilley
16
- - "Thorsten B\xC3\xB6ttger"
11
+ - Thorsten Böttger
17
12
  autorequire:
18
13
  bindir: bin
19
14
  cert_chain: []
20
-
21
- date: 2012-01-16 00:00:00 +01:00
22
- default_executable:
23
- dependencies:
24
- - !ruby/object:Gem::Dependency
15
+ date: 2012-02-22 00:00:00.000000000Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
25
18
  name: activerecord
26
- prerelease: false
27
- requirement: &id001 !ruby/object:Gem::Requirement
19
+ requirement: &70214630172340 !ruby/object:Gem::Requirement
28
20
  none: false
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- hash: 3
33
- segments:
34
- - 0
35
- version: "0"
21
+ requirements:
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0'
36
25
  type: :runtime
37
- version_requirements: *id001
38
- - !ruby/object:Gem::Dependency
39
- name: rake
40
26
  prerelease: false
41
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ version_requirements: *70214630172340
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: &70214630171920 !ruby/object:Gem::Requirement
42
31
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- hash: 3
47
- segments:
48
- - 0
49
- version: "0"
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
50
36
  type: :development
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: sdoc
54
37
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ version_requirements: *70214630171920
39
+ - !ruby/object:Gem::Dependency
40
+ name: sdoc
41
+ requirement: &70214630171500 !ruby/object:Gem::Requirement
56
42
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 0
63
- version: "0"
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
64
47
  type: :development
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: rspec
68
48
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
49
+ version_requirements: *70214630171500
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
52
+ requirement: &70214630171000 !ruby/object:Gem::Requirement
70
53
  none: false
71
- requirements:
54
+ requirements:
72
55
  - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 3
75
- segments:
76
- - 2
77
- - 0
78
- version: "2.0"
56
+ - !ruby/object:Gem::Version
57
+ version: '2.0'
79
58
  type: :development
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- name: rr
83
59
  prerelease: false
84
- requirement: &id005 !ruby/object:Gem::Requirement
60
+ version_requirements: *70214630171000
61
+ - !ruby/object:Gem::Dependency
62
+ name: rr
63
+ requirement: &70214630170580 !ruby/object:Gem::Requirement
85
64
  none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- hash: 3
90
- segments:
91
- - 0
92
- version: "0"
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
93
69
  type: :development
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- name: shoulda
97
70
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
71
+ version_requirements: *70214630170580
72
+ - !ruby/object:Gem::Dependency
73
+ name: shoulda
74
+ requirement: &70214630170120 !ruby/object:Gem::Requirement
99
75
  none: false
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- hash: 3
104
- segments:
105
- - 0
106
- version: "0"
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
107
80
  type: :development
108
- version_requirements: *id006
109
- - !ruby/object:Gem::Dependency
110
- name: sqlite3
111
81
  prerelease: false
112
- requirement: &id007 !ruby/object:Gem::Requirement
82
+ version_requirements: *70214630170120
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: &70214630200660 !ruby/object:Gem::Requirement
113
86
  none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- hash: 3
118
- segments:
119
- - 0
120
- version: "0"
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
121
91
  type: :development
122
- version_requirements: *id007
123
- - !ruby/object:Gem::Dependency
124
- name: minitest
125
92
  prerelease: false
126
- requirement: &id008 !ruby/object:Gem::Requirement
93
+ version_requirements: *70214630200660
94
+ - !ruby/object:Gem::Dependency
95
+ name: minitest
96
+ requirement: &70214630200240 !ruby/object:Gem::Requirement
127
97
  none: false
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- hash: 3
132
- segments:
133
- - 0
134
- version: "0"
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
135
102
  type: :development
136
- version_requirements: *id008
137
- - !ruby/object:Gem::Dependency
138
- name: ruby-debug-completion
139
103
  prerelease: false
140
- requirement: &id009 !ruby/object:Gem::Requirement
104
+ version_requirements: *70214630200240
105
+ - !ruby/object:Gem::Dependency
106
+ name: ruby-debug-completion
107
+ requirement: &70214630199820 !ruby/object:Gem::Requirement
141
108
  none: false
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- hash: 3
146
- segments:
147
- - 0
148
- version: "0"
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
149
113
  type: :development
150
- version_requirements: *id009
151
- description: AASM is a continuation of the acts as state machine rails plugin, built for plain Ruby objects.
114
+ prerelease: false
115
+ version_requirements: *70214630199820
116
+ description: AASM is a continuation of the acts as state machine rails plugin, built
117
+ for plain Ruby objects.
152
118
  email: scott@elitists.net, ttilley@gmail.com
153
119
  executables: []
154
-
155
120
  extensions: []
156
-
157
121
  extra_rdoc_files: []
158
-
159
- files:
122
+ files:
160
123
  - .document
161
124
  - .gitignore
162
125
  - CHANGELOG.md
@@ -201,41 +164,31 @@ files:
201
164
  - spec/unit/new_dsl_spec.rb
202
165
  - spec/unit/state_spec.rb
203
166
  - spec/unit/state_transition_spec.rb
204
- has_rdoc: true
205
167
  homepage: http://rubyist.github.com/aasm/
206
168
  licenses: []
207
-
208
169
  post_install_message:
209
170
  rdoc_options: []
210
-
211
- require_paths:
171
+ require_paths:
212
172
  - lib
213
- required_ruby_version: !ruby/object:Gem::Requirement
173
+ required_ruby_version: !ruby/object:Gem::Requirement
214
174
  none: false
215
- requirements:
216
- - - ">="
217
- - !ruby/object:Gem::Version
218
- hash: 3
219
- segments:
220
- - 0
221
- version: "0"
222
- required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
223
180
  none: false
224
- requirements:
225
- - - ">="
226
- - !ruby/object:Gem::Version
227
- hash: 3
228
- segments:
229
- - 0
230
- version: "0"
181
+ requirements:
182
+ - - ! '>='
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
231
185
  requirements: []
232
-
233
186
  rubyforge_project:
234
- rubygems_version: 1.6.2
187
+ rubygems_version: 1.8.15
235
188
  signing_key:
236
189
  specification_version: 3
237
190
  summary: State machine mixin for Ruby objects
238
- test_files:
191
+ test_files:
239
192
  - spec/database.yml
240
193
  - spec/en.yml
241
194
  - spec/models/conversation.rb