aasm 3.0.2 → 3.0.3

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