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 +4 -0
- data/README.md +1 -1
- data/Rakefile +0 -1
- data/lib/aasm/aasm.rb +1 -1
- data/lib/aasm/persistence/active_record_persistence.rb +17 -26
- data/lib/aasm/version.rb +1 -1
- data/spec/schema.rb +4 -2
- data/spec/unit/active_record_persistence_spec.rb +29 -7
- metadata +94 -141
data/CHANGELOG.md
CHANGED
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
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
|
-
|
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
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
|
-
|
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
|
-
|
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
|
-
-
|
11
|
+
- Thorsten Böttger
|
17
12
|
autorequire:
|
18
13
|
bindir: bin
|
19
14
|
cert_chain: []
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
146
|
-
segments:
|
147
|
-
- 0
|
148
|
-
version: "0"
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
149
113
|
type: :development
|
150
|
-
|
151
|
-
|
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
|
-
|
219
|
-
|
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
|
-
|
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.
|
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
|