state_shifter 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,7 +8,8 @@ source "http://rubygems.org"
8
8
  group :development do
9
9
  gem 'activerecord', '~> 3.2.x'
10
10
  gem 'sqlite3'
11
- gem "rspec", "~> 2.8.0"
11
+ gem 'rspec-nc'
12
+ gem "rspec", "~> 2.9.0"
12
13
  gem "yard", "~> 0.7"
13
14
  gem 'redcarpet'
14
15
  gem "rdoc", "~> 3.12"
data/Gemfile.lock CHANGED
@@ -28,19 +28,23 @@ GEM
28
28
  rdoc (3.12)
29
29
  json (~> 1.4)
30
30
  redcarpet (2.1.1)
31
- rspec (2.8.0)
32
- rspec-core (~> 2.8.0)
33
- rspec-expectations (~> 2.8.0)
34
- rspec-mocks (~> 2.8.0)
35
- rspec-core (2.8.0)
36
- rspec-expectations (2.8.0)
37
- diff-lcs (~> 1.1.2)
38
- rspec-mocks (2.8.0)
31
+ rspec (2.9.0)
32
+ rspec-core (~> 2.9.0)
33
+ rspec-expectations (~> 2.9.0)
34
+ rspec-mocks (~> 2.9.0)
35
+ rspec-core (2.9.0)
36
+ rspec-expectations (2.9.1)
37
+ diff-lcs (~> 1.1.3)
38
+ rspec-mocks (2.9.0)
39
+ rspec-nc (0.0.4)
40
+ rspec (~> 2.9)
41
+ terminal-notifier (~> 1.4.2)
39
42
  simplecov (0.6.4)
40
43
  multi_json (~> 1.0)
41
44
  simplecov-html (~> 0.5.3)
42
45
  simplecov-html (0.5.3)
43
46
  sqlite3 (1.3.6)
47
+ terminal-notifier (1.4.2)
44
48
  tzinfo (0.3.33)
45
49
  yard (0.8.2.1)
46
50
 
@@ -53,7 +57,8 @@ DEPENDENCIES
53
57
  jeweler (~> 1.8.4)
54
58
  rdoc (~> 3.12)
55
59
  redcarpet
56
- rspec (~> 2.8.0)
60
+ rspec (~> 2.9.0)
61
+ rspec-nc
57
62
  simplecov
58
63
  sqlite3
59
64
  yard (~> 0.7)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.0
1
+ 0.8.1
data/examples/advanced.rb CHANGED
@@ -41,14 +41,14 @@ class Advanced
41
41
  end
42
42
 
43
43
  state :notify_stakeholders do
44
- on_entry :send_notification_to_stakeholders
44
+ on_entry :send_notification, :stakeholders, :organizers
45
45
  event :stakeholders_notified => :cancelled
46
46
  end
47
47
 
48
48
  state :cancelled
49
49
 
50
50
  state :notify_pending_users do
51
- on_entry :send_notification_to_pending_users
51
+ on_entry :send_notification, :pending_users
52
52
  event :pending_users_notified => :finalized
53
53
  end
54
54
 
@@ -80,6 +80,10 @@ class Advanced
80
80
 
81
81
  ###
82
82
 
83
+ def send_notification to
84
+ #
85
+ end
86
+
83
87
  def entries_deadline_reached?
84
88
  true
85
89
  end
@@ -12,22 +12,6 @@ class MalformedEvents
12
12
  event :submit => :being_reviewed
13
13
  end
14
14
 
15
- state :being_reviewed do
16
- event :accept => :accepted, :if => :cool_article?
17
- event :reject => :rejected, :if => :bad_article?
18
- end
19
-
20
- state :accepted
21
- state :rejected
22
-
23
- end
24
-
25
- def cool_article?
26
- true
27
- end
28
-
29
- def bad_article?
30
- false
31
15
  end
32
-
16
+
33
17
  end
@@ -13,85 +13,10 @@ class MalformedPersistence
13
13
  event :abort_initialized_contest => :finalized
14
14
  end
15
15
 
