aasm 3.0.24 → 3.0.25
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.
- checksums.yaml +4 -4
- data/.travis.yml +21 -3
- data/CHANGELOG.md +8 -0
- data/Gemfile +9 -1
- data/LICENSE +1 -1
- data/README.md +9 -8
- data/aasm.gemspec +4 -5
- data/gemfiles/rails_3.2.gemfile +11 -0
- data/gemfiles/rails_4.0.gemfile +10 -0
- data/lib/aasm.rb +0 -3
- data/lib/aasm/aasm.rb +31 -27
- data/lib/aasm/base.rb +14 -5
- data/lib/aasm/event.rb +16 -16
- data/lib/aasm/instance_base.rb +1 -1
- data/lib/aasm/persistence/active_record_persistence.rb +10 -8
- data/lib/aasm/persistence/base.rb +1 -1
- data/lib/aasm/persistence/mongoid_persistence.rb +10 -8
- data/lib/aasm/version.rb +1 -1
- data/spec/models/mongoid/no_scope_mongoid.rb +1 -1
- data/spec/models/mongoid/simple_mongoid.rb +5 -4
- data/spec/models/mongoid/simple_new_dsl_mongoid.rb +1 -1
- data/spec/models/not_auto_loaded/process.rb +10 -8
- data/spec/models/persistence.rb +5 -13
- data/spec/unit/callbacks_spec.rb +4 -20
- data/spec/unit/complex_example_spec.rb +4 -4
- data/spec/unit/event_spec.rb +49 -36
- data/spec/unit/initial_state_spec.rb +4 -5
- data/spec/unit/inspection_spec.rb +11 -24
- data/spec/unit/localizer_spec.rb +12 -12
- data/spec/unit/persistence/active_record_persistence_spec.rb +13 -31
- data/spec/unit/persistence/mongoid_persistance_spec.rb +102 -81
- data/spec/unit/simple_example_spec.rb +1 -2
- data/spec/unit/subclassing_spec.rb +7 -7
- data/spec/unit/transition_spec.rb +5 -5
- metadata +4 -75
- data/lib/aasm/deprecated/aasm.rb +0 -15
- data/spec/models/callback_old_dsl.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d749826eeac0c51c3ee50f09e7acee8f67db5bf
|
4
|
+
data.tar.gz: 7c96c771d9470db46c96c0ca1af339afd037feb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff4157e4b1824c00a0201d249bd2e3d97f899c172c2209765ce786d0974836291c532a5d8c6ff54d92e999d322a545db3156331b9f69d9ab7ec60b2b94a35eec
|
7
|
+
data.tar.gz: e96dffe3354bbe7b9d9a38e0b5f7f1c447effd552e6a98b84bfbcea0ad4fe13299b99f8cffd99bdec42d87b56f3e8940b80744d889d1bb1d84862b133fc633de
|
data/.travis.yml
CHANGED
@@ -1,11 +1,29 @@
|
|
1
1
|
language: ruby
|
2
|
+
|
2
3
|
rvm:
|
3
4
|
- 1.8.7
|
4
5
|
- 1.9.2
|
5
6
|
- 1.9.3
|
6
7
|
- 2.0.0
|
7
8
|
# - jruby-18mode # JRuby in 1.8 mode
|
8
|
-
|
9
|
-
- rbx-
|
10
|
-
|
9
|
+
- jruby-19mode # JRuby in 1.9 mode
|
10
|
+
- rbx-2.2.1
|
11
|
+
|
11
12
|
services: mongodb
|
13
|
+
|
14
|
+
gemfile:
|
15
|
+
- gemfiles/rails_3.2.gemfile
|
16
|
+
- gemfiles/rails_4.0.gemfile
|
17
|
+
|
18
|
+
matrix:
|
19
|
+
allow_failures:
|
20
|
+
- rvm: rbx-2.2.1
|
21
|
+
- rvm: jruby-19mode
|
22
|
+
exclude:
|
23
|
+
- { rvm: 1.8.7, gemfile: gemfiles/rails_4.0.gemfile }
|
24
|
+
- { rvm: 1.9.2, gemfile: gemfiles/rails_4.0.gemfile }
|
25
|
+
- { rvm: 1.9.3, gemfile: gemfiles/rails_4.0.gemfile }
|
26
|
+
- { rvm: jruby-19mode, gemfile: gemfiles/rails_3.2.gemfile }
|
27
|
+
- { rvm: jruby-19mode, gemfile: gemfiles/rails_4.0.gemfile }
|
28
|
+
- { rvm: rbx-2.2.1, gemfile: gemfiles/rails_3.2.gemfile }
|
29
|
+
- { rvm: rbx-2.2.1, gemfile: gemfiles/rails_4.0.gemfile }
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 3.1.0 (not yet released)
|
4
|
+
|
5
|
+
* deprecated old aasm_* class methods (old-style DSL), in preparation for AASM v4.0.0
|
6
|
+
|
7
|
+
## 3.0.25
|
8
|
+
|
9
|
+
* initialize the state even if validation is skipped (for ActiveRecord and Mongoid persistence) (see issue #103, thanks to [@vfonic](https://github.com/vfonic) and [@aaronklaassen](https://github.com/aaronklaassen))
|
10
|
+
|
3
11
|
## 3.0.24
|
4
12
|
|
5
13
|
* added support for event blocks (thanks to [@Intrepidd](https://github.com/Intrepidd))
|
data/Gemfile
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem "sqlite3", :platforms => :ruby
|
4
|
+
gem "coveralls", :platforms => :ruby
|
5
|
+
gem 'rubysl', :platforms => :rbx
|
6
|
+
gem "jruby-openssl", :platforms => :jruby
|
7
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
8
|
+
gem "rails", "3.2.15"
|
9
|
+
gem 'mongoid' if Gem::Version.create(RUBY_VERSION.dup) >= Gem::Version.create('1.9.3')
|
2
10
|
|
3
11
|
gemspec
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -257,6 +257,7 @@ to include Mongoid::Document before you include AASM.
|
|
257
257
|
class Job
|
258
258
|
include Mongoid::Document
|
259
259
|
include AASM
|
260
|
+
field :aasm_state
|
260
261
|
aasm do
|
261
262
|
...
|
262
263
|
end
|
@@ -325,9 +326,9 @@ class Job < ActiveRecord::Base
|
|
325
326
|
|
326
327
|
aasm do
|
327
328
|
state :sleeping, :initial => true
|
328
|
-
state :running
|
329
|
+
state :running, :after_commit => :notify_about_running_job
|
329
330
|
|
330
|
-
event :run
|
331
|
+
event :run do
|
331
332
|
transitions :from => :sleeping, :to => :running
|
332
333
|
end
|
333
334
|
end
|
@@ -417,7 +418,7 @@ gem 'aasm'
|
|
417
418
|
|
418
419
|
## Latest changes ##
|
419
420
|
|
420
|
-
|
421
|
+
Take a look at the [CHANGELOG](https://github.com/aasm/aasm/blob/master/CHANGELOG.md) for details about recent changes to the current version.
|
421
422
|
|
422
423
|
## Questions? ##
|
423
424
|
|
@@ -427,11 +428,11 @@ Feel free to
|
|
427
428
|
* [ask a question on StackOverflow](http://stackoverflow.com) (tag with `aasm`)
|
428
429
|
* send us a tweet [@aasm](http://twitter.com/aasm)
|
429
430
|
|
430
|
-
##
|
431
|
+
## Maintainers ##
|
431
432
|
|
432
|
-
* [Scott Barron](https://github.com/rubyist)
|
433
|
-
* [Travis Tilley](https://github.com/ttilley)
|
434
|
-
* [Thorsten Böttger](http://github.com/alto)
|
433
|
+
* [Scott Barron](https://github.com/rubyist) (2006–2009, original author)
|
434
|
+
* [Travis Tilley](https://github.com/ttilley) (2009–2011)
|
435
|
+
* [Thorsten Böttger](http://github.com/alto) (since 2011)
|
435
436
|
|
436
437
|
|
437
438
|
## Warranty ##
|
@@ -443,7 +444,7 @@ purpose.
|
|
443
444
|
|
444
445
|
## License ##
|
445
446
|
|
446
|
-
Copyright (c) 2006-
|
447
|
+
Copyright (c) 2006-2014 Scott Barron
|
447
448
|
|
448
449
|
Permission is hereby granted, free of charge, to any person obtaining
|
449
450
|
a copy of this software and associated documentation files (the
|
data/aasm.gemspec
CHANGED
@@ -13,22 +13,21 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.date = Time.now
|
14
14
|
s.licenses = ["MIT"]
|
15
15
|
|
16
|
-
s.add_development_dependency 'activerecord', '3.2.15'
|
16
|
+
# s.add_development_dependency 'activerecord', '3.2.15'
|
17
17
|
# s.add_development_dependency 'activerecord', '4.0.1'
|
18
18
|
|
19
|
-
s.add_development_dependency 'mongoid' if Gem::Version.create(RUBY_VERSION.dup) >= Gem::Version.create('1.9.3')
|
19
|
+
# s.add_development_dependency 'mongoid' if Gem::Version.create(RUBY_VERSION.dup) >= Gem::Version.create('1.9.3')
|
20
20
|
s.add_development_dependency 'rake'
|
21
21
|
s.add_development_dependency 'sdoc'
|
22
22
|
s.add_development_dependency 'rspec', '~> 2.14'
|
23
23
|
s.add_development_dependency 'rr'
|
24
|
-
s.add_development_dependency 'sqlite3'
|
24
|
+
# s.add_development_dependency 'sqlite3'
|
25
25
|
s.add_development_dependency 'minitest'
|
26
26
|
# s.add_development_dependency 'debugger'
|
27
27
|
# s.add_development_dependency 'pry'
|
28
|
-
s.add_development_dependency 'ruby-debug-completion'
|
29
28
|
|
30
29
|
s.add_development_dependency 'mime-types', '~> 1.25' # needed by coveralls (>= 2.0 needs Ruby >=1.9.2)
|
31
|
-
s.add_development_dependency 'coveralls'
|
30
|
+
# s.add_development_dependency 'coveralls'
|
32
31
|
|
33
32
|
s.files = `git ls-files`.split("\n")
|
34
33
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -0,0 +1,11 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem "sqlite3", :platforms => :ruby
|
4
|
+
gem "coveralls", :platforms => :ruby
|
5
|
+
gem 'rubysl', :platforms => :rbx
|
6
|
+
gem "jruby-openssl", :platforms => :jruby
|
7
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
8
|
+
gem "rails", "3.2.15"
|
9
|
+
gem 'mongoid' if Gem::Version.create(RUBY_VERSION.dup) >= Gem::Version.create('1.9.3')
|
10
|
+
|
11
|
+
gemspec :path => "../"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem "sqlite3", :platforms => :ruby
|
4
|
+
gem "coveralls", :platforms => :ruby
|
5
|
+
gem 'rubysl', :platforms => :rbx
|
6
|
+
gem "jruby-openssl", :platforms => :jruby
|
7
|
+
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
8
|
+
gem "rails", "4.0.1"
|
9
|
+
|
10
|
+
gemspec :path => "../"
|
data/lib/aasm.rb
CHANGED
@@ -13,6 +13,3 @@ require 'ostruct'
|
|
13
13
|
persistence
|
14
14
|
aasm
|
15
15
|
).each { |file| require File.join(File.dirname(__FILE__), 'aasm', file) }
|
16
|
-
|
17
|
-
# load the deprecated methods and modules
|
18
|
-
Dir[File.join(File.dirname(__FILE__), 'aasm', 'deprecated', '*.rb')].sort.each { |f| require File.expand_path(f) }
|
data/lib/aasm/aasm.rb
CHANGED
@@ -26,52 +26,56 @@ module AASM
|
|
26
26
|
@aasm
|
27
27
|
end
|
28
28
|
|
29
|
-
# TODO
|
29
|
+
# TODO remove this method in v4.0.0
|
30
30
|
def aasm_initial_state(set_state=nil)
|
31
31
|
if set_state
|
32
|
-
|
32
|
+
warn ".aasm_initial_state(:name) is deprecated and will be removed in version 4.0.0; please use .aasm.initial_state = :name instead!"
|
33
33
|
AASM::StateMachine[self].initial_state = set_state
|
34
34
|
else
|
35
|
+
warn ".aasm_initial_state is deprecated and will be removed in version 4.0.0; please use .aasm.initial_state instead!"
|
35
36
|
AASM::StateMachine[self].initial_state
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
|
-
#
|
40
|
+
# TODO remove this method in v4.0.0
|
40
41
|
def aasm_from_states_for_state(state, options={})
|
41
|
-
|
42
|
-
|
43
|
-
else
|
44
|
-
aasm.events.map {|k,v| v.transitions_to_state(state)}.flatten.map(&:from).flatten
|
45
|
-
end
|
42
|
+
warn ".aasm_from_states_for_state is deprecated and will be removed in version 4.0.0; please use .aasm.from_states_for_state instead!"
|
43
|
+
aasm.from_states_for_state(state, options)
|
46
44
|
end
|
47
45
|
|
48
|
-
#
|
46
|
+
# TODO remove this method in v4.0.0
|
49
47
|
def aasm_initial_state=(state)
|
48
|
+
warn ".aasm_initial_state= is deprecated and will be removed in version 4.0.0"
|
50
49
|
AASM::StateMachine[self].initial_state = state
|
51
50
|
end
|
52
51
|
|
53
|
-
#
|
52
|
+
# TODO remove this method in v4.0.0
|
54
53
|
def aasm_state(name, options={})
|
54
|
+
warn ".aasm_state is deprecated and will be removed in version 4.0.0; please use .aasm.state instead!"
|
55
55
|
aasm.state(name, options)
|
56
56
|
end
|
57
57
|
|
58
|
-
#
|
58
|
+
# TODO remove this method in v4.0.0
|
59
59
|
def aasm_event(name, options = {}, &block)
|
60
|
+
warn ".aasm_event is deprecated and will be removed in version 4.0.0; please use .aasm.event instead!"
|
60
61
|
aasm.event(name, options, &block)
|
61
62
|
end
|
62
63
|
|
63
|
-
#
|
64
|
+
# TODO remove this method in v4.0.0
|
64
65
|
def aasm_states
|
66
|
+
warn ".aasm_states is deprecated and will be removed in version 4.0.0; please use .aasm.states instead!"
|
65
67
|
aasm.states
|
66
68
|
end
|
67
69
|
|
68
|
-
#
|
70
|
+
# TODO remove this method in v4.0.0
|
69
71
|
def aasm_events
|
72
|
+
warn ".aasm_events is deprecated and will be removed in version 4.0.0; please use .aasm.events instead!"
|
70
73
|
aasm.events
|
71
74
|
end
|
72
75
|
|
73
|
-
#
|
76
|
+
# TODO remove this method in v4.0.0
|
74
77
|
def aasm_states_for_select
|
78
|
+
warn ".aasm_states_for_select is deprecated and will be removed in version 4.0.0; please use .aasm.states_for_select instead!"
|
75
79
|
aasm.states_for_select
|
76
80
|
end
|
77
81
|
|
@@ -103,46 +107,46 @@ module AASM
|
|
103
107
|
true
|
104
108
|
end
|
105
109
|
|
106
|
-
|
110
|
+
# TODO remove this method in v4.0.0
|
107
111
|
def aasm_current_state
|
108
|
-
|
112
|
+
warn "#aasm_current_state is deprecated and will be removed in version 4.0.0; please use #aasm.current_state instead!"
|
109
113
|
aasm.current_state
|
110
114
|
end
|
111
115
|
|
112
|
-
|
116
|
+
# TODO remove this method in v4.0.0
|
113
117
|
def aasm_enter_initial_state
|
114
|
-
|
118
|
+
warn "#aasm_enter_initial_state is deprecated and will be removed in version 4.0.0; please use #aasm.enter_initial_state instead!"
|
115
119
|
aasm.enter_initial_state
|
116
120
|
end
|
117
121
|
|
118
|
-
|
122
|
+
# TODO remove this method in v4.0.0
|
119
123
|
def aasm_events_for_current_state
|
120
|
-
|
124
|
+
warn "#aasm_events_for_current_state is deprecated and will be removed in version 4.0.0; please use #aasm.events(aasm.current_state) instead!"
|
121
125
|
aasm.events(aasm.current_state)
|
122
126
|
end
|
123
127
|
|
124
|
-
|
128
|
+
# TODO remove this method in v4.0.0
|
125
129
|
def aasm_permissible_events_for_current_state
|
126
|
-
|
130
|
+
warn "#aasm_permissible_events_for_current_state is deprecated and will be removed in version 4.0.0; please use #aasm.permissible_events instead!"
|
127
131
|
aasm.permissible_events
|
128
132
|
end
|
129
133
|
|
130
|
-
|
134
|
+
# TODO remove this method in v4.0.0
|
131
135
|
def aasm_events_for_state(state_name)
|
132
|
-
|
136
|
+
warn "#aasm_events_for_state(state_name) is deprecated and will be removed in version 4.0.0; please use #aasm.events(state_name) instead!"
|
133
137
|
aasm.events(state_name)
|
134
138
|
end
|
135
139
|
|
136
|
-
|
140
|
+
# TODO remove this method in v4.0.0
|
137
141
|
def aasm_human_state
|
138
|
-
|
142
|
+
warn "#aasm_human_state is deprecated and will be removed in version 4.0.0; please use #aasm.human_state instead!"
|
139
143
|
aasm.human_state
|
140
144
|
end
|
141
145
|
|
142
146
|
private
|
143
147
|
|
144
148
|
def aasm_fire_event(event_name, options, *args, &block)
|
145
|
-
event = self.class.
|
149
|
+
event = self.class.aasm.events[event_name]
|
146
150
|
begin
|
147
151
|
old_state = aasm.state_object_for_name(aasm.current_state)
|
148
152
|
old_state.fire_callbacks(:exit, self)
|
data/lib/aasm/base.rb
CHANGED
@@ -25,13 +25,16 @@ module AASM
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def initial_state
|
29
|
-
|
28
|
+
def initial_state(new_initial_state=nil)
|
29
|
+
if new_initial_state
|
30
|
+
@state_machine.initial_state = new_initial_state
|
31
|
+
else
|
32
|
+
@state_machine.initial_state
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
# define a state
|
33
37
|
def state(name, options={})
|
34
|
-
# @clazz.aasm_state(name, options)
|
35
38
|
@state_machine.add_state(name, @clazz, options)
|
36
39
|
@state_machine.initial_state = name if options[:initial] || !@state_machine.initial_state
|
37
40
|
|
@@ -46,8 +49,6 @@ module AASM
|
|
46
49
|
|
47
50
|
# define an event
|
48
51
|
def event(name, options={}, &block)
|
49
|
-
# @clazz.aasm_event(name, options, &block)
|
50
|
-
|
51
52
|
@state_machine.events[name] = AASM::Event.new(name, options, &block)
|
52
53
|
|
53
54
|
# an addition over standard aasm so that, before firing an event, you can ask
|
@@ -78,5 +79,13 @@ module AASM
|
|
78
79
|
states.map { |state| state.for_select }
|
79
80
|
end
|
80
81
|
|
82
|
+
def from_states_for_state(state, options={})
|
83
|
+
if options[:transition]
|
84
|
+
events[options[:transition]].transitions_to_state(state).flatten.map(&:from).flatten
|
85
|
+
else
|
86
|
+
events.map {|k,v| v.transitions_to_state(state)}.flatten.map(&:from).flatten
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
81
90
|
end
|
82
91
|
end
|
data/lib/aasm/event.rb
CHANGED
@@ -36,9 +36,9 @@ module AASM
|
|
36
36
|
@transitions.select { |t| t.to == state }
|
37
37
|
end
|
38
38
|
|
39
|
-
#
|
39
|
+
# TODO remove this method in v4.0.0
|
40
40
|
def all_transitions
|
41
|
-
|
41
|
+
warn "Event#all_transitions is deprecated and will be removed in version 4.0.0; please use Event#transitions instead!"
|
42
42
|
transitions
|
43
43
|
end
|
44
44
|
|
@@ -54,6 +54,19 @@ module AASM
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
## DSL interface
|
58
|
+
def transitions(definitions=nil)
|
59
|
+
if definitions # define new transitions
|
60
|
+
# Create a separate transition for each from state to the given state
|
61
|
+
Array(definitions[:from]).each do |s|
|
62
|
+
@transitions << AASM::Transition.new(definitions.merge({:from => s.to_sym}))
|
63
|
+
end
|
64
|
+
# Create a transition if to is specified without from (transitions from ANY state)
|
65
|
+
@transitions << AASM::Transition.new(definitions) if @transitions.empty? && definitions[:to]
|
66
|
+
end
|
67
|
+
@transitions
|
68
|
+
end
|
69
|
+
|
57
70
|
private
|
58
71
|
|
59
72
|
def update(options = {}, &block)
|
@@ -68,7 +81,7 @@ module AASM
|
|
68
81
|
def _fire(obj, test, to_state=nil, *args)
|
69
82
|
result = test ? false : nil
|
70
83
|
if @transitions.map(&:from).any?
|
71
|
-
transitions = @transitions.select { |t| t.from == obj.
|
84
|
+
transitions = @transitions.select { |t| t.from == obj.aasm.current_state }
|
72
85
|
return result if transitions.size == 0
|
73
86
|
else
|
74
87
|
transitions = @transitions
|
@@ -106,19 +119,6 @@ module AASM
|
|
106
119
|
end
|
107
120
|
end
|
108
121
|
|
109
|
-
## DSL interface
|
110
|
-
def transitions(trans_opts=nil)
|
111
|
-
if trans_opts # define new transitions
|
112
|
-
# Create a separate transition for each from state to the given state
|
113
|
-
Array(trans_opts[:from]).each do |s|
|
114
|
-
@transitions << AASM::Transition.new(trans_opts.merge({:from => s.to_sym}))
|
115
|
-
end
|
116
|
-
# Create a transition if to is specified without from (transitions from ANY state)
|
117
|
-
@transitions << AASM::Transition.new(trans_opts) if @transitions.empty? && trans_opts[:to]
|
118
|
-
end
|
119
|
-
@transitions
|
120
|
-
end
|
121
|
-
|
122
122
|
[:after, :before, :error, :success].each do |callback_name|
|
123
123
|
define_method callback_name do |*args, &block|
|
124
124
|
options[callback_name] = Array(options[callback_name])
|
data/lib/aasm/instance_base.rb
CHANGED
@@ -15,7 +15,7 @@ module AASM
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def enter_initial_state
|
18
|
-
state_name = determine_state_name(@instance.class.
|
18
|
+
state_name = determine_state_name(@instance.class.aasm.initial_state)
|
19
19
|
state_object = state_object_for_name(state_name)
|
20
20
|
|
21
21
|
state_object.fire_callbacks(:before_enter, @instance)
|
@@ -36,6 +36,8 @@ module AASM
|
|
36
36
|
else
|
37
37
|
base.before_validation_on_create(:aasm_ensure_initial_state)
|
38
38
|
end
|
39
|
+
# ensure initial aasm state even when validations are skipped
|
40
|
+
base.before_create(:aasm_ensure_initial_state)
|
39
41
|
end
|
40
42
|
|
41
43
|
module ClassMethods
|
@@ -71,10 +73,10 @@ module AASM
|
|
71
73
|
# Writes <tt>state</tt> to the state column and persists it to the database
|
72
74
|
#
|
73
75
|
# foo = Foo.find(1)
|
74
|
-
# foo.
|
76
|
+
# foo.aasm.current_state # => :opened
|
75
77
|
# foo.close!
|
76
|
-
# foo.
|
77
|
-
# Foo.find(1).
|
78
|
+
# foo.aasm.current_state # => :closed
|
79
|
+
# Foo.find(1).aasm.current_state # => :closed
|
78
80
|
#
|
79
81
|
# NOTE: intended to be called from an event
|
80
82
|
def aasm_write_state(state)
|
@@ -97,13 +99,13 @@ module AASM
|
|
97
99
|
# Writes <tt>state</tt> to the state column, but does not persist it to the database
|
98
100
|
#
|
99
101
|
# foo = Foo.find(1)
|
100
|
-
# foo.
|
102
|
+
# foo.aasm.current_state # => :opened
|
101
103
|
# foo.close
|
102
|
-
# foo.
|
103
|
-
# Foo.find(1).
|
104
|
+
# foo.aasm.current_state # => :closed
|
105
|
+
# Foo.find(1).aasm.current_state # => :opened
|
104
106
|
# foo.save
|
105
|
-
# foo.
|
106
|
-
# Foo.find(1).
|
107
|
+
# foo.aasm.current_state # => :closed
|
108
|
+
# Foo.find(1).aasm.current_state # => :closed
|
107
109
|
#
|
108
110
|
# NOTE: intended to be called from an event
|
109
111
|
def aasm_write_state_without_persistence(state)
|