hsume2-state_machine 1.0.3 → 1.0.4
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/Rakefile +5 -4
- data/lib/state_machine/machine.rb +12 -1
- data/test/unit/machine_test.rb +78 -0
- metadata +8 -8
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'rake/gempackagetask'
|
|
6
6
|
|
7
7
|
spec = Gem::Specification.new do |s|
|
8
8
|
s.name = 'hsume2-state_machine'
|
9
|
-
s.version = '1.0.
|
9
|
+
s.version = '1.0.4'
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.summary = 'Adds support for creating state machines for attributes on any Ruby class'
|
12
12
|
s.description = s.summary
|
@@ -16,9 +16,10 @@ spec = Gem::Specification.new do |s|
|
|
16
16
|
s.has_rdoc = true
|
17
17
|
s.test_files = Dir['test/**/*_test.rb']
|
18
18
|
|
19
|
-
s.author = '
|
20
|
-
s.email = '
|
21
|
-
s.homepage = 'http://
|
19
|
+
s.author = 'Aaron Pfeifer'
|
20
|
+
s.email = 'aaron@pluginaweek.org'
|
21
|
+
s.homepage = 'http://www.pluginaweek.org'
|
22
|
+
s.rubyforge_project = 'pluginaweek'
|
22
23
|
end
|
23
24
|
|
24
25
|
desc 'Default: run all tests.'
|
@@ -452,12 +452,13 @@ module StateMachine
|
|
452
452
|
@use_transactions = options[:use_transactions]
|
453
453
|
@initialize_state = options[:initialize]
|
454
454
|
@syntax = options[:syntax]
|
455
|
+
@plural = options[:plural]
|
455
456
|
self.owner_class = owner_class
|
456
457
|
self.initial_state = options[:initial] unless owner_class.state_machines.any? {|name, machine| machine.attribute == attribute && machine != self}
|
457
458
|
|
458
459
|
# Define class integration
|
459
460
|
define_helpers
|
460
|
-
define_scopes(
|
461
|
+
define_scopes(@plural)
|
461
462
|
after_initialize
|
462
463
|
|
463
464
|
# Evaluate DSL
|
@@ -477,6 +478,16 @@ module StateMachine
|
|
477
478
|
@callbacks = {:before => @callbacks[:before].dup, :after => @callbacks[:after].dup, :failure => @callbacks[:failure].dup}
|
478
479
|
end
|
479
480
|
|
481
|
+
def duplicate_to(clazz)
|
482
|
+
new_copy = self.clone
|
483
|
+
new_copy.owner_class = clazz
|
484
|
+
new_copy.define_helpers
|
485
|
+
new_copy.define_scopes(@plural)
|
486
|
+
new_copy.events.each { |event| event.send(:add_actions) }
|
487
|
+
new_copy.states.each { |state| state.send(:add_predicate) }
|
488
|
+
new_copy
|
489
|
+
end
|
490
|
+
|
480
491
|
def evaluate_with_syntax(syntax, &block)
|
481
492
|
if syntax == :alternate
|
482
493
|
instance_eval(&alternate_syntax_eval(&block))
|
data/test/unit/machine_test.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
2
|
|
3
|
+
class Sample
|
4
|
+
|
5
|
+
end
|
6
|
+
|
3
7
|
class MachineByDefaultTest < Test::Unit::TestCase
|
4
8
|
def setup
|
5
9
|
@klass = Class.new
|
@@ -1005,6 +1009,80 @@ class MachineAfterBeingCopiedTest < Test::Unit::TestCase
|
|
1005
1009
|
end
|
1006
1010
|
end
|
1007
1011
|
|
1012
|
+
class MachineAfterBeingDuplicatedTest < Test::Unit::TestCase
|
1013
|
+
def setup
|
1014
|
+
@machine = StateMachine::Machine.new(Class.new, :state, :initial => :parked)
|
1015
|
+
@machine.event(:ignite) {}
|
1016
|
+
@machine.before_transition(lambda {})
|
1017
|
+
@machine.after_transition(lambda {})
|
1018
|
+
@machine.around_transition(lambda {})
|
1019
|
+
@machine.after_failure(lambda {})
|
1020
|
+
|
1021
|
+
@new_class = Class.new
|
1022
|
+
|
1023
|
+
@copied_machine = @machine.duplicate_to(@new_class)
|
1024
|
+
end
|
1025
|
+
|
1026
|
+
def test_should_copy_each_event_and_add_actions
|
1027
|
+
@new_instance = @new_class.new
|
1028
|
+
assert @new_instance.respond_to?(:ignite)
|
1029
|
+
assert @new_instance.respond_to?(:ignite!)
|
1030
|
+
end
|
1031
|
+
|
1032
|
+
def test_should_copy_each_event_and_add_predicate
|
1033
|
+
@new_instance = @new_class.new
|
1034
|
+
assert @new_instance.respond_to?(:parked?)
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
def test_should_not_have_the_same_collection_of_states
|
1038
|
+
assert_not_same @copied_machine.states, @machine.states
|
1039
|
+
end
|
1040
|
+
|
1041
|
+
def test_should_copy_each_state
|
1042
|
+
assert_not_same @copied_machine.states[:parked], @machine.states[:parked]
|
1043
|
+
end
|
1044
|
+
|
1045
|
+
def test_should_update_machine_for_each_state
|
1046
|
+
assert_equal @copied_machine, @copied_machine.states[:parked].machine
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
def test_should_not_update_machine_for_original_state
|
1050
|
+
assert_equal @machine, @machine.states[:parked].machine
|
1051
|
+
end
|
1052
|
+
|
1053
|
+
def test_should_not_have_the_same_collection_of_events
|
1054
|
+
assert_not_same @copied_machine.events, @machine.events
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
def test_should_copy_each_event
|
1058
|
+
assert_not_same @copied_machine.events[:ignite], @machine.events[:ignite]
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
def test_should_update_machine_for_each_event
|
1062
|
+
assert_equal @copied_machine, @copied_machine.events[:ignite].machine
|
1063
|
+
end
|
1064
|
+
|
1065
|
+
def test_should_not_update_machine_for_original_event
|
1066
|
+
assert_equal @machine, @machine.events[:ignite].machine
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
def test_should_not_have_the_same_callbacks
|
1070
|
+
assert_not_same @copied_machine.callbacks, @machine.callbacks
|
1071
|
+
end
|
1072
|
+
|
1073
|
+
def test_should_not_have_the_same_before_callbacks
|
1074
|
+
assert_not_same @copied_machine.callbacks[:before], @machine.callbacks[:before]
|
1075
|
+
end
|
1076
|
+
|
1077
|
+
def test_should_not_have_the_same_after_callbacks
|
1078
|
+
assert_not_same @copied_machine.callbacks[:after], @machine.callbacks[:after]
|
1079
|
+
end
|
1080
|
+
|
1081
|
+
def test_should_not_have_the_same_failure_callbacks
|
1082
|
+
assert_not_same @copied_machine.callbacks[:failure], @machine.callbacks[:failure]
|
1083
|
+
end
|
1084
|
+
end
|
1085
|
+
|
1008
1086
|
class MachineAfterChangingOwnerClassTest < Test::Unit::TestCase
|
1009
1087
|
def setup
|
1010
1088
|
@original_class = Class.new
|
metadata
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hsume2-state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 4
|
10
|
+
version: 1.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
-
|
13
|
+
- Aaron Pfeifer
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-08-01 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
22
22
|
description: Adds support for creating state machines for attributes on any Ruby class
|
23
|
-
email:
|
23
|
+
email: aaron@pluginaweek.org
|
24
24
|
executables: []
|
25
25
|
|
26
26
|
extensions: []
|
@@ -138,7 +138,7 @@ files:
|
|
138
138
|
- Rakefile
|
139
139
|
- README.rdoc
|
140
140
|
has_rdoc: true
|
141
|
-
homepage: http://
|
141
|
+
homepage: http://www.pluginaweek.org
|
142
142
|
licenses: []
|
143
143
|
|
144
144
|
post_install_message:
|
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
166
|
version: "0"
|
167
167
|
requirements: []
|
168
168
|
|
169
|
-
rubyforge_project:
|
169
|
+
rubyforge_project: pluginaweek
|
170
170
|
rubygems_version: 1.5.3
|
171
171
|
signing_key:
|
172
172
|
specification_version: 3
|