16
- state :running do
17
-
18
- on_entry do |previous_state, trigger_event|
19
- running_entry previous_state, trigger_event
20
- end
21
-
22
- event :abort_running_contest => :notify_stakeholders
23
- event :changed_properties
24
- event :keep_users_engaged
25
- event :deadline_reached => :notify_organizers, :if => :entries_deadline_reached?
26
- event :spots_filled => :notify_organizers, :if => :spots_filled?
27
- event :deadline_reached_without_approvals => :notify_pending_users, :if => :entries_deadline_reached_without_approvals?
28
- event :deadline_reached_without_entries => :finalized, :if => :entries_deadline_reached_without_entries?
29
- end
30
-
31
- state :notify_organizers do
32
- on_entry :send_notification_to_organizers
33
- event :organizers_notified => :awaiting_organizer_reply
34
- end
35
-
36
- state :awaiting_organizer_reply do
37
- event :organizer_confirmation_missing => :notify_stakeholders, :if => :organizer_confirmation_deadline_reached?
38
- event :keep_organizers_engaged
39
- event :organizer_confirmation_received => :notify_approved_users
40
- event :organizer_has_more_tickets => :running
41
- end
42
-
43
- state :notify_stakeholders do
44
- on_entry :send_notification_to_stakeholders
45
- event :stakeholders_notified => :cancelled
46
- end
47
-
48
- state :cancelled
49
-
50
- state :notify_pending_users do
51
- on_entry :send_notification_to_pending_users
52
- event :pending_users_notified => :finalized
53
- end
54
-
55
- state :notify_approved_users do
56
- on_entry :send_notification_to_approved_users
57
- event :approved_users_notified => :send_list_to_organizers
58
- end
59
-
60
- state :send_list_to_organizers do
61
- on_entry :send_guestlist_to_organizers
62
- event :list_sent_to_organizers => :awaiting_attendance
63
- end
64
-
65
- state :awaiting_attendance do
66
- event :remind_to_fill_in_report => :create_report_filling_requests
67
- end
68
-
69
- state :create_report_filling_requests do
70
- on_entry :send_report_filling_requests
71
- event :finalize => :finalized
72
- end
73
-
74
- state :finalized
75
-
76
- on_transition do |from,to,trigger_event, duration|
77
- benchmark from, to, trigger_event, duration
78
- end
79
16
  end
80
17
 
81
18
  persist_attribute :lollies
82
19
 
83
20
  ###
84
21
 
85
- def entries_deadline_reached?
86
- true
87
- end
88
-
89
- def running_entry previous_state, trigger_event
90
- #
91
- end
92
-
93
- def benchmark from, to, trigger_event, duration
94
- #
95
- end
96
-
97
22
  end
@@ -12,22 +12,6 @@ class MalformedStates
12
12
  event :review => :being_reviewed
13
13
  end
14
14
 
15
- state :being_reviewed do
16
- event :accept => :accepted, :if => :cool_article?
17
- event :reject => :rejected, :if => :bad_article?
18
- end
19
-
20
- state :accepted
21
- state :rejected
22
-
23
- end
24
-
25
- def cool_article?
26
- true
27
- end
28
-
29
- def bad_article?
30
- false
31
15
  end
32
-
16
+
33
17
  end
@@ -4,18 +4,22 @@ module StateShifter
4
4
 
5
5
  class ::StateShifter::Definition::StatePersistenceAttributeNotPresent < RuntimeError; end
6
6
 
7
- def get_current_state
7
+ def check_attr_presence
8
8
  raise StatePersistenceAttributeNotPresent unless self.attribute_names.include? self.class.persist_attr_name.to_s
9
+ end
10
+
11
+ def get_current_state
12
+ check_attr_presence
9
13
  read_attribute self.class.persist_attr_name
10
14
  end
11
15
 
12
16
  def set_current_state value
13
- raise StatePersistenceAttributeNotPresent unless self.attribute_names.include? self.class.persist_attr_name.to_s
17
+ check_attr_presence
14
18
  update_attribute self.class.persist_attr_name, value
15
19
  end
16
20
 
17
21
  def write_initial_state
18
- raise StatePersistenceAttributeNotPresent unless self.attribute_names.include? self.class.persist_attr_name.to_s
22
+ raise StatePersistenceAttributeNotPresent unless self.attribute_names.include?(self.class.persist_attr_name.to_s)
19
23
  write_attribute self.class.persist_attr_name, self.class.state_machine_definition.initial_state.name.to_sym
20
24
  end
21
25
 
@@ -43,7 +43,7 @@ module StateShifter
43
43
 
44
44
  this_event = state_machine_definition.get(:event, event_name)
45
45
 
46
- current_state == this_event.from && !check_guards(event_name).is_a?(Array)
46
+ current_state.to_sym == this_event.from.to_sym && !check_guards(event_name).is_a?(Array)
47
47
 
48
48
  end
49
49
 
@@ -51,11 +51,12 @@ module StateShifter
51
51
  @current_state.events[event_name.to_sym] = this_event
52
52
  end
53
53
 
54
- def on_entry event_name=nil, &proc_contents
54
+ def on_entry event_name=nil, *event_args, &proc_contents
55
55
  if event_name.nil?
56
56
  @current_state.entry_callback = proc_contents
57
57
  else
58
58
  @current_state.entry_callback = event_name
59
+ @current_state.entry_callback_args = ( event_args.size == 1 ? event_args.first : event_args )
59
60
  end
60
61
  end
61
62
 
@@ -59,8 +59,9 @@ module StateShifter
59
59
  proc_or_method_name = current_state_def.entry_callback
60
60
 
61
61
  if proc_or_method_name.is_a?(Symbol)
62
+ method_args = current_state_def.entry_callback_args
62
63
  begin
63
- self.send proc_or_method_name
64
+ self.send proc_or_method_name, method_args
64
65
  rescue NoMethodError
65
66
  raise ::StateShifter::CallbackMethodNotDefined, proc_or_method_name
