rachinations 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -1
  3. data/README.md +184 -5
  4. data/lib/rachinations.rb +5 -4
  5. data/lib/rachinations/domain/diagrams/diagram.rb +35 -24
  6. data/lib/rachinations/domain/exceptions/bad_config.rb +1 -1
  7. data/lib/rachinations/domain/{exceptions → modules/common}/bad_options.rb +0 -0
  8. data/lib/rachinations/domain/modules/common/hash_init.rb +1 -0
  9. data/lib/rachinations/domain/modules/common/refiners/number_modifiers.rb +2 -1
  10. data/lib/rachinations/domain/modules/diagrams/verbose.rb +1 -1
  11. data/lib/rachinations/domain/nodes/gate.rb +23 -27
  12. data/lib/rachinations/domain/nodes/node.rb +4 -20
  13. data/lib/rachinations/domain/nodes/pool.rb +2 -3
  14. data/lib/rachinations/domain/nodes/resourceful_node.rb +4 -3
  15. data/lib/rachinations/domain/nodes/sink.rb +1 -1
  16. data/lib/rachinations/dsl/bad_dsl.rb +3 -0
  17. data/lib/rachinations/dsl/bootstrap.rb +10 -8
  18. data/lib/rachinations/dsl/diagram_shorthand_methods.rb +10 -5
  19. data/lib/rachinations/dsl/helpers/parser.rb +83 -49
  20. data/lib/rachinations/helpers/edge_helper.rb +105 -8
  21. data/lib/rachinations/utils/math_utils.rb +83 -0
  22. data/lib/rachinations/utils/string_utils.rb +8 -0
  23. data/lib/rachinations/version.rb +1 -1
  24. data/rachinations.gemspec +2 -1
  25. data/testing/spec/diagram_spec.rb +78 -17
  26. data/testing/spec/gate_spec.rb +223 -2
  27. data/testing/spec/non_deterministic_diagram_spec.rb +1 -1
  28. data/testing/spec/release1/dsl_spec.rb +100 -3
  29. data/testing/spec/release1/individual_cases_spec.rb +39 -0
  30. data/testing/spec/release1/monografia_spec.rb +69 -0
  31. metadata +24 -5
  32. data/lib/rachinations/utils/string_helper.rb +0 -7
@@ -52,7 +52,7 @@ describe NonDeterministicDiagram do
52
52
 
53
53
  include DSL
54
54
 
55
- it ' makes a train run' do
55
+ it 'makes a train run' do
56
56
 
57
57
 
58
58
  d = NonDeterministicDiagram.new 'dia'
@@ -153,7 +153,6 @@ describe Diagram do
153
153
 
154
154
  end
155
155
 
156
-
157
156
  it 'example using push_all, activators and triggers' do
158
157
 
159
158
  d = diagram do
@@ -218,7 +217,6 @@ describe Diagram do
218
217
 
219
218
  end
220
219
 
221
-
222
220
  it "accepts declaring forward-referencing of non existing nodes" do
223
221
 
224
222
  expect do
@@ -244,7 +242,7 @@ describe Diagram do
244
242
  it 'runs diagrams using forward-referencing' do
245
243
 
246
244
  d = diagram do
247
- pool 'p2',:automatic, :push_any, initial_value: 7 # this will be triggered 10 times
245
+ pool 'p2', :automatic, :push_any, initial_value: 7 # this will be triggered 10 times
248
246
  edge from: 'p2', to: 'p3'
249
247
  pool 'p3'
250
248
  end
@@ -266,5 +264,104 @@ describe Diagram do
266
264
 
267
265
  end
268
266
 
