simplificator-fsm 0.3.8 → 0.3.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.
- data/Rakefile +5 -0
- data/VERSION.yml +3 -2
- data/fsm.gemspec +65 -0
- data/lib/fsm/builder.rb +18 -12
- data/lib/fsm/executable.rb +6 -6
- data/simplificator-fsm.gemspec +63 -0
- data/test/test_helper_ar.rb +2 -2
- metadata +12 -20
- data/.gitignore +0 -8
data/Rakefile
CHANGED
data/VERSION.yml
CHANGED
data/fsm.gemspec
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
Gem::Specification.new do |s|
|
3
|
+
s.name = %q{fsm}
|
4
|
+
s.version = "0.3.5"
|
5
|
+
|
6
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
7
|
+
s.authors = ["simplificator"]
|
8
|
+
s.date = %q{2009-06-30}
|
9
|
+
s.email = %q{info@simplificator.com}
|
10
|
+
s.extra_rdoc_files = [
|
11
|
+
"LICENSE",
|
12
|
+
"README.markdown"
|
13
|
+
]
|
14
|
+
s.files = [
|
15
|
+
"LICENSE",
|
16
|
+
"README.markdown",
|
17
|
+
"Rakefile",
|
18
|
+
"VERSION.yml",
|
19
|
+
"lib/fsm.rb",
|
20
|
+
"lib/fsm/builder.rb",
|
21
|
+
"lib/fsm/errors.rb",
|
22
|
+
"lib/fsm/executable.rb",
|
23
|
+
"lib/fsm/machine.rb",
|
24
|
+
"lib/fsm/options.rb",
|
25
|
+
"lib/fsm/state.rb",
|
26
|
+
"lib/fsm/state_attribute_interceptor.rb",
|
27
|
+
"lib/fsm/transition.rb",
|
28
|
+
"test/ar_test.rb",
|
29
|
+
"test/executable_test.rb",
|
30
|
+
"test/invoice_sample_test.rb",
|
31
|
+
"test/options_test.rb",
|
32
|
+
"test/state_test.rb",
|
33
|
+
"test/test_helper.rb",
|
34
|
+
"test/test_helper_ar.rb",
|
35
|
+
"test/transition_test.rb",
|
36
|
+
"test/water_sample_test.rb"
|
37
|
+
]
|
38
|
+
s.has_rdoc = true
|
39
|
+
s.homepage = %q{http://github.com/simplificator/fsm}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubygems_version = %q{1.3.2}
|
43
|
+
s.summary = %q{A simple finite state machine (FSM) gem.}
|
44
|
+
s.test_files = [
|
45
|
+
"test/ar_test.rb",
|
46
|
+
"test/executable_test.rb",
|
47
|
+
"test/invoice_sample_test.rb",
|
48
|
+
"test/options_test.rb",
|
49
|
+
"test/state_test.rb",
|
50
|
+
"test/test_helper.rb",
|
51
|
+
"test/test_helper_ar.rb",
|
52
|
+
"test/transition_test.rb",
|
53
|
+
"test/water_sample_test.rb"
|
54
|
+
]
|
55
|
+
|
56
|
+
if s.respond_to? :specification_version then
|
57
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
58
|
+
s.specification_version = 3
|
59
|
+
|
60
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
61
|
+
else
|
62
|
+
end
|
63
|
+
else
|
64
|
+
end
|
65
|
+
end
|
data/lib/fsm/builder.rb
CHANGED
@@ -1,18 +1,24 @@
|
|
1
1
|
module FSM
|
2
2
|
# Builder exposes 'only' (well there are some other methods exposed) the methods that are required to build the configuration
|
3
3
|
class Builder
|
4
|
-
|
4
|
+
|
5
5
|
# Blank Slate
|
6
|
-
|
7
|
-
|
6
|
+
if RUBY_VERSION < "1.9"
|
7
|
+
instance_methods.each do |m|
|
8
|
+
undef_method m unless m == "object_id" || m == "__send__" || m == "__id__" || m == "instance_eval"
|
9
|
+
end
|
10
|
+
else
|
11
|
+
instance_methods.each do |m|
|
12
|
+
undef_method m unless m == :object_id || m == :__send__ || m == :__id__ || m == :instance_eval
|
13
|
+
end
|
8
14
|
end
|
9
|
-
|
15
|
+
|
10
16
|
# Create a new Builder which creates a Machine for the target_class
|
11
17
|
def initialize(target_class)
|
12
18
|
@target_class = target_class
|
13
19
|
@machine = Machine.new(target_class)
|
14
20
|
end
|
15
|
-
|
21
|
+
|
16
22
|
def process(&block)
|
17
23
|
raise ArgumentError.new('Block expected') unless block_given?
|
18
24
|
self.instance_eval(&block)
|
@@ -20,37 +26,37 @@ module FSM
|
|
20
26
|
@machine.build_state_check_methods
|
21
27
|
@machine
|
22
28
|
end
|
23
|
-
|
29
|
+
|
24
30
|
private
|
25
31
|
# Add a transition
|
26
|
-
# * name of the transition
|
32
|
+
# * name of the transition
|
27
33
|
# * from_name: name of the source state (symbol)
|
28
34
|
# * to_name: name of the target state (symbol)
|
29
35
|
# * options
|
30
|
-
#
|
36
|
+
#
|
31
37
|
def transition(name, from_names, to_name, options = {})
|
32
38
|
Array(from_names).each do |from_name|
|
33
39
|
@machine.transition(name, from_name, to_name, options)
|
34
40
|
end
|
35
41
|
nil # do not expose FSM details
|
36
42
|
end
|
37
|
-
|
43
|
+
|
38
44
|
def state_attribute(name)
|
39
45
|
raise ArgumentError.new('Invalid attribute name') if name == nil
|
40
46
|
@machine.current_state_attribute_name = name
|
41
47
|
nil # do not expose FSM details
|
42
48
|
end
|
43
|
-
|
49
|
+
|
44
50
|
def initial(name)
|
45
51
|
@machine.initial_state_name = name
|
46
52
|
nil # do not expose FSM details
|
47
53
|
end
|
48
|
-
|
54
|
+
|
49
55
|
def state(name, options = {})
|
50
56
|
@machine.state(name, options)
|
51
57
|
nil # do not expose FSM details
|
52
58
|
end
|
53
|
-
|
59
|
+
|
54
60
|
def states(*names)
|
55
61
|
names.each do |name|
|
56
62
|
state(name)
|
data/lib/fsm/executable.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
module FSM
|
2
2
|
#
|
3
3
|
# Execute an action specified by either String, Sylbol or Proc.
|
4
|
-
# Symbol and String represent methods which are called on the target object, Proc will get executed
|
4
|
+
# Symbol and String represent methods which are called on the target object, Proc will get executed
|
5
5
|
# and receives at least the target as parameter. If others parameters are passed then they'll get forwarded as well.
|
6
6
|
class Executable
|
7
7
|
# Create a new Executable
|
8
|
-
# if args is true, then arguments are passed on to the target method or the Proc, if false nothing
|
8
|
+
# if args is true, then arguments are passed on to the target method or the Proc, if false nothing
|
9
9
|
# will get passed
|
10
10
|
def initialize(thing)
|
11
11
|
raise ArgumentError.new("Unknown thing #{thing}") unless thing
|
12
12
|
@thing = thing
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
# execute this executable on the given target
|
16
16
|
def execute(target, *args)
|
17
17
|
case @thing
|
18
|
-
when String, Symbol
|
18
|
+
when String, Symbol
|
19
19
|
if (args.length > 0)
|
20
20
|
target.send(@thing, *args)
|
21
21
|
else
|
22
22
|
target.send(@thing)
|
23
23
|
end
|
24
|
-
when Proc
|
25
|
-
if (args.length > 0)
|
24
|
+
when Proc
|
25
|
+
if (args.length > 0)
|
26
26
|
@thing.call(target, *args)
|
27
27
|
else
|
28
28
|
@thing.call(target)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{simplificator-fsm}
|
8
|
+
s.version = "0.3.9"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["simplificator"]
|
12
|
+
s.date = %q{2011-10-24}
|
13
|
+
s.email = %q{info@simplificator.com}
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
"LICENSE",
|
16
|
+
"README.markdown"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".document",
|
20
|
+
"LICENSE",
|
21
|
+
"README.markdown",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION.yml",
|
24
|
+
"fsm.gemspec",
|
25
|
+
"lib/fsm.rb",
|
26
|
+
"lib/fsm/builder.rb",
|
27
|
+
"lib/fsm/dot.rb",
|
28
|
+
"lib/fsm/errors.rb",
|
29
|
+
"lib/fsm/executable.rb",
|
30
|
+
"lib/fsm/machine.rb",
|
31
|
+
"lib/fsm/options.rb",
|
32
|
+
"lib/fsm/state.rb",
|
33
|
+
"lib/fsm/state_attribute_interceptor.rb",
|
34
|
+
"lib/fsm/transition.rb",
|
35
|
+
"samples/ticket/ticket.png",
|
36
|
+
"samples/ticket/ticket.ps",
|
37
|
+
"samples/ticket/ticket_sample.rb",
|
38
|
+
"simplificator-fsm.gemspec",
|
39
|
+
"test/ar_test.rb",
|
40
|
+
"test/executable_test.rb",
|
41
|
+
"test/invoice_sample_test.rb",
|
42
|
+
"test/options_test.rb",
|
43
|
+
"test/state_test.rb",
|
44
|
+
"test/test_helper.rb",
|
45
|
+
"test/test_helper_ar.rb",
|
46
|
+
"test/transition_test.rb",
|
47
|
+
"test/water_sample_test.rb"
|
48
|
+
]
|
49
|
+
s.homepage = %q{http://github.com/simplificator/fsm}
|
50
|
+
s.require_paths = ["lib"]
|
51
|
+
s.rubygems_version = %q{1.6.2}
|
52
|
+
s.summary = %q{A simple finite state machine (FSM) gem.}
|
53
|
+
|
54
|
+
if s.respond_to? :specification_version then
|
55
|
+
s.specification_version = 3
|
56
|
+
|
57
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
58
|
+
else
|
59
|
+
end
|
60
|
+
else
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
data/test/test_helper_ar.rb
CHANGED
@@ -27,5 +27,5 @@ class Order < ActiveRecord::Base
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
31
|
-
ActiveRecord::Base.logger.level = Logger::DEBUG # change to DEBUG if you want to see something :-)
|
30
|
+
# ActiveRecord::Base.logger = Logger.new(STDOUT)
|
31
|
+
# ActiveRecord::Base.logger.level = Logger::DEBUG # change to DEBUG if you want to see something :-)
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplificator-fsm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 0.3.9
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- simplificator
|
@@ -9,8 +10,7 @@ autorequire:
|
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
13
|
+
date: 2011-10-24 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description:
|
@@ -24,11 +24,11 @@ extra_rdoc_files:
|
|
24
24
|
- README.markdown
|
25
25
|
files:
|
26
26
|
- .document
|
27
|
-
- .gitignore
|
28
27
|
- LICENSE
|
29
28
|
- README.markdown
|
30
29
|
- Rakefile
|
31
30
|
- VERSION.yml
|
31
|
+
- fsm.gemspec
|
32
32
|
- lib/fsm.rb
|
33
33
|
- lib/fsm/builder.rb
|
34
34
|
- lib/fsm/dot.rb
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- samples/ticket/ticket.png
|
43
43
|
- samples/ticket/ticket.ps
|
44
44
|
- samples/ticket/ticket_sample.rb
|
45
|
+
- simplificator-fsm.gemspec
|
45
46
|
- test/ar_test.rb
|
46
47
|
- test/executable_test.rb
|
47
48
|
- test/invoice_sample_test.rb
|
@@ -51,41 +52,32 @@ files:
|
|
51
52
|
- test/test_helper_ar.rb
|
52
53
|
- test/transition_test.rb
|
53
54
|
- test/water_sample_test.rb
|
54
|
-
has_rdoc: true
|
55
55
|
homepage: http://github.com/simplificator/fsm
|
56
56
|
licenses: []
|
57
57
|
|
58
58
|
post_install_message:
|
59
|
-
rdoc_options:
|
60
|
-
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
61
|
require_paths:
|
62
62
|
- lib
|
63
63
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
64
65
|
requirements:
|
65
66
|
- - ">="
|
66
67
|
- !ruby/object:Gem::Version
|
67
68
|
version: "0"
|
68
|
-
version:
|
69
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
70
71
|
requirements:
|
71
72
|
- - ">="
|
72
73
|
- !ruby/object:Gem::Version
|
73
74
|
version: "0"
|
74
|
-
version:
|
75
75
|
requirements: []
|
76
76
|
|
77
77
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.
|
78
|
+
rubygems_version: 1.8.8
|
79
79
|
signing_key:
|
80
80
|
specification_version: 3
|
81
81
|
summary: A simple finite state machine (FSM) gem.
|
82
|
-
test_files:
|
83
|
-
|
84
|
-
- test/executable_test.rb
|
85
|
-
- test/invoice_sample_test.rb
|
86
|
-
- test/options_test.rb
|
87
|
-
- test/state_test.rb
|
88
|
-
- test/test_helper.rb
|
89
|
-
- test/test_helper_ar.rb
|
90
|
-
- test/transition_test.rb
|
91
|
-
- test/water_sample_test.rb
|
82
|
+
test_files: []
|
83
|
+
|