66
67
  end
@@ -3,12 +3,13 @@ module StateShifter
3
3
  class State
4
4
 
5
5
  attr_reader :name, :events
6
- attr_accessor :entry_callback
6
+ attr_accessor :entry_callback, :entry_callback_args
7
7
 
8
8
  def initialize name
9
9
  @name = name
10
10
  @events = {}
11
11
  @entry_callback = nil
12
+ @entry_callback_args = []
12
13
  end
13
14
 
14
15
  def has_entry_callback?
@@ -159,6 +159,23 @@ describe 'Advanced state machine functionality' do
159
159
  @advanced.deadline_reached!
160
160
  end
161
161
 
162
+ it 'state on_entry callbacks with an argument should work' do
163
+ @advanced.forced_start
164
+ @advanced.stub!(:entries_deadline_reached_without_approvals?).and_return(true)
165
+
166
+ # method name only with args
167
+ @advanced.should_receive(:send_notification).with(:pending_users)
168
+ @advanced.deadline_reached_without_approvals!
169
+ end
170
+
171
+ it 'state on_entry callbacks with an array of arguments should work' do
172
+ @advanced.forced_start
173
+
174
+ # method name only with args
175
+ @advanced.should_receive(:send_notification).with([:stakeholders, :organizers])
176
+ @advanced.abort_running_contest!
177
+ end
178
+
162
179
  it 'the on_transition callback should work' do
163
180
  @advanced.should_receive(:benchmark).with(:initialized, :running, :forced_start!, an_instance_of(Float)).and_return(nil)
164
181
  @advanced.forced_start!
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "state_shifter"
8
- s.version = "0.8.0"
8
+ s.version = "0.8.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bruno Antunes"]
12
- s.date = "2012-08-27"
12
+ s.date = "2012-08-28"
13
13
  s.description = "state_shifter is a gem that adds state machine behavior to a class"
14
14
  s.email = "sardaukar.siet@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".rspec",
22
21
  "Gemfile",
23
22
  "Gemfile.lock",
24
23
  "LICENSE.txt",
@@ -57,7 +56,8 @@ Gem::Specification.new do |s|
57
56
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
57
  s.add_development_dependency(%q<activerecord>, ["~> 3.2.x"])
59
58
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
60
- s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
59
+ s.add_development_dependency(%q<rspec-nc>, [">= 0"])
60
+ s.add_development_dependency(%q<rspec>, ["~> 2.9.0"])
61
61
  s.add_development_dependency(%q<yard>, ["~> 0.7"])
62
62
  s.add_development_dependency(%q<redcarpet>, [">= 0"])
63
63
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
@@ -67,7 +67,8 @@ Gem::Specification.new do |s|
67
67
  else
68
68
  s.add_dependency(%q<activerecord>, ["~> 3.2.x"])
69
69
  s.add_dependency(%q<sqlite3>, [">= 0"])
70
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
70
+ s.add_dependency(%q<rspec-nc>, [">= 0"])
71
+ s.add_dependency(%q<rspec>, ["~> 2.9.0"])
71
72
  s.add_dependency(%q<yard>, ["~> 0.7"])
72
73
  s.add_dependency(%q<redcarpet>, [">= 0"])
73
74
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
@@ -78,7 +79,8 @@ Gem::Specification.new do |s|
78
79
  else
79
80
  s.add_dependency(%q<activerecord>, ["~> 3.2.x"])
80
81
  s.add_dependency(%q<sqlite3>, [">= 0"])
81
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
82
+ s.add_dependency(%q<rspec-nc>, [">= 0"])
83
+ s.add_dependency(%q<rspec>, ["~> 2.9.0"])
82
84
  s.add_dependency(%q<yard>, ["~> 0.7"])
83
85
  s.add_dependency(%q<redcarpet>, [">= 0"])
84
86
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: state_shifter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-27 00:00:00.000000000 Z
12
+ date: 2012-08-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-nc
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: rspec
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +66,7 @@ dependencies:
50
66
  requirements:
51
67
  - - ~>
52
68
  - !ruby/object:Gem::Version
53
- version: 2.8.0
69
+ version: 2.9.0
54
70
  type: :development
55
71
  prerelease: false
56
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +74,7 @@ dependencies:
58
74
  requirements:
59
75
  - - ~>
60
76
  - !ruby/object:Gem::Version
61
- version: 2.8.0
77
+ version: 2.9.0
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: yard
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -164,7 +180,6 @@ extra_rdoc_files:
164
180
  - README.md
165
181
  files:
166
182
  - .document
167
- - .rspec
168
183
  - Gemfile
169
184
  - Gemfile.lock
170
185
  - LICENSE.txt
@@ -205,7 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
220
  version: '0'
206
221
  segments:
207
222
  - 0
208
- hash: 3920605756095371187
223
+ hash: -2251984499056087548
209
224
  required_rubygems_version: !ruby/object:Gem::Requirement
210
225
  none: false
211
226
  requirements:
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color