267
+ it 'runs until safeguard clauses have been met if run method is called with no params' do
268
+
269
+ expect {
270
+
271
+ d = diagram do
272
+ source 's1'
273
+ edge from: 's1', to: 'p1'
274
+ pool 'p1'
275
+ end
276
+
277
+ d.run
278
+
279
+ }.not_to raise_exception
280
+ end
281
+
282
+ it 'stops when a single stopping condition turns true' do
283
+
284
+ d = diagram 'win_lose' do
285
+
286
+ sink 'sink'
287
+
288
+ source 'green_shots', :automatic
289
+ edge from: 'green_shots', to: 'g1'
290
+ gate 'g1'
291
+ edge from: 'g1', to: 'green_points', label: 40.percent
292
+ # it feels a bit weird having to add a sink just to make labels add up to 1
293
+ edge from: 'g1', to: 'sink', label: 60.percent
294
+ pool 'green_points'
295
+
296
+ source 'red_shots', :automatic
297
+ edge from: 'red_shots', to: 'g2'
298
+ gate 'g2'
299
+ edge from: 'g2', to: 'red_points', label: 50.percent
300
+ # it feels a bit weird having to add a sink just to make labels add up to 1
301
+ edge from: 'g2', to: 'sink', label: 50.percent
302
+ pool 'red_points'
303
+
304
+ stop 'green wins', expr { green_points.resource_count >= 10 }
305
+ stop 'red wins', expr { red_points.resource_count >= 10 }
306
+
307
+ end
308
+
309
+ d.run
310
+ expect(d.green_points.resource_count == 10 || d.red_points.resource_count == 10).to be true
311
+
312
+ end
313
+
314
+ it 'probabilistic gates' do
315
+
316
+ d = diagram 'exemplo_3_monografia' do
317
+ source 's1'
318
+ gate 'g1', :probabilistic
319
+ pool 'p1'
320
+ pool 'p2'
321
+ pool 'p3'
322
+ sink 's2', :automatic, condition: expr{ p2.resource_count > 30 }
323
+ edge from: 's1', to: 'g1'
324
+ edge from: 'g1', to: 'p1'
325
+ edge 2,from:'g1', to:'p2'
326
+ edge from:'g1', to:'p3'
327
+ edge from:'p3', to:'s2'
328
+
329
+ end
330
+
331
+ d.run
332
+
333
+ # after a lot of turns, the sink will dominate other nodes
334
+ # using a range because in the last turn p3 may have received one resource and
335
+ # maybe the sink hasn't pulled it yet
336
+ expect(d.p3.resource_count).to be_within(1).of(0)
337
+
338
+ end
339
+
340
+ it 'deterministic gates' do
341
+
342
+ # this example was taken from gate_spec.rb and adapted to use the DSL instead.
343
+
344
+ d = diagram do
345
+ source 's'
346
+ gate 'g', :deterministic
347
+ pool 'p1'
348
+ pool 'p2'
349
+ pool 'p3'
350
+ edge from: 's', to: 'g'
351
+ edge 2, from: 'g', to: 'p1'
352
+ edge from: 'g', to: 'p2'
353
+ edge from: 'g', to: 'p3'
354
+ end
355
+
356
+ d.run 12
357
+
358
+ expect(d.p1.resource_count).to eq(6)
359
+ expect(d.p2.resource_count).to eq(3)
360
+ expect(d.p3.resource_count).to eq(3)
361
+
362
+
363
+ end
364
+
269
365
  end
366
+
270
367
  end
@@ -0,0 +1,39 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe 'Special diagram examples' do
4
+
5
+ it 'ticket #77' do
6
+
7
+ skip
8
+
9
+ p=diagram 'strongerpingpong', mode: :verbose do
10
+
11
+ pool 'left', :automatic, initial_value: 1
12
+ pool 'right', :automatic
13
+
14
+ source 'newleft', activation: :passive
15
+ source 'newright', activation: :passive
16
+
17
+ pool 'rightpoint', triggers: 'newright'
18
+ pool 'leftpoint', triggers: 'newleft'
19
+
20
+ gate 'lgame'
21
+ gate 'rgame'
22
+
23
+ edge from: 'left', to: 'lgame'
24
+ edge from: 'lgame', to: 'right', label: 3/7
25
+ edge from: 'lgame', to: 'rightpoint', label: 4/5
26
+
27
+ edge from: 'right', to: 'rgame'
28
+ edge from: 'rgame', to: 'left', label: 3/5
29
+ edge from: 'rgame', to: 'leftpoint', label: 2/5
30
+
31
+ edge from: 'newleft', to: 'left', label: 1
32
+ edge from: 'newright', to: 'right', label: 1
33
+
34
+ end
35
+
36
+ p.run 10
37
+
38
+ end
39
+ end
@@ -0,0 +1,69 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe 'monografia spec' do
4
+
5
+ describe 'examples without dsl' do
6
+
7
+ end
8
+
9
+ describe 'examples with dsl' do
10
+
11
+ it 'example_3' do
12
+
13
+ diagram 'exemplo_3' do
14
+
15
+ source 's1'
16
+ gate 'g1', :probabilistic
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+ describe 'full specification' do
24
+
25
+ context ' when creating diagram' do
26
+
27
+ it 'is created with no name or options' do
28
+
29
+ diagram do
30
+ pool
31
+ end
32
+
33
+ end
34
+
35
+ it 'is created with name but no options' do
36
+
37
+ diagram 'my_diagram' do
38
+ pool 98
39
+ end
40
+
41
+ end
42
+
43
+ it 'is created with all supported options' do
44
+
45
+ [:default, :silent, :verbose].each do |runmode|
46
+
47
+ diagram 'test', mode: runmode do
48
+ pool 89
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ it 'complains if given option is invalid' do
56
+
57
+ expect {
58
+ diagram 'test', mode: :foo do
59
+ pool
60
+ end
61
+ }.to raise_error(BadDSL)
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
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.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felipe Almeida
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-26 00:00:00.000000000 Z
11
+ date: 2015-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,8 +136,22 @@ dependencies:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
138
  version: 1.0.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: fraction
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 0.3.2
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 0.3.2
139
153
  description: |-
140
- This project provides a Ruby-based DiagramShorthandMethods to enable game designers to
154
+ This project provides a Ruby-based Diagram to enable game designers to
141
155
  design and also test tentative game designs and/or prototypes
142
156
  email:
143
157
  - falmeida1988@gmail.com
@@ -161,11 +175,11 @@ files:
161
175
  - lib/rachinations/domain/edge_collection.rb
162
176
  - lib/rachinations/domain/edges/edge.rb
163
177
  - lib/rachinations/domain/exceptions/bad_config.rb
164
- - lib/rachinations/domain/exceptions/bad_options.rb
165
178
  - lib/rachinations/domain/exceptions/no_elements_found.rb
166
179
  - lib/rachinations/domain/exceptions/no_elements_matching_condition_error.rb
167
180
  - lib/rachinations/domain/exceptions/no_elements_of_given_type.rb
168
181
  - lib/rachinations/domain/exceptions/unsupported_type_error.rb
182
+ - lib/rachinations/domain/modules/common/bad_options.rb
169
183
  - lib/rachinations/domain/modules/common/hash_init.rb
170
184
  - lib/rachinations/domain/modules/common/invariant.rb
171
185
  - lib/rachinations/domain/modules/common/refiners/number_modifiers.rb
@@ -193,7 +207,8 @@ files:
193
207
  - lib/rachinations/extras/constant_hash.rb
194
208
  - lib/rachinations/extras/fifo.rb
195
209
  - lib/rachinations/helpers/edge_helper.rb
196
- - lib/rachinations/utils/string_helper.rb
210
+ - lib/rachinations/utils/math_utils.rb
211
+ - lib/rachinations/utils/string_utils.rb
197
212
  - lib/rachinations/version.rb
198
213
  - machinations_diagrams/apenas_bonito.xml
199
214
  - machinations_diagrams/behavior_converter.xml
@@ -242,6 +257,8 @@ files:
242
257
  - testing/spec/non_deterministic_diagram_spec.rb
243
258
  - testing/spec/pool_spec.rb
244
259
  - testing/spec/release1/dsl_spec.rb
260
+ - testing/spec/release1/individual_cases_spec.rb
261
+ - testing/spec/release1/monografia_spec.rb
245
262
  - testing/spec/source_spec.rb
246
263
  - testing/spec/spec_helper.rb
247
264
  - testing/spec/xexeo_spec.rb
@@ -290,6 +307,8 @@ test_files:
290
307
  - testing/spec/non_deterministic_diagram_spec.rb
291
308
  - testing/spec/pool_spec.rb
292
309
  - testing/spec/release1/dsl_spec.rb
310
+ - testing/spec/release1/individual_cases_spec.rb
311
+ - testing/spec/release1/monografia_spec.rb
293
312
  - testing/spec/source_spec.rb
294
313
  - testing/spec/spec_helper.rb
295
314
  - testing/spec/xexeo_spec.rb
@@ -1,7 +0,0 @@
1
- module StringHelper
2
-
3
- def self.valid_ruby_variable_name?(str)
4
- (/^[a-z_][a-zA-Z_0-9]*$/ =~ str) == 0
5
- end
6
-
7
- end