rachinations 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -17
- data/README.md +26 -3
- data/lib/rachinations/domain/diagrams/diagram.rb +11 -9
- data/lib/rachinations/domain/modules/common/refiners/proc_convenience_methods.rb +18 -0
- data/lib/rachinations/domain/nodes/converter.rb +16 -3
- data/lib/rachinations/domain/nodes/pool.rb +4 -1
- data/lib/rachinations/domain/nodes/resourceful_node.rb +4 -0
- data/lib/rachinations/domain/nodes/source.rb +1 -1
- data/lib/rachinations/domain/resource_bag.rb +31 -38
- data/lib/rachinations/version.rb +1 -1
- data/lib/rachinations.rb +1 -14
- data/rachinations.gemspec +4 -5
- data/testing/spec/canon/conditions_spec.rb +95 -0
- data/testing/spec/canon/converter_spec.rb +155 -20
- data/testing/spec/canon/trigger_spec.rb +128 -0
- data/testing/spec/diagram_spec.rb +0 -211
- metadata +23 -34
- data/testing/spec/conditions_spec.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49ee8fa5ba3a2fd67f645d651f16675e2a93d723
|
4
|
+
data.tar.gz: be88690c64ece75e4d1af590dec1a06837bd914c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0159177f5cd1b84731efa5057767eb6317aabd9dd6f082d61d2dfc1d0a62989e3c8900e0595adf84d2d5c7e7371ee6e7e3c5e53d73e1aaa369776c542245b342
|
7
|
+
data.tar.gz: 243693a7ceff066b8649510c3cc7655ab49a1ac633a82633472726a7e050c7ec5bdba5a0eab08610052ef05ade0516d1a07987f7224ef465e8ea108f5ec82611
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rachinations (0.0.
|
4
|
+
rachinations (0.0.3)
|
5
5
|
activesupport (= 3.0.0)
|
6
6
|
i18n (= 0.6.11)
|
7
7
|
|
@@ -17,20 +17,10 @@ GEM
|
|
17
17
|
simplecov (>= 0.7)
|
18
18
|
term-ansicolor
|
19
19
|
thor
|
20
|
-
cucumber (1.3.16)
|
21
|
-
builder (>= 2.1.2)
|
22
|
-
diff-lcs (>= 1.1.3)
|
23
|
-
gherkin (~> 2.12)
|
24
|
-
multi_json (>= 1.7.5, < 2.0)
|
25
|
-
multi_test (>= 0.1.1)
|
26
20
|
diff-lcs (1.2.5)
|
27
21
|
docile (1.1.5)
|
28
22
|
ffi (1.9.3-x64-mingw32)
|
29
23
|
ffi (1.9.3-x86-mingw32)
|
30
|
-
gherkin (2.12.2)
|
31
|
-
multi_json (~> 1.3)
|
32
|
-
gherkin (2.12.2-x86-mingw32)
|
33
|
-
multi_json (~> 1.3)
|
34
24
|
i18n (0.6.11)
|
35
25
|
mime-types (2.3)
|
36
26
|
minitest (5.4.0)
|
@@ -40,7 +30,6 @@ GEM
|
|
40
30
|
minitest (>= 5.0)
|
41
31
|
ruby-progressbar
|
42
32
|
multi_json (1.10.1)
|
43
|
-
multi_test (0.1.1)
|
44
33
|
netrc (0.7.7)
|
45
34
|
rake (10.3.2)
|
46
35
|
rest-client (1.7.2)
|
@@ -84,10 +73,9 @@ PLATFORMS
|
|
84
73
|
|
85
74
|
DEPENDENCIES
|
86
75
|
bundler (~> 1.5)
|
87
|
-
coveralls
|
88
|
-
|
89
|
-
minitest
|
90
|
-
minitest-reporters
|
76
|
+
coveralls (= 0.7.0)
|
77
|
+
minitest (~> 5.4)
|
78
|
+
minitest-reporters (~> 1.0)
|
91
79
|
rachinations!
|
92
|
-
rake
|
80
|
+
rake (~> 10.3)
|
93
81
|
rspec (~> 3.0)
|
data/README.md
CHANGED
@@ -7,7 +7,9 @@ rachinations
|
|
7
7
|
|
8
8
|
### Introduction
|
9
9
|
|
10
|
-
This is a port of Dr. J. Dormans' Machinations framework into Ruby.
|
10
|
+
This is a port of Dr. J. Dormans' [Machinations framework](http://www.jorisdormans.nl/machinations/) into Ruby.
|
11
|
+
|
12
|
+
It provides a Ruby-based DSL to enable game designers to create and also test tentative game designs and/or prototypes.
|
11
13
|
|
12
14
|
### Contents
|
13
15
|
|
@@ -15,5 +17,26 @@ This is a port of Dr. J. Dormans' Machinations framework into Ruby.
|
|
15
17
|
- Tests
|
16
18
|
- A simple DSL (Domain-specific language) whose objective is to enable anyone to write Machinations diagrams, run them, obtain metrics, compose subdiagrams and so on.
|
17
19
|
|
18
|
-
### Usage
|
19
|
-
-
|
20
|
+
### DSL Usage
|
21
|
+
- Simplest possible usage:
|
22
|
+
- Install the `rachinations` [gem](http://rubygems.org/gems/rachinations)
|
23
|
+
|
24
|
+
```
|
25
|
+
$ gem install rachinations
|
26
|
+
```
|
27
|
+
- Require it into your code and start designing diagrams:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
require 'rachinations'
|
31
|
+
|
32
|
+
n=diagram 'my diagram' do
|
33
|
+
node 's1',Source
|
34
|
+
node 'p1', Pool
|
35
|
+
edge 'e1', Edge, 's1','p1'
|
36
|
+
end
|
37
|
+
|
38
|
+
n.run!(5)
|
39
|
+
|
40
|
+
p n.get_node("p1").resource_count
|
41
|
+
#prints 5
|
42
|
+
```
|
@@ -102,6 +102,17 @@ class Diagram
|
|
102
102
|
|
103
103
|
end
|
104
104
|
|
105
|
+
|
106
|
+
def resource_count(klass=nil)
|
107
|
+
total=0
|
108
|
+
@nodes.each do |n|
|
109
|
+
total+=n.resource_count(klass)
|
110
|
+
end
|
111
|
+
total
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
105
116
|
def to_s
|
106
117
|
nodes.reduce('') { |carry, n| carry+n.to_s }
|
107
118
|
end
|
@@ -136,15 +147,6 @@ class Diagram
|
|
136
147
|
nodes.shuffle.each { |n| n.commit! }
|
137
148
|
end
|
138
149
|
|
139
|
-
|
140
|
-
def resource_count(klass=nil)
|
141
|
-
total=0
|
142
|
-
@nodes.each do |n|
|
143
|
-
total+=n.resource_count(klass)
|
144
|
-
end
|
145
|
-
total
|
146
|
-
end
|
147
|
-
|
148
150
|
def enabled_nodes
|
149
151
|
nodes.select{|n| n.enabled? }
|
150
152
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ProcConvenienceMethods
|
2
|
+
|
3
|
+
# A few extra methods
|
4
|
+
# to make code read more intuitively.
|
5
|
+
refine Proc do
|
6
|
+
|
7
|
+
alias_method :accepts?, :call
|
8
|
+
alias_method :accept?, :call
|
9
|
+
|
10
|
+
alias_method :match?, :call
|
11
|
+
alias_method :matches?, :call
|
12
|
+
|
13
|
+
alias_method :match_resource?, :call
|
14
|
+
alias_method :matches_resource?, :call
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
require_relative '../../domain/nodes/node'
|
2
2
|
require_relative '../../domain/nodes/resourceless_node'
|
3
|
+
require_relative '../../domain/modules/common/refiners/proc_convenience_methods'
|
4
|
+
|
5
|
+
using ProcConvenienceMethods
|
3
6
|
|
4
7
|
class Converter < ResourcefulNode
|
5
8
|
|
@@ -52,7 +55,7 @@ class Converter < ResourcefulNode
|
|
52
55
|
if in_conditions_met?
|
53
56
|
if outgoing_edges.all? { |edge| edge.test_push?(true) }
|
54
57
|
push_all!
|
55
|
-
|
58
|
+
clear_stored_resources!
|
56
59
|
end # converters are always push_all
|
57
60
|
end # conditions weren't met this turn
|
58
61
|
|
@@ -127,8 +130,11 @@ class Converter < ResourcefulNode
|
|
127
130
|
|
128
131
|
# This removes from the internal store just enough
|
129
132
|
# resources to accomplish one push_all (only applicable when in pull_any mode)
|
130
|
-
def
|
131
|
-
|
133
|
+
def clear_stored_resources!
|
134
|
+
incoming_edges
|
135
|
+
.each do |edge|
|
136
|
+
edge.label.times{remove_from_contributed_resources!(edge)}
|
137
|
+
end
|
132
138
|
end
|
133
139
|
|
134
140
|
|
@@ -257,6 +263,13 @@ class Converter < ResourcefulNode
|
|
257
263
|
resources_contributed.fetch(edge).put!(resource)
|
258
264
|
end
|
259
265
|
|
266
|
+
# Once a Converter has 'converted', we must alter its state so that
|
267
|
+
# contributions across turns don't cause more conversions than they
|
268
|
+
# should.
|
269
|
+
def remove_from_contributed_resources!(edge)
|
270
|
+
resources_contributed.fetch(edge).take!
|
271
|
+
end
|
272
|
+
|
260
273
|
def init_resources
|
261
274
|
edges.reduce(Hash.new) { |hash, edge| hash.store(edge.object_id, Fifo.new) }
|
262
275
|
end
|
@@ -3,8 +3,11 @@ require_relative '../../domain/nodes/node'
|
|
3
3
|
require_relative '../../domain/resources/token'
|
4
4
|
require_relative '../resource_bag'
|
5
5
|
require_relative '../../domain/exceptions/no_elements_matching_condition_error'
|
6
|
+
require_relative '../../domain/modules/common/refiners/proc_convenience_methods'
|
6
7
|
|
7
8
|
|
9
|
+
using ProcConvenienceMethods
|
10
|
+
|
8
11
|
class Pool < ResourcefulNode
|
9
12
|
|
10
13
|
def initialize(hsh={})
|
@@ -132,7 +135,7 @@ class Pool < ResourcefulNode
|
|
132
135
|
end
|
133
136
|
|
134
137
|
def to_s
|
135
|
-
"Pool '#{@name}': #{
|
138
|
+
"Pool '#{@name}': #{resources} "
|
136
139
|
end
|
137
140
|
|
138
141
|
# TODO this smells. where is this used? can i do without it?
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'set'
|
2
2
|
require_relative '../../domain/resources/token'
|
3
3
|
require_relative '../../domain/nodes/node'
|
4
|
+
require_relative '../../domain/modules/common/refiners/proc_convenience_methods'
|
5
|
+
|
6
|
+
|
7
|
+
using ProcConvenienceMethods
|
4
8
|
|
5
9
|
class ResourcefulNode < Node
|
6
10
|
|
@@ -19,27 +19,18 @@ class ResourceBag
|
|
19
19
|
@store.push(obj)
|
20
20
|
end
|
21
21
|
|
22
|
-
#
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def count(klass)
|
37
|
-
|
38
|
-
inv { klass.is_a?(Class) }
|
39
|
-
|
40
|
-
store.select { |el| el.is_a?(klass) }.length
|
41
|
-
|
42
|
-
end
|
22
|
+
# Returns how many resources of given type there are
|
23
|
+
# Note that this method includes locked resources in the count.
|
24
|
+
#
|
25
|
+
# @param [Class] resource type
|
26
|
+
# @return []Int] quantity of resources (including locked)
|
27
|
+
# def count(klass)
|
28
|
+
#
|
29
|
+
# inv { klass.is_a?(Class) }
|
30
|
+
#
|
31
|
+
# store.select { |el| el.is_a?(klass) }.length
|
32
|
+
#
|
33
|
+
# end
|
43
34
|
|
44
35
|
def count_where(&blk)
|
45
36
|
|
@@ -73,20 +64,7 @@ class ResourceBag
|
|
73
64
|
|
74
65
|
end
|
75
66
|
|
76
|
-
|
77
|
-
def theres_at_least_one_where
|
78
|
-
|
79
|
-
raise ArgumentError, 'Please supply a block containing the condition.' unless block_given?
|
80
|
-
|
81
|
-
store.each do |e|
|
82
|
-
if e.unlocked? && (yield e)
|
83
|
-
return true
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
false
|
88
|
-
|
89
|
-
end
|
67
|
+
private
|
90
68
|
|
91
69
|
def to_s
|
92
70
|
out = ''
|
@@ -96,12 +74,15 @@ class ResourceBag
|
|
96
74
|
classes.each do |klass|
|
97
75
|
|
98
76
|
name = if klass.name.nil?
|
99
|
-
'Anonymous
|
77
|
+
'Anonymous Token'
|
100
78
|
else
|
101
79
|
klass.name
|
102
80
|
end
|
103
81
|
|
104
|
-
|
82
|
+
unlocked = count_where{|r| (r.is_type? klass) && (r.unlocked?) }
|
83
|
+
locked = count_where{|r| (r.is_type? klass) && (r.locked?) }
|
84
|
+
|
85
|
+
out += "\n #{name} -> #{unlocked} (#{locked}) \n\n"
|
105
86
|
end
|
106
87
|
|
107
88
|
if classes.empty?
|
@@ -113,8 +94,20 @@ class ResourceBag
|
|
113
94
|
|
114
95
|
end
|
115
96
|
|
116
|
-
|
97
|
+
# created so that I don't have to call count everytime just to see whether there's at least one element matching said condition
|
98
|
+
def theres_at_least_one_where
|
117
99
|
|
100
|
+
raise ArgumentError, 'Please supply a block containing the condition.' unless block_given?
|
101
|
+
|
102
|
+
store.each do |e|
|
103
|
+
if e.unlocked? && (yield e)
|
104
|
+
return true
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
false
|
109
|
+
|
110
|
+
end
|
118
111
|
|
119
112
|
def store
|
120
113
|
@store
|
data/lib/rachinations/version.rb
CHANGED
data/lib/rachinations.rb
CHANGED
@@ -3,21 +3,8 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
require 'rachinations/version'
|
4
4
|
|
5
5
|
|
6
|
-
# A few extra methods
|
7
|
-
# to make code read more intuitively.
|
8
|
-
class Proc
|
9
|
-
|
10
|
-
alias_method :accepts?, :call
|
11
|
-
alias_method :accept?, :call
|
12
|
-
|
13
|
-
alias_method :match?, :call
|
14
|
-
alias_method :matches?, :call
|
15
|
-
|
16
|
-
alias_method :match_resource?, :call
|
17
|
-
alias_method :matches_resource?, :call
|
18
|
-
|
19
|
-
end
|
20
6
|
|
7
|
+
require 'rachinations/domain/modules/common/refiners/proc_convenience_methods'
|
21
8
|
require 'rachinations/extras/fifo'
|
22
9
|
|
23
10
|
require 'rachinations/domain/diagrams/diagram'
|
data/rachinations.gemspec
CHANGED
@@ -22,12 +22,11 @@ design and also test tentative game designs and/or prototypes}
|
|
22
22
|
spec.required_ruby_version = '~> 2.1'
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.5"
|
25
|
-
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.3"
|
26
26
|
spec.add_development_dependency "rspec","~> 3.0"
|
27
|
-
spec.add_development_dependency "minitest"
|
28
|
-
spec.add_development_dependency "minitest-reporters"
|
29
|
-
spec.add_development_dependency "
|
30
|
-
spec.add_development_dependency "coveralls"
|
27
|
+
spec.add_development_dependency "minitest", "~> 5.4"
|
28
|
+
spec.add_development_dependency "minitest-reporters", "~> 1.0"
|
29
|
+
spec.add_development_dependency "coveralls", "0.7.0"
|
31
30
|
|
32
31
|
spec.add_dependency "activesupport","3.0.0"
|
33
32
|
spec.add_dependency "i18n","0.6.11"
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe 'Nodes that can be given conditions' do
|
4
|
+
|
5
|
+
it 'does not run disabled nodes from the beginning' do
|
6
|
+
|
7
|
+
d=Diagram.new 'simple'
|
8
|
+
|
9
|
+
d.add_node! Source, {
|
10
|
+
:name => 'source'
|
11
|
+
}
|
12
|
+
|
13
|
+
d.add_node! Pool, {
|
14
|
+
:name => 'deposit',
|
15
|
+
:initial_value => 0
|
16
|
+
}
|
17
|
+
|
18
|
+
|
19
|
+
d.add_edge! Edge, {
|
20
|
+
:name => 'connector',
|
21
|
+
:from => 'source',
|
22
|
+
:to => 'deposit'
|
23
|
+
}
|
24
|
+
|
25
|
+
d.get_node('source').attach_condition(lambda { false })
|
26
|
+
|
27
|
+
d.run!(10)
|
28
|
+
|
29
|
+
expect(d.resource_count).to eq 0
|
30
|
+
expect(d.get_node('deposit').resource_count).to eq 0
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'must not run disabled nodes at some point' do
|
35
|
+
|
36
|
+
#não entendi pra que serve esse teste
|
37
|
+
|
38
|
+
d=Diagram.new 'simple'
|
39
|
+
|
40
|
+
d.add_node! Source, {
|
41
|
+
:name => 'source'
|
42
|
+
}
|
43
|
+
|
44
|
+
d.add_node! Pool, {
|
45
|
+
:name => 'deposit',
|
46
|
+
:initial_value => 0
|
47
|
+
}
|
48
|
+
|
49
|
+
|
50
|
+
d.add_edge! Edge, {
|
51
|
+
:name => 'connector',
|
52
|
+
:from => 'source',
|
53
|
+
:to => 'deposit'
|
54
|
+
}
|
55
|
+
|
56
|
+
d.get_node('source').attach_condition(lambda { d.get_node('deposit').resource_count < 3 })
|
57
|
+
|
58
|
+
d.run!(10)
|
59
|
+
|
60
|
+
expect(d.resource_count).to eq 3
|
61
|
+
expect(d.get_node('deposit').resource_count).to eq 3
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'runs when both ends (of an edge) are enabled' do
|
66
|
+
|
67
|
+
d= Diagram.new 'simple'
|
68
|
+
|
69
|
+
d.add_node! Source, {
|
70
|
+
:name => 'source'
|
71
|
+
}
|
72
|
+
|
73
|
+
d.add_node! Pool, {
|
74
|
+
:name => 'deposit',
|
75
|
+
:initial_value => 0
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
d.add_edge! Edge, {
|
80
|
+
:name => 'connector',
|
81
|
+
:from => 'source',
|
82
|
+
:to => 'deposit'
|
83
|
+
}
|
84
|
+
|
85
|
+
d.get_node('deposit').attach_condition(lambda { d.get_node('deposit').resource_count < 3 })
|
86
|
+
|
87
|
+
d.run!(10)
|
88
|
+
|
89
|
+
# expect(d.resource_count).to eq 3
|
90
|
+
expect(d.get_node('deposit').resource_count).to eq 3
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
@@ -2,32 +2,167 @@ require_relative '../spec_helper'
|
|
2
2
|
|
3
3
|
describe 'Converter canonical behavior' do
|
4
4
|
|
5
|
-
|
5
|
+
it 'pulls_any' do
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@d.add_edge! Edge, name:'e2',from: 'c', to: 'p0'
|
14
|
-
}
|
15
|
-
it 'is triggered by itself' do
|
16
|
-
c = @d.get_node 'c'
|
17
|
-
p0 = @d.get_node('p0')
|
18
|
-
p9 = @d.get_node('p9')
|
7
|
+
d = Diagram.new 'foo'
|
8
|
+
d.add_node! Pool, name: 'p9', initial_value: 9
|
9
|
+
d.add_node! Pool, name: 'p0'
|
10
|
+
d.add_node! Converter, name: 'c', mode: :pull_any, activation: :automatic
|
11
|
+
d.add_edge! Edge, name: 'e1', from: 'p9', to: 'c'
|
12
|
+
d.add_edge! Edge, name: 'e2', from: 'c', to: 'p0'
|
19
13
|
|
20
|
-
|
14
|
+
c = d.get_node 'c'
|
15
|
+
p0 = d.get_node('p0')
|
16
|
+
p9 = d.get_node('p9')
|
21
17
|
|
22
|
-
|
23
|
-
@d.get_node('p0').commit!
|
24
|
-
@d.get_node('p9').commit!
|
18
|
+
d.run!(5)
|
25
19
|
|
26
|
-
|
27
|
-
|
20
|
+
expect(p0.resource_count).to eq 5
|
21
|
+
expect(p9.resource_count).to eq 4
|
28
22
|
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
it 'pulls_any to two targets' do
|
27
|
+
|
28
|
+
d = Diagram.new 'foo'
|
29
|
+
d.add_node! Pool, name: 'p9', initial_value: 9
|
30
|
+
d.add_node! Pool, name: 'p1'
|
31
|
+
d.add_node! Pool, name: 'p2'
|
32
|
+
d.add_node! Converter, name: 'c', mode: :pull_any
|
33
|
+
d.add_edge! Edge, name: 'e1', from: 'p9', to: 'c'
|
34
|
+
d.add_edge! Edge, name: 'e2', from: 'c', to: 'p1'
|
35
|
+
d.add_edge! Edge, name: 'e3', from: 'c', to: 'p2'
|
36
|
+
|
37
|
+
c = d.get_node 'c'
|
38
|
+
p1 = d.get_node('p1')
|
39
|
+
p2 = d.get_node('p2')
|
40
|
+
p9 = d.get_node('p9')
|
41
|
+
|
42
|
+
5.times { c.trigger! }
|
43
|
+
|
44
|
+
# to unlock the resources
|
45
|
+
p1.commit!
|
46
|
+
p2.commit!
|
47
|
+
p9.commit!
|
48
|
+
|
49
|
+
expect(p1.resource_count).to eq 5
|
50
|
+
expect(p2.resource_count).to eq 5
|
51
|
+
expect(p9.resource_count).to eq 4
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'pulls_any from two sources' do
|
56
|
+
|
57
|
+
d = Diagram.new 'foo'
|
58
|
+
d.add_node! Pool, name: 'p1', initial_value: 9
|
59
|
+
d.add_node! Pool, name: 'p2', initial_value: 3
|
60
|
+
d.add_node! Pool, name: 'p3'
|
61
|
+
d.add_node! Pool, name: 'p4'
|
62
|
+
d.add_node! Converter, name: 'c', mode: :pull_any
|
63
|
+
d.add_edge! Edge, name: 'e1', from: 'p1', to: 'c'
|
64
|
+
d.add_edge! Edge, name: 'e2', from: 'p2', to: 'c'
|
65
|
+
d.add_edge! Edge, name: 'e3', from: 'c', to: 'p3'
|
66
|
+
d.add_edge! Edge, name: 'e4', from: 'c', to: 'p4'
|
67
|
+
|
68
|
+
c = d.get_node 'c'
|
69
|
+
p1 = d.get_node('p1')
|
70
|
+
p2 = d.get_node('p2')
|
71
|
+
p3 = d.get_node('p3')
|
72
|
+
p4 = d.get_node('p4')
|
73
|
+
|
74
|
+
5.times { c.trigger! }
|
75
|
+
|
76
|
+
# to unlock the resources
|
77
|
+
p1.commit!
|
78
|
+
p2.commit!
|
79
|
+
p3.commit!
|
80
|
+
p4.commit!
|
81
|
+
|
82
|
+
expect(p1.resource_count).to eq 4
|
83
|
+
expect(p2.resource_count).to eq 0
|
84
|
+
expect(p3.resource_count).to eq 3
|
85
|
+
expect(p4.resource_count).to eq 3
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
it "pulls_all from a single source" do
|
90
|
+
d = Diagram.new 'foo'
|
91
|
+
d.add_node! Pool, name: 'p1', initial_value: 9
|
92
|
+
d.add_node! Pool, name: 'p2'
|
93
|
+
d.add_node! Converter, name: 'c', mode: :pull_all
|
94
|
+
d.add_edge! Edge, name: 'e1', from: 'p1', to: 'c'
|
95
|
+
d.add_edge! Edge, name: 'e2', from: 'c', to: 'p2'
|
96
|
+
|
97
|
+
c = d.get_node 'c'
|
98
|
+
p1 = d.get_node('p1')
|
99
|
+
p2 = d.get_node('p2')
|
100
|
+
|
101
|
+
5.times { c.trigger! }
|
29
102
|
|
30
|
-
|
103
|
+
# to unlock the resources
|
104
|
+
p1.commit!
|
105
|
+
p2.commit!
|
31
106
|
|
107
|
+
expect(p1.resource_count).to eq 4
|
108
|
+
expect(p2.resource_count).to eq 5
|
32
109
|
end
|
110
|
+
|
111
|
+
it 'pulls_all from multiple sources' do
|
112
|
+
|
113
|
+
d = Diagram.new 'foo'
|
114
|
+
d.add_node! Pool, name: 'p1', initial_value: 9
|
115
|
+
d.add_node! Pool, name: 'p2', initial_value: 3
|
116
|
+
d.add_node! Pool, name: 'p3', initial_value: 5
|
117
|
+
d.add_node! Pool, name: 'p4'
|
118
|
+
d.add_node! Pool, name: 'p5'
|
119
|
+
|
120
|
+
d.add_node! Converter, name: 'c', mode: :pull_all, activation: :automatic
|
121
|
+
d.add_edge! Edge, name: 'e1', from: 'p1', to: 'c', label: 2
|
122
|
+
d.add_edge! Edge, name: 'e2', from: 'p2', to: 'c'
|
123
|
+
d.add_edge! Edge, name: 'e3', from: 'p3', to: 'c'
|
124
|
+
d.add_edge! Edge, name: 'e4', from: 'c', to: 'p4'
|
125
|
+
d.add_edge! Edge, name: 'e5', from: 'c', to: 'p5'
|
126
|
+
|
127
|
+
d.run! 5
|
128
|
+
|
129
|
+
expect(d.get_node('p1').resource_count).to eq 3
|
130
|
+
expect(d.get_node('p2').resource_count).to eq 0
|
131
|
+
expect(d.get_node('p3').resource_count).to eq 2
|
132
|
+
expect(d.get_node('p4').resource_count).to eq 3
|
133
|
+
expect(d.get_node('p5').resource_count).to eq 3
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'pulls_any across turns (converter has memory)' do
|
137
|
+
|
138
|
+
# converter should keep pulling_any as long as it can
|
139
|
+
# but only when the conditions are satisfied for _both_
|
140
|
+
# incoming edges.
|
141
|
+
|
142
|
+
d = Diagram.new 'foo'
|
143
|
+
|
144
|
+
d.add_node! Pool, name: 'p1', initial_value:8
|
145
|
+
d.add_node! Source, name: 's' # default automatic
|
146
|
+
d.add_node! Pool, name: 'p2' # default zero resources
|
147
|
+
|
148
|
+
d.add_node! Converter, name: 'c', mode: :pull_any,activation: :automatic
|
149
|
+
|
150
|
+
d.add_node! Pool, name: 'p3'
|
151
|
+
|
152
|
+
d.add_edge! Edge, name: 'e1', from: 'p1', to:'c', label: 3
|
153
|
+
d.add_edge! Edge, name: 'e2', from: 'p2', to:'c', label: 2
|
154
|
+
d.add_edge! Edge, name: 'e3', from: 's', to:'p2'
|
155
|
+
d.add_edge! Edge, name: 'e4', from: 'c', to:'p3'
|
156
|
+
|
157
|
+
d.run! 10
|
158
|
+
|
159
|
+
expect(d.get_node('p3').resource_count).to eq 2
|
160
|
+
|
161
|
+
# they get consumed as it is pull any
|
162
|
+
expect(d.get_node('p1').resource_count).to eq 0
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
end
|
167
|
+
|
33
168
|
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe 'triggers' do
|
4
|
+
|
5
|
+
it 'makes triggers trig!' do
|
6
|
+
d=Diagram.new 'simple'
|
7
|
+
|
8
|
+
d.add_node! Source, {
|
9
|
+
:name => 'source'
|
10
|
+
}
|
11
|
+
|
12
|
+
d.add_node! Pool, {
|
13
|
+
:name => 'deposit',
|
14
|
+
:initial_value => 0
|
15
|
+
}
|
16
|
+
|
17
|
+
|
18
|
+
d.add_edge! Edge, {
|
19
|
+
:name => 'connector',
|
20
|
+
:from => 'source',
|
21
|
+
:to => 'deposit'
|
22
|
+
}
|
23
|
+
|
24
|
+
d.get_node('deposit').attach_trigger([lambda { d.get_node('deposit').resource_count === 3 }, d.get_node('source')])
|
25
|
+
|
26
|
+
d.run!(10)
|
27
|
+
|
28
|
+
expect(d.resource_count).to eq 11
|
29
|
+
expect(d.get_node('deposit').resource_count).to eq 11
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'makes triggers trig! more than once' do
|
34
|
+
d=Diagram.new 'simple'
|
35
|
+
|
36
|
+
d.add_node! Source, {
|
37
|
+
:name => 's1'
|
38
|
+
}
|
39
|
+
|
40
|
+
d.add_node! Pool, {
|
41
|
+
:name => 'd1',
|
42
|
+
:initial_value => 0
|
43
|
+
}
|
44
|
+
|
45
|
+
|
46
|
+
d.add_node! Source, {
|
47
|
+
:name => 's2',
|
48
|
+
:activation => :passive
|
49
|
+
}
|
50
|
+
|
51
|
+
d.add_edge! Edge, {
|
52
|
+
:name => 'c1',
|
53
|
+
:from => 's1',
|
54
|
+
:to => 'd1'
|
55
|
+
}
|
56
|
+
|
57
|
+
d.add_node! Pool, {
|
58
|
+
:name => 'd2',
|
59
|
+
:initial_value => 0
|
60
|
+
}
|
61
|
+
|
62
|
+
|
63
|
+
d.add_edge! Edge, {
|
64
|
+
:name => 'c2',
|
65
|
+
:from => 's2',
|
66
|
+
:to => 'd2'
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').resource_count > 3 }, d.get_node('s1')])
|
71
|
+
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').resource_count > 3 }, d.get_node('s2')])
|
72
|
+
#d.extend(Verbose)
|
73
|
+
d.run!(6)
|
74
|
+
|
75
|
+
expect(d.resource_count).to eq 10
|
76
|
+
expect(d.get_node('d1').resource_count).to eq 8
|
77
|
+
expect(d.get_node('d2').resource_count).to eq 2
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'makes triggers trig! more than once with instant_resource_count' do
|
82
|
+
d=Diagram.new 'simple'
|
83
|
+
|
84
|
+
d.add_node! Source, {
|
85
|
+
:name => 's1'
|
86
|
+
}
|
87
|
+
|
88
|
+
d.add_node! Pool, {
|
89
|
+
:name => 'd1',
|
90
|
+
:initial_value => 0
|
91
|
+
}
|
92
|
+
|
93
|
+
|
94
|
+
d.add_node! Source, {
|
95
|
+
:name => 's2',
|
96
|
+
:activation => :passive
|
97
|
+
}
|
98
|
+
|
99
|
+
d.add_edge! Edge, {
|
100
|
+
:name => 'c1',
|
101
|
+
:from => 's1',
|
102
|
+
:to => 'd1'
|
103
|
+
}
|
104
|
+
|
105
|
+
d.add_node! Pool, {
|
106
|
+
:name => 'd2',
|
107
|
+
:initial_value => 0
|
108
|
+
}
|
109
|
+
|
110
|
+
|
111
|
+
d.add_edge! Edge, {
|
112
|
+
:name => 'c2',
|
113
|
+
:from => 's2',
|
114
|
+
:to => 'd2'
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').instant_resource_count > 3 }, d.get_node('s1')])
|
119
|
+
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').instant_resource_count > 3 }, d.get_node('s2')])
|
120
|
+
#d.extend(Verbose)
|
121
|
+
d.run!(6)
|
122
|
+
|
123
|
+
expect(d.resource_count).to eq 12
|
124
|
+
expect(d.get_node('d1').resource_count).to eq 9
|
125
|
+
expect(d.get_node('d2').resource_count).to eq 3
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|
@@ -355,218 +355,7 @@ describe Diagram do
|
|
355
355
|
|
356
356
|
end
|
357
357
|
|
358
|
-
it 'does not run disabled nodes from the beginning' do
|
359
358
|
|
360
|
-
d=Diagram.new 'simple'
|
361
|
-
|
362
|
-
d.add_node! Source, {
|
363
|
-
:name => 'source'
|
364
|
-
}
|
365
|
-
|
366
|
-
d.add_node! Pool, {
|
367
|
-
:name => 'deposit',
|
368
|
-
:initial_value => 0
|
369
|
-
}
|
370
|
-
|
371
|
-
|
372
|
-
d.add_edge! Edge, {
|
373
|
-
:name => 'connector',
|
374
|
-
:from => 'source',
|
375
|
-
:to => 'deposit'
|
376
|
-
}
|
377
|
-
|
378
|
-
d.get_node('source').attach_condition(lambda { false })
|
379
|
-
|
380
|
-
d.run!(10)
|
381
|
-
|
382
|
-
expect(d.resource_count).to eq 0
|
383
|
-
expect(d.get_node('deposit').resource_count).to eq 0
|
384
|
-
|
385
|
-
end
|
386
|
-
|
387
|
-
it 'must not run disabled nodes at some point' do
|
388
|
-
|
389
|
-
#não entendi pra que serve esse teste
|
390
|
-
|
391
|
-
d=Diagram.new 'simple'
|
392
|
-
|
393
|
-
d.add_node! Source, {
|
394
|
-
:name => 'source'
|
395
|
-
}
|
396
|
-
|
397
|
-
d.add_node! Pool, {
|
398
|
-
:name => 'deposit',
|
399
|
-
:initial_value => 0
|
400
|
-
}
|
401
|
-
|
402
|
-
|
403
|
-
d.add_edge! Edge, {
|
404
|
-
:name => 'connector',
|
405
|
-
:from => 'source',
|
406
|
-
:to => 'deposit'
|
407
|
-
}
|
408
|
-
|
409
|
-
d.get_node('source').attach_condition(lambda { d.get_node('deposit').resource_count < 3 })
|
410
|
-
|
411
|
-
d.run!(10)
|
412
|
-
|
413
|
-
expect(d.resource_count).to eq 3
|
414
|
-
expect(d.get_node('deposit').resource_count).to eq 3
|
415
|
-
|
416
|
-
end
|
417
|
-
|
418
|
-
it 'runs when both ends (of an edge) are enabled' do
|
419
|
-
|
420
|
-
d=Diagram.new 'simple'
|
421
|
-
|
422
|
-
d.add_node! Source, {
|
423
|
-
:name => 'source'
|
424
|
-
}
|
425
|
-
|
426
|
-
d.add_node! Pool, {
|
427
|
-
:name => 'deposit',
|
428
|
-
:initial_value => 0
|
429
|
-
}
|
430
|
-
|
431
|
-
|
432
|
-
d.add_edge! Edge, {
|
433
|
-
:name => 'connector',
|
434
|
-
:from => 'source',
|
435
|
-
:to => 'deposit'
|
436
|
-
}
|
437
|
-
|
438
|
-
d.get_node('deposit').attach_condition(lambda { d.get_node('deposit').resource_count < 3 })
|
439
|
-
|
440
|
-
d.run!(10)
|
441
|
-
|
442
|
-
# expect(d.resource_count).to eq 3
|
443
|
-
expect(d.get_node('deposit').resource_count).to eq 3
|
444
|
-
|
445
|
-
end
|
446
|
-
|
447
|
-
it 'makes triggers trig!' do
|
448
|
-
d=Diagram.new 'simple'
|
449
|
-
|
450
|
-
d.add_node! Source, {
|
451
|
-
:name => 'source'
|
452
|
-
}
|
453
|
-
|
454
|
-
d.add_node! Pool, {
|
455
|
-
:name => 'deposit',
|
456
|
-
:initial_value => 0
|
457
|
-
}
|
458
|
-
|
459
|
-
|
460
|
-
d.add_edge! Edge, {
|
461
|
-
:name => 'connector',
|
462
|
-
:from => 'source',
|
463
|
-
:to => 'deposit'
|
464
|
-
}
|
465
|
-
|
466
|
-
d.get_node('deposit').attach_trigger([lambda { d.get_node('deposit').resource_count === 3 }, d.get_node('source')])
|
467
|
-
|
468
|
-
d.run!(10)
|
469
|
-
|
470
|
-
expect(d.resource_count).to eq 11
|
471
|
-
expect(d.get_node('deposit').resource_count).to eq 11
|
472
|
-
|
473
|
-
end
|
474
|
-
|
475
|
-
it 'makes triggers trig! more than once' do
|
476
|
-
d=Diagram.new 'simple'
|
477
|
-
|
478
|
-
d.add_node! Source, {
|
479
|
-
:name => 's1'
|
480
|
-
}
|
481
|
-
|
482
|
-
d.add_node! Pool, {
|
483
|
-
:name => 'd1',
|
484
|
-
:initial_value => 0
|
485
|
-
}
|
486
|
-
|
487
|
-
|
488
|
-
d.add_node! Source, {
|
489
|
-
:name => 's2',
|
490
|
-
:activation => :passive
|
491
|
-
}
|
492
|
-
|
493
|
-
d.add_edge! Edge, {
|
494
|
-
:name => 'c1',
|
495
|
-
:from => 's1',
|
496
|
-
:to => 'd1'
|
497
|
-
}
|
498
|
-
|
499
|
-
d.add_node! Pool, {
|
500
|
-
:name => 'd2',
|
501
|
-
:initial_value => 0
|
502
|
-
}
|
503
|
-
|
504
|
-
|
505
|
-
d.add_edge! Edge, {
|
506
|
-
:name => 'c2',
|
507
|
-
:from => 's2',
|
508
|
-
:to => 'd2'
|
509
|
-
}
|
510
|
-
|
511
|
-
|
512
|
-
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').resource_count > 3 }, d.get_node('s1')])
|
513
|
-
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').resource_count > 3 }, d.get_node('s2')])
|
514
|
-
#d.extend(Verbose)
|
515
|
-
d.run!(6)
|
516
|
-
|
517
|
-
expect(d.resource_count).to eq 10
|
518
|
-
expect(d.get_node('d1').resource_count).to eq 8
|
519
|
-
expect(d.get_node('d2').resource_count).to eq 2
|
520
|
-
|
521
|
-
end
|
522
|
-
|
523
|
-
it 'makes triggers trig! more than once with instant_resource_count' do
|
524
|
-
d=Diagram.new 'simple'
|
525
|
-
|
526
|
-
d.add_node! Source, {
|
527
|
-
:name => 's1'
|
528
|
-
}
|
529
|
-
|
530
|
-
d.add_node! Pool, {
|
531
|
-
:name => 'd1',
|
532
|
-
:initial_value => 0
|
533
|
-
}
|
534
|
-
|
535
|
-
|
536
|
-
d.add_node! Source, {
|
537
|
-
:name => 's2',
|
538
|
-
:activation => :passive
|
539
|
-
}
|
540
|
-
|
541
|
-
d.add_edge! Edge, {
|
542
|
-
:name => 'c1',
|
543
|
-
:from => 's1',
|
544
|
-
:to => 'd1'
|
545
|
-
}
|
546
|
-
|
547
|
-
d.add_node! Pool, {
|
548
|
-
:name => 'd2',
|
549
|
-
:initial_value => 0
|
550
|
-
}
|
551
|
-
|
552
|
-
|
553
|
-
d.add_edge! Edge, {
|
554
|
-
:name => 'c2',
|
555
|
-
:from => 's2',
|
556
|
-
:to => 'd2'
|
557
|
-
}
|
558
|
-
|
559
|
-
|
560
|
-
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').instant_resource_count > 3 }, d.get_node('s1')])
|
561
|
-
d.get_node('d1').attach_trigger([lambda { d.get_node('d1').instant_resource_count > 3 }, d.get_node('s2')])
|
562
|
-
#d.extend(Verbose)
|
563
|
-
d.run!(6)
|
564
|
-
|
565
|
-
expect(d.resource_count).to eq 12
|
566
|
-
expect(d.get_node('d1').resource_count).to eq 9
|
567
|
-
expect(d.get_node('d2').resource_count).to eq 3
|
568
|
-
|
569
|
-
end
|
570
359
|
|
571
360
|
context 'integration' do
|
572
361
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rachinations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felipe Almeida
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '10.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '10.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,58 +56,44 @@ dependencies:
|
|
56
56
|
name: minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '5.4'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '5.4'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: minitest-reporters
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: cucumber
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
73
|
+
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
75
|
+
version: '1.0'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- - "
|
80
|
+
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
82
|
+
version: '1.0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: coveralls
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- -
|
87
|
+
- - '='
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
89
|
+
version: 0.7.0
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- -
|
94
|
+
- - '='
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 0.7.0
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: activesupport
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,6 +154,7 @@ files:
|
|
168
154
|
- lib/rachinations/domain/exceptions/unsupported_type_error.rb
|
169
155
|
- lib/rachinations/domain/modules/common/hash_init.rb
|
170
156
|
- lib/rachinations/domain/modules/common/invariant.rb
|
157
|
+
- lib/rachinations/domain/modules/common/refiners/proc_convenience_methods.rb
|
171
158
|
- lib/rachinations/domain/modules/diagrams/verbose.rb
|
172
159
|
- lib/rachinations/domain/node_collection.rb
|
173
160
|
- lib/rachinations/domain/nodes/converter.rb
|
@@ -221,9 +208,10 @@ files:
|
|
221
208
|
- testing/simulations/sobonito.rb
|
222
209
|
- testing/simulations/sobonitowhile.rb
|
223
210
|
- testing/simulations/whatIwish1.rb
|
211
|
+
- testing/spec/canon/conditions_spec.rb
|
224
212
|
- testing/spec/canon/converter_spec.rb
|
225
213
|
- testing/spec/canon/pool_spec.rb
|
226
|
-
- testing/spec/
|
214
|
+
- testing/spec/canon/trigger_spec.rb
|
227
215
|
- testing/spec/converter_spec.rb
|
228
216
|
- testing/spec/diagram_spec.rb
|
229
217
|
- testing/spec/edge_spec.rb
|
@@ -267,9 +255,10 @@ test_files:
|
|
267
255
|
- testing/simulations/sobonito.rb
|
268
256
|
- testing/simulations/sobonitowhile.rb
|
269
257
|
- testing/simulations/whatIwish1.rb
|
258
|
+
- testing/spec/canon/conditions_spec.rb
|
270
259
|
- testing/spec/canon/converter_spec.rb
|
271
260
|
- testing/spec/canon/pool_spec.rb
|
272
|
-
- testing/spec/
|
261
|
+
- testing/spec/canon/trigger_spec.rb
|
273
262
|
- testing/spec/converter_spec.rb
|
274
263
|
- testing/spec/diagram_spec.rb
|
275
264
|
- testing/spec/edge_spec.rb
|