rachinations 0.0.2 → 0.0.3
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 +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
|