aasm 3.0.8 → 3.0.9

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.
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ # - jruby-18mode # JRuby in 1.8 mode
7
+ # - jruby-19mode # JRuby in 1.9 mode
8
+ - rbx-18mode
9
+ - rbx-19mode
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 3.0.9
4
+
5
+ * guard checks (e.g. may_edit?) now support guard parameters as well
6
+
3
7
  ## 3.0.8
4
8
 
5
9
  * fixed issue with generating docs using yard
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # AASM - Ruby state machines #
1
+ # AASM - Ruby state machines [![Build Status](https://secure.travis-ci.org/aasm/aasm.png)](http://travis-ci.org/aasm/aasm)
2
2
 
3
3
  This package contains AASM, a library for adding finite state machines to Ruby classes.
4
4
 
@@ -160,7 +160,7 @@ This model can change AASM states which are stored into the database, even if th
160
160
 
161
161
  ## Changelog ##
162
162
 
163
- Look at the [CHANGELOG](https://github.com/rubyist/aasm/blob/master/CHANGELOG.md) for details.
163
+ Look at the [CHANGELOG](https://github.com/aasm/aasm/blob/master/CHANGELOG.md) for details.
164
164
 
165
165
 
166
166
  ## Authors ##
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.name = "aasm"
7
7
  s.version = AASM::VERSION
8
8
  s.authors = ["Scott Barron", "Scott Petersen", "Travis Tilley", "Thorsten Boettger"]
9
- s.email = %q{scott@elitists.net, ttilley@gmail.com}
10
- s.homepage = %q{http://rubyist.github.com/aasm/}
9
+ s.email = %q{scott@elitists.net, ttilley@gmail.com, aasm@mt7.de}
10
+ s.homepage = %q{https://github.com/aasm/aasm}
11
11
  s.summary = %q{State machine mixin for Ruby objects}
12
12
  s.description = %q{AASM is a continuation of the acts as state machine rails plugin, built for plain Ruby objects.}
13
13
  s.date = Time.now
@@ -3,11 +3,11 @@ module AASM
3
3
  def self.[](clazz)
4
4
  (@machines ||= {})[clazz.to_s]
5
5
  end
6
-
6
+
7
7
  def self.[]=(clazz, machine)
8
8
  (@machines ||= {})[clazz.to_s] = machine
9
9
  end
10
-
10
+
11
11
  attr_accessor :states, :events, :initial_state, :config
12
12
  attr_reader :name
13
13
 
@@ -19,11 +19,10 @@ module AASM
19
19
  @config = OpenStruct.new
20
20
  end
21
21
 
22
- def clone
23
- klone = super
24
- klone.states = states.clone
25
- klone.events = events.clone
26
- klone
22
+ def initialize_copy(orig)
23
+ super
24
+ @states = @states.dup
25
+ @events = @events.dup
27
26
  end
28
27
 
29
28
  def create_state(name, options)
@@ -12,14 +12,14 @@ module AASM
12
12
  # a neutered version of fire - it doesn't actually fire the event, it just
13
13
  # executes the transition guards to determine if a transition is even
14
14
  # an option given current conditions.
15
- def may_fire?(obj, to_state=nil)
15
+ def may_fire?(obj, to_state=nil, *args)
16
16
  transitions = @transitions.select { |t| t.from == obj.aasm_current_state }
17
17
  return false if transitions.size == 0
18
-
18
+
19
19
  result = false
20
20
  transitions.each do |transition|
21
21
  next if to_state and !Array(transition.to).include?(to_state)
22
- if transition.perform(obj)
22
+ if transition.perform(obj, *args)
23
23
  result = true
24
24
  break
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module AASM
2
- VERSION = "3.0.8"
2
+ VERSION = "3.0.9"
3
3
  end
@@ -1,4 +1,4 @@
1
- Dir[File.dirname(__FILE__) + "/../models/*.rb"].each { |f| require File.expand_path(f) }
1
+ Dir[File.dirname(__FILE__) + "/../models/*.rb"].sort.each { |f| require File.expand_path(f) }
2
2
 
3
3
  class Foo
4
4
  include AASM
@@ -87,6 +87,7 @@ class AuthMachine
87
87
  state :active, :enter => :do_activate
88
88
  state :suspended
89
89
  state :deleted, :enter => :do_delete, :exit => :do_undelete
90
+ state :waiting
90
91
 
91
92
  event :register do
92
93
  transitions :from => :passive, :to => :pending, :guard => Proc.new {|u| u.can_register? }
@@ -114,6 +115,10 @@ class AuthMachine
114
115
  transitions :from => :suspended, :to => :pending, :guard => Proc.new {|u| u.has_activation_code? }
115
116
  transitions :from => :suspended, :to => :passive
116
117
  end
118
+
119
+ event :wait do
120
+ transitions :from => :suspended, :to => :waiting, :guard => :if_polite?
121
+ end
117
122
  end
118
123
 
119
124
  def initialize
@@ -150,6 +155,10 @@ class AuthMachine
150
155
  def has_activation_code?
151
156
  !!@activation_code
152
157
  end
158
+
159
+ def if_polite?(phrase = nil)
160
+ phrase == :please
161
+ end
153
162
  end
154
163
 
155
164
  class ThisNameBetterNotBeInUse
@@ -28,6 +28,22 @@ describe 'AuthMachine when being unsuspended' do
28
28
  @auth.suspend!
29
29
  @auth.may_unsuspend?(:active).should_not be_true
30
30
  end
31
+
32
+ it 'should be able to be unsuspended into active if polite' do
33
+ @auth = AuthMachine.new
34
+ @auth.suspend!
35
+ @auth.may_wait?(:waiting, :please).should be_true
36
+ @auth.wait!(nil, :please)
37
+ end
38
+
39
+ it 'should not be able to be unsuspended into active if not polite' do
40
+ @auth = AuthMachine.new
41
+ @auth.suspend!
42
+ @auth.may_wait?(:waiting).should_not be_true
43
+ @auth.may_wait?(:waiting, :rude).should_not be_true
44
+ lambda {@auth.wait!(nil, :rude)}.should raise_error(AASM::InvalidTransition)
45
+ lambda {@auth.wait!}.should raise_error(AASM::InvalidTransition)
46
+ end
31
47
 
32
48
  it 'should not be able to be unpassified' do
33
49
  @auth = AuthMachine.new
@@ -36,6 +52,7 @@ describe 'AuthMachine when being unsuspended' do
36
52
  @auth.unsuspend!
37
53
 
38
54
  @auth.may_unpassify?.should_not be_true
55
+ lambda {@auth.unpassify!}.should raise_error(AASM::InvalidTransition)
39
56
  end
40
57
 
41
58
  it 'should be active if previously activated' 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.8
4
+ version: 3.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-06-17 00:00:00.000000000 Z
15
+ date: 2012-09-26 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activerecord
19
- requirement: &70162552389420 !ruby/object:Gem::Requirement
19
+ requirement: &70261337622160 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: '0'
25
25
  type: :development
26
26
  prerelease: false
27
- version_requirements: *70162552389420
27
+ version_requirements: *70261337622160
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
- requirement: &70162552388580 !ruby/object:Gem::Requirement
30
+ requirement: &70261337621740 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
- version_requirements: *70162552388580
38
+ version_requirements: *70261337621740
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: sdoc
41
- requirement: &70162552387940 !ruby/object:Gem::Requirement
41
+ requirement: &70261337621320 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :development
48
48
  prerelease: false
49
- version_requirements: *70162552387940
49
+ version_requirements: *70261337621320
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rspec
52
- requirement: &70162552386780 !ruby/object:Gem::Requirement
52
+ requirement: &70261337620820 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ~>
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '2.0'
58
58
  type: :development
59
59
  prerelease: false
60
- version_requirements: *70162552386780
60
+ version_requirements: *70261337620820
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rr
63
- requirement: &70162552386120 !ruby/object:Gem::Requirement
63
+ requirement: &70261337620400 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70162552386120
71
+ version_requirements: *70261337620400
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: shoulda
74
- requirement: &70162552385340 !ruby/object:Gem::Requirement
74
+ requirement: &70261337651400 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70162552385340
82
+ version_requirements: *70261337651400
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: sqlite3
85
- requirement: &70162552384260 !ruby/object:Gem::Requirement
85
+ requirement: &70261337650980 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *70162552384260
93
+ version_requirements: *70261337650980
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: minitest
96
- requirement: &70162552383380 !ruby/object:Gem::Requirement
96
+ requirement: &70261337650560 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,10 +101,10 @@ dependencies:
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *70162552383380
104
+ version_requirements: *70261337650560
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: ruby-debug-completion
107
- requirement: &70162552395060 !ruby/object:Gem::Requirement
107
+ requirement: &70261337650140 !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
110
110
  - - ! '>='
@@ -112,16 +112,17 @@ dependencies:
112
112
  version: '0'
113
113
  type: :development
114
114
  prerelease: false
115
- version_requirements: *70162552395060
115
+ version_requirements: *70261337650140
116
116
  description: AASM is a continuation of the acts as state machine rails plugin, built
117
117
  for plain Ruby objects.
118
- email: scott@elitists.net, ttilley@gmail.com
118
+ email: scott@elitists.net, ttilley@gmail.com, aasm@mt7.de
119
119
  executables: []
120
120
  extensions: []
121
121
  extra_rdoc_files: []
122
122
  files:
123
123
  - .document
124
124
  - .gitignore
125
+ - .travis.yml
125
126
  - CHANGELOG.md
126
127
  - Gemfile
127
128
  - LICENSE
@@ -166,7 +167,7 @@ files:
166
167
  - spec/unit/new_dsl_spec.rb
167
168
  - spec/unit/state_spec.rb
168
169
  - spec/unit/state_transition_spec.rb
169
- homepage: http://rubyist.github.com/aasm/
170
+ homepage: https://github.com/aasm/aasm
170
171
  licenses:
171
172
  - MIT
172
173
  post_install_message:
@@ -187,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
188
  version: '0'
188
189
  requirements: []
189
190
  rubyforge_project:
190
- rubygems_version: 1.8.11
191
+ rubygems_version: 1.8.15
191
192
  signing_key:
192
193
  specification_version: 3
193
194
  summary: State machine mixin for Ruby objects