lab42_state_machine 0.2.0 → 0.2.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cb027906651d393d34115d3caeb20cbbc1d21fe
|
4
|
+
data.tar.gz: 7aaf1ebbe0a829426fb37af2ae98c0b90f20e540
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba307dc46b61393a908927b31672083af04411b425cd55d3347bf68c2db987c8a6d76d0672f2e4aa7be80c8bd85c70770fec7c5910dfa39f1970d92edb201887
|
7
|
+
data.tar.gz: 4e5990cf6a562b00ed0aed7c1176f1906750972461c4e951cb4ea91f0dcf9739d9e55f9ea42ac00c6309c7161a2103828643abe49a4c1669d36f54dc71f64c7f
|
data/lib/lab42/state_machine.rb
CHANGED
@@ -14,6 +14,15 @@ module Lab42
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def clone new_subject=nil, &redefinition
|
18
|
+
old_controller = controller
|
19
|
+
copy = self.class.new( new_subject || subject.clone ){
|
20
|
+
controller.send :inherit_from!, old_controller
|
21
|
+
}
|
22
|
+
copy.instance_eval( &redefinition ) if redefinition
|
23
|
+
copy
|
24
|
+
end
|
25
|
+
|
17
26
|
def halt_machine
|
18
27
|
raise StopIteration, "#{self} halted"
|
19
28
|
end
|
@@ -35,7 +35,9 @@ module Lab42
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def run_one
|
38
|
-
@current_input = stream.
|
38
|
+
@current_input = stream.peek
|
39
|
+
@stream = stream.drop 1
|
40
|
+
|
39
41
|
run_befores
|
40
42
|
run_states
|
41
43
|
run_transitions
|
@@ -109,6 +111,15 @@ module Lab42
|
|
109
111
|
|
110
112
|
private
|
111
113
|
def current_transition; [@old_state, @state] end
|
114
|
+
|
115
|
+
def inherit_from! old_controller
|
116
|
+
raise ArgumentError, "not a controller #{old_controller}" unless self.class === old_controller
|
117
|
+
|
118
|
+
%w{setups teardowns afters befores handlers transitions}.each do | handlers |
|
119
|
+
instance_variable_set( "@#{handlers}",
|
120
|
+
old_controller.instance_variable_get( "@#{handlers}" ).clone )
|
121
|
+
end
|
122
|
+
end
|
112
123
|
|
113
124
|
def initialize state_machine
|
114
125
|
@sm = state_machine
|
@@ -140,7 +151,7 @@ module Lab42
|
|
140
151
|
def mk_input_stream input
|
141
152
|
case input
|
142
153
|
when Enumerable, Enumerator
|
143
|
-
@stream = input.lazy
|
154
|
+
@original_stream = @stream = input.lazy
|
144
155
|
else
|
145
156
|
raise ArgumentError, "cannot enumerate on object #{input}"
|
146
157
|
end
|
@@ -5,7 +5,7 @@ module Lab42
|
|
5
5
|
module StreamApi
|
6
6
|
|
7
7
|
extend Forwarder
|
8
|
-
|
8
|
+
forward_all :count, :take,:take_while, to: :stream
|
9
9
|
|
10
10
|
class ::Proc
|
11
11
|
def negated
|
@@ -29,10 +29,41 @@ module Lab42
|
|
29
29
|
@sm.skip
|
30
30
|
end
|
31
31
|
|
32
|
+
def has_next?
|
33
|
+
stream.peek
|
34
|
+
true
|
35
|
+
rescue StopIteration
|
36
|
+
false
|
37
|
+
end
|
38
|
+
def last?; !has_next? end
|
39
|
+
|
40
|
+
def peek *args
|
41
|
+
stream.peek
|
42
|
+
rescue StopIteration
|
43
|
+
args.first
|
44
|
+
end
|
45
|
+
|
46
|
+
def reject &filter
|
47
|
+
@stream = @stream.reject( &filter )
|
48
|
+
end
|
49
|
+
|
50
|
+
def rewind
|
51
|
+
@stream = @original_stream
|
52
|
+
end
|
53
|
+
|
32
54
|
def rewind!
|
33
55
|
rewind
|
34
56
|
@sm.skip
|
35
57
|
end
|
58
|
+
|
59
|
+
def select &filter
|
60
|
+
@stream = @stream.select( &filter )
|
61
|
+
end
|
62
|
+
|
63
|
+
def take_until &condition
|
64
|
+
take_while( &condition.negated )
|
65
|
+
end
|
66
|
+
|
36
67
|
end # module StreamApi
|
37
68
|
end # class Controller
|
38
69
|
end # class StateMachine
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lab42_state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Dober
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: forwarder19
|