sashite-ggn 0.1.0 → 0.3.0

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.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.md +17 -18
  3. data/README.md +356 -506
  4. data/lib/sashite/ggn/piece/source/destination/engine/transition.rb +90 -0
  5. data/lib/sashite/ggn/piece/source/destination/engine.rb +407 -0
  6. data/lib/sashite/ggn/piece/source/destination.rb +65 -0
  7. data/lib/sashite/ggn/piece/source.rb +71 -0
  8. data/lib/sashite/ggn/piece.rb +77 -0
  9. data/lib/sashite/ggn/schema.rb +152 -0
  10. data/lib/sashite/ggn/validation_error.rb +31 -0
  11. data/lib/sashite/ggn.rb +317 -5
  12. data/lib/sashite-ggn.rb +112 -1
  13. metadata +31 -151
  14. data/.gitignore +0 -22
  15. data/.ruby-version +0 -1
  16. data/.travis.yml +0 -3
  17. data/Gemfile +0 -2
  18. data/Rakefile +0 -7
  19. data/VERSION.semver +0 -1
  20. data/lib/sashite/ggn/ability.rb +0 -29
  21. data/lib/sashite/ggn/actor.rb +0 -20
  22. data/lib/sashite/ggn/ally.rb +0 -20
  23. data/lib/sashite/ggn/area.rb +0 -17
  24. data/lib/sashite/ggn/attacked.rb +0 -20
  25. data/lib/sashite/ggn/boolean.rb +0 -17
  26. data/lib/sashite/ggn/digit.rb +0 -20
  27. data/lib/sashite/ggn/digit_excluding_zero.rb +0 -17
  28. data/lib/sashite/ggn/direction.rb +0 -19
  29. data/lib/sashite/ggn/gameplay.rb +0 -20
  30. data/lib/sashite/ggn/gameplay_into_base64.rb +0 -21
  31. data/lib/sashite/ggn/integer.rb +0 -20
  32. data/lib/sashite/ggn/last_moved_actor.rb +0 -20
  33. data/lib/sashite/ggn/maximum_magnitude.rb +0 -20
  34. data/lib/sashite/ggn/name.rb +0 -17
  35. data/lib/sashite/ggn/negative_integer.rb +0 -19
  36. data/lib/sashite/ggn/null.rb +0 -21
  37. data/lib/sashite/ggn/object.rb +0 -28
  38. data/lib/sashite/ggn/occupied.rb +0 -29
  39. data/lib/sashite/ggn/pattern.rb +0 -20
  40. data/lib/sashite/ggn/previous_moves_counter.rb +0 -20
  41. data/lib/sashite/ggn/promotable_into_actors.rb +0 -23
  42. data/lib/sashite/ggn/required.rb +0 -19
  43. data/lib/sashite/ggn/self.rb +0 -21
  44. data/lib/sashite/ggn/square.rb +0 -29
  45. data/lib/sashite/ggn/state.rb +0 -26
  46. data/lib/sashite/ggn/subject.rb +0 -29
  47. data/lib/sashite/ggn/unsigned_integer.rb +0 -20
  48. data/lib/sashite/ggn/unsigned_integer_excluding_zero.rb +0 -20
  49. data/lib/sashite/ggn/verb.rb +0 -33
  50. data/lib/sashite/ggn/zero.rb +0 -21
  51. data/sashite-ggn.gemspec +0 -19
  52. data/test/_test_helper.rb +0 -2
  53. data/test/test_ggn.rb +0 -552
  54. data/test/test_ggn_ability.rb +0 -51
  55. data/test/test_ggn_actor.rb +0 -571
  56. data/test/test_ggn_ally.rb +0 -35
  57. data/test/test_ggn_area.rb +0 -21
  58. data/test/test_ggn_attacked.rb +0 -35
  59. data/test/test_ggn_boolean.rb +0 -21
  60. data/test/test_ggn_digit.rb +0 -21
  61. data/test/test_ggn_digit_excluding_zero.rb +0 -21
  62. data/test/test_ggn_direction.rb +0 -21
  63. data/test/test_ggn_gameplay.rb +0 -557
  64. data/test/test_ggn_gameplay_into_base64.rb +0 -555
  65. data/test/test_ggn_integer.rb +0 -39
  66. data/test/test_ggn_last_moved_actor.rb +0 -35
  67. data/test/test_ggn_maximum_magnitude.rb +0 -39
  68. data/test/test_ggn_name.rb +0 -21
  69. data/test/test_ggn_negative_integer.rb +0 -21
  70. data/test/test_ggn_null.rb +0 -21
  71. data/test/test_ggn_object.rb +0 -33
  72. data/test/test_ggn_occupied.rb +0 -78
  73. data/test/test_ggn_pattern.rb +0 -84
  74. data/test/test_ggn_previous_moves_counter.rb +0 -39
  75. data/test/test_ggn_promotable_into_actors.rb +0 -578
  76. data/test/test_ggn_required.rb +0 -21
  77. data/test/test_ggn_self.rb +0 -21
  78. data/test/test_ggn_square.rb +0 -25
  79. data/test/test_ggn_state.rb +0 -24
  80. data/test/test_ggn_subject.rb +0 -28
  81. data/test/test_ggn_unsigned_integer.rb +0 -39
  82. data/test/test_ggn_unsigned_integer_excluding_zero.rb +0 -25
  83. data/test/test_ggn_verb.rb +0 -27
  84. data/test/test_ggn_zero.rb +0 -21
data/test/test_ggn.rb DELETED
@@ -1,552 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::GGN do
4
- subject { Sashite::GGN }
5
-
6
- describe '.load' do
7
- it 'loads a document from the current io stream' do
8
- subject.load(
9
- 't<self>_&_^remove[-1,0]1/t=_@f+all~_@an_enemy_actor+all%self. ' +
10
- 't<self>_&_^remove[0,-1]1/t=_@f+all~_@an_enemy_actor+all%self. ' +
11
- 't<self>_&_^remove[0,1]1/t=_@f+all~_@an_enemy_actor+all%self. ' +
12
- 't<self>_&_^remove[1,0]1/t=_@f+all~_@an_enemy_actor+all%self. ' +
13
- 't<self>_&_^shift[-1,0]_/t=_@f+all~_@f+all%self. ' +
14
- 't<self>_&_^shift[-1,0]_/t=_@f+all~_@f+all%self; t<self>_&_^remove[-1,0]1/t=_@f+all~_@an_enemy_actor+all%self. ' +
15
- 't<self>_&_^shift[0,-1]_/t=_@f+all~_@f+all%self. ' +
16
- 't<self>_&_^shift[0,-1]_/t=_@f+all~_@f+all%self; t<self>_&_^remove[0,-1]1/t=_@f+all~_@an_enemy_actor+all%self. ' +
17
- 't<self>_&_^shift[0,1]_/t=_@f+all~_@f+all%self. ' +
18
- 't<self>_&_^shift[0,1]_/t=_@f+all~_@f+all%self; t<self>_&_^remove[0,1]1/t=_@f+all~_@an_enemy_actor+all%self. ' +
19
- 't<self>_&_^shift[1,0]_/t=_@f+all~_@f+all%self. ' +
20
- 't<self>_&_^shift[1,0]_/t=_@f+all~_@f+all%self; t<self>_&_^remove[1,0]1/t=_@f+all~_@an_enemy_actor+all%self.'
21
- ).hash.must_equal [
22
- [
23
- {
24
- :"subject" => {
25
- :"...ally?" => true,
26
- :"actor" => :self,
27
- :"state" => {
28
- :"...last_moved_actor?" => nil,
29
- :"...previous_moves_counter" => nil
30
- }
31
- },
32
-
33
- :"verb" => {
34
- :"name" => :remove,
35
- :"vector" => {:"...maximum_magnitude" => 1, direction: [-1,0]}
36
- },
37
-
38
- :"object" => {
39
- :"src_square" => {
40
- :"...attacked?" => nil,
41
- :"...occupied!" => false,
42
- :"area" => :all
43
- },
44
- :"dst_square" => {
45
- :"...attacked?" => nil,
46
- :"...occupied!" => :an_enemy_actor,
47
- :"area" => :all
48
- },
49
- :"promotable_into_actors" => [:self]
50
- }
51
- }
52
- ],
53
-
54
-
55
-
56
- [
57
- {
58
- :"subject" => {
59
- :"...ally?" => true,
60
- :"actor" => :self,
61
- :"state" => {
62
- :"...last_moved_actor?" => nil,
63
- :"...previous_moves_counter" => nil
64
- }
65
- },
66
-
67
- :"verb" => {
68
- :"name" => :remove,
69
- :"vector" => {:"...maximum_magnitude" => 1, direction: [0,-1]}
70
- },
71
-
72
- :"object" => {
73
- :"src_square" => {
74
- :"...attacked?" => nil,
75
- :"...occupied!" => false,
76
- :"area" => :all
77
- },
78
- :"dst_square" => {
79
- :"...attacked?" => nil,
80
- :"...occupied!" => :an_enemy_actor,
81
- :"area" => :all
82
- },
83
- :"promotable_into_actors" => [:self]
84
- }
85
- }
86
- ],
87
-
88
-
89
-
90
- [
91
- {
92
- :"subject" => {
93
- :"...ally?" => true,
94
- :"actor" => :self,
95
- :"state" => {
96
- :"...last_moved_actor?" => nil,
97
- :"...previous_moves_counter" => nil
98
- }
99
- },
100
-
101
- :"verb" => {
102
- :"name" => :remove,
103
- :"vector" => {:"...maximum_magnitude" => 1, direction: [0,1]}
104
- },
105
-
106
- :"object" => {
107
- :"src_square" => {
108
- :"...attacked?" => nil,
109
- :"...occupied!" => false,
110
- :"area" => :all
111
- },
112
- :"dst_square" => {
113
- :"...attacked?" => nil,
114
- :"...occupied!" => :an_enemy_actor,
115
- :"area" => :all
116
- },
117
- :"promotable_into_actors" => [:self]
118
- }
119
- }
120
- ],
121
-
122
-
123
-
124
- [
125
- {
126
- :"subject" => {
127
- :"...ally?" => true,
128
- :"actor" => :self,
129
- :"state" => {
130
- :"...last_moved_actor?" => nil,
131
- :"...previous_moves_counter" => nil
132
- }
133
- },
134
-
135
- :"verb" => {
136
- :"name" => :remove,
137
- :"vector" => {:"...maximum_magnitude" => 1, direction: [1,0]}
138
- },
139
-
140
- :"object" => {
141
- :"src_square" => {
142
- :"...attacked?" => nil,
143
- :"...occupied!" => false,
144
- :"area" => :all
145
- },
146
- :"dst_square" => {
147
- :"...attacked?" => nil,
148
- :"...occupied!" => :an_enemy_actor,
149
- :"area" => :all
150
- },
151
- :"promotable_into_actors" => [:self]
152
- }
153
- }
154
- ],
155
-
156
-
157
-
158
- [
159
- {
160
- :"subject" => {
161
- :"...ally?" => true,
162
- :"actor" => :self,
163
- :"state" => {
164
- :"...last_moved_actor?" => nil,
165
- :"...previous_moves_counter" => nil
166
- }
167
- },
168
-
169
- :"verb" => {
170
- :"name" => :shift,
171
- :"vector" => {:"...maximum_magnitude" => nil, direction: [-1,0]}
172
- },
173
-
174
- :"object" => {
175
- :"src_square" => {
176
- :"...attacked?" => nil,
177
- :"...occupied!" => false,
178
- :"area" => :all
179
- },
180
- :"dst_square" => {
181
- :"...attacked?" => nil,
182
- :"...occupied!" => false,
183
- :"area" => :all
184
- },
185
- :"promotable_into_actors" => [:self]
186
- }
187
- }
188
- ],
189
-
190
-
191
-
192
- [
193
- {
194
- :"subject" => {
195
- :"...ally?" => true,
196
- :"actor" => :self,
197
- :"state" => {
198
- :"...last_moved_actor?" => nil,
199
- :"...previous_moves_counter" => nil
200
- }
201
- },
202
-
203
- :"verb" => {
204
- :"name" => :shift,
205
- :"vector" => {:"...maximum_magnitude" => nil, direction: [-1,0]}
206
- },
207
-
208
- :"object" => {
209
- :"src_square" => {
210
- :"...attacked?" => nil,
211
- :"...occupied!" => false,
212
- :"area" => :all
213
- },
214
- :"dst_square" => {
215
- :"...attacked?" => nil,
216
- :"...occupied!" => false,
217
- :"area" => :all
218
- },
219
- :"promotable_into_actors" => [:self]
220
- }
221
- },
222
- {
223
- :"subject" => {
224
- :"...ally?" => true,
225
- :"actor" => :self,
226
- :"state" => {
227
- :"...last_moved_actor?" => nil,
228
- :"...previous_moves_counter" => nil
229
- }
230
- },
231
-
232
- :"verb" => {
233
- :"name" => :remove,
234
- :"vector" => {:"...maximum_magnitude" => 1, direction: [-1,0]}
235
- },
236
-
237
- :"object" => {
238
- :"src_square" => {
239
- :"...attacked?" => nil,
240
- :"...occupied!" => false,
241
- :"area" => :all
242
- },
243
- :"dst_square" => {
244
- :"...attacked?" => nil,
245
- :"...occupied!" => :an_enemy_actor,
246
- :"area" => :all
247
- },
248
- :"promotable_into_actors" => [:self]
249
- }
250
- }
251
- ],
252
-
253
-
254
-
255
- [
256
- {
257
- :"subject" => {
258
- :"...ally?" => true,
259
- :"actor" => :self,
260
- :"state" => {
261
- :"...last_moved_actor?" => nil,
262
- :"...previous_moves_counter" => nil
263
- }
264
- },
265
-
266
- :"verb" => {
267
- :"name" => :shift,
268
- :"vector" => {:"...maximum_magnitude" => nil, direction: [0,-1]}
269
- },
270
-
271
- :"object" => {
272
- :"src_square" => {
273
- :"...attacked?" => nil,
274
- :"...occupied!" => false,
275
- :"area" => :all
276
- },
277
- :"dst_square" => {
278
- :"...attacked?" => nil,
279
- :"...occupied!" => false,
280
- :"area" => :all
281
- },
282
- :"promotable_into_actors" => [:self]
283
- }
284
- }
285
- ],
286
-
287
-
288
-
289
- [
290
- {
291
- :"subject" => {
292
- :"...ally?" => true,
293
- :"actor" => :self,
294
- :"state" => {
295
- :"...last_moved_actor?" => nil,
296
- :"...previous_moves_counter" => nil
297
- }
298
- },
299
-
300
- :"verb" => {
301
- :"name" => :shift,
302
- :"vector" => {:"...maximum_magnitude" => nil, direction: [0,-1]}
303
- },
304
-
305
- :"object" => {
306
- :"src_square" => {
307
- :"...attacked?" => nil,
308
- :"...occupied!" => false,
309
- :"area" => :all
310
- },
311
- :"dst_square" => {
312
- :"...attacked?" => nil,
313
- :"...occupied!" => false,
314
- :"area" => :all
315
- },
316
- :"promotable_into_actors" => [:self]
317
- }
318
- },
319
- {
320
- :"subject" => {
321
- :"...ally?" => true,
322
- :"actor" => :self,
323
- :"state" => {
324
- :"...last_moved_actor?" => nil,
325
- :"...previous_moves_counter" => nil
326
- }
327
- },
328
-
329
- :"verb" => {
330
- :"name" => :remove,
331
- :"vector" => {:"...maximum_magnitude" => 1, direction: [0,-1]}
332
- },
333
-
334
- :"object" => {
335
- :"src_square" => {
336
- :"...attacked?" => nil,
337
- :"...occupied!" => false,
338
- :"area" => :all
339
- },
340
- :"dst_square" => {
341
- :"...attacked?" => nil,
342
- :"...occupied!" => :an_enemy_actor,
343
- :"area" => :all
344
- },
345
- :"promotable_into_actors" => [:self]
346
- }
347
- }
348
- ],
349
-
350
-
351
-
352
- [
353
- {
354
- :"subject" => {
355
- :"...ally?" => true,
356
- :"actor" => :self,
357
- :"state" => {
358
- :"...last_moved_actor?" => nil,
359
- :"...previous_moves_counter" => nil
360
- }
361
- },
362
-
363
- :"verb" => {
364
- :"name" => :shift,
365
- :"vector" => {:"...maximum_magnitude" => nil, direction: [0,1]}
366
- },
367
-
368
- :"object" => {
369
- :"src_square" => {
370
- :"...attacked?" => nil,
371
- :"...occupied!" => false,
372
- :"area" => :all
373
- },
374
- :"dst_square" => {
375
- :"...attacked?" => nil,
376
- :"...occupied!" => false,
377
- :"area" => :all
378
- },
379
- :"promotable_into_actors" => [:self]
380
- }
381
- }
382
- ],
383
-
384
-
385
-
386
- [
387
- {
388
- :"subject" => {
389
- :"...ally?" => true,
390
- :"actor" => :self,
391
- :"state" => {
392
- :"...last_moved_actor?" => nil,
393
- :"...previous_moves_counter" => nil
394
- }
395
- },
396
-
397
- :"verb" => {
398
- :"name" => :shift,
399
- :"vector" => {:"...maximum_magnitude" => nil, direction: [0,1]}
400
- },
401
-
402
- :"object" => {
403
- :"src_square" => {
404
- :"...attacked?" => nil,
405
- :"...occupied!" => false,
406
- :"area" => :all
407
- },
408
- :"dst_square" => {
409
- :"...attacked?" => nil,
410
- :"...occupied!" => false,
411
- :"area" => :all
412
- },
413
- :"promotable_into_actors" => [:self]
414
- }
415
- },
416
- {
417
- :"subject" => {
418
- :"...ally?" => true,
419
- :"actor" => :self,
420
- :"state" => {
421
- :"...last_moved_actor?" => nil,
422
- :"...previous_moves_counter" => nil
423
- }
424
- },
425
-
426
- :"verb" => {
427
- :"name" => :remove,
428
- :"vector" => {:"...maximum_magnitude" => 1, direction: [0,1]}
429
- },
430
-
431
- :"object" => {
432
- :"src_square" => {
433
- :"...attacked?" => nil,
434
- :"...occupied!" => false,
435
- :"area" => :all
436
- },
437
- :"dst_square" => {
438
- :"...attacked?" => nil,
439
- :"...occupied!" => :an_enemy_actor,
440
- :"area" => :all
441
- },
442
- :"promotable_into_actors" => [:self]
443
- }
444
- }
445
- ],
446
-
447
-
448
-
449
- [
450
- {
451
- :"subject" => {
452
- :"...ally?" => true,
453
- :"actor" => :self,
454
- :"state" => {
455
- :"...last_moved_actor?" => nil,
456
- :"...previous_moves_counter" => nil
457
- }
458
- },
459
-
460
- :"verb" => {
461
- :"name" => :shift,
462
- :"vector" => {:"...maximum_magnitude" => nil, direction: [1,0]}
463
- },
464
-
465
- :"object" => {
466
- :"src_square" => {
467
- :"...attacked?" => nil,
468
- :"...occupied!" => false,
469
- :"area" => :all
470
- },
471
- :"dst_square" => {
472
- :"...attacked?" => nil,
473
- :"...occupied!" => false,
474
- :"area" => :all
475
- },
476
- :"promotable_into_actors" => [:self]
477
- }
478
- }
479
- ],
480
-
481
-
482
-
483
- [
484
- {
485
- :"subject" => {
486
- :"...ally?" => true,
487
- :"actor" => :self,
488
- :"state" => {
489
- :"...last_moved_actor?" => nil,
490
- :"...previous_moves_counter" => nil
491
- }
492
- },
493
-
494
- :"verb" => {
495
- :"name" => :shift,
496
- :"vector" => {:"...maximum_magnitude" => nil, direction: [1,0]}
497
- },
498
-
499
- :"object" => {
500
- :"src_square" => {
501
- :"...attacked?" => nil,
502
- :"...occupied!" => false,
503
- :"area" => :all
504
- },
505
- :"dst_square" => {
506
- :"...attacked?" => nil,
507
- :"...occupied!" => false,
508
- :"area" => :all
509
- },
510
- :"promotable_into_actors" => [:self]
511
- }
512
- },
513
- {
514
- :"subject" => {
515
- :"...ally?" => true,
516
- :"actor" => :self,
517
- :"state" => {
518
- :"...last_moved_actor?" => nil,
519
- :"...previous_moves_counter" => nil
520
- }
521
- },
522
-
523
- :"verb" => {
524
- :"name" => :remove,
525
- :"vector" => {:"...maximum_magnitude" => 1, direction: [1,0]}
526
- },
527
-
528
- :"object" => {
529
- :"src_square" => {
530
- :"...attacked?" => nil,
531
- :"...occupied!" => false,
532
- :"area" => :all
533
- },
534
- :"dst_square" => {
535
- :"...attacked?" => nil,
536
- :"...occupied!" => :an_enemy_actor,
537
- :"area" => :all
538
- },
539
- :"promotable_into_actors" => [:self]
540
- }
541
- }
542
- ]
543
- ].hash
544
- end
545
-
546
- describe 'errors' do
547
- it 'raises without a gameplay' do
548
- -> { subject.load 'foobar' }.must_raise ArgumentError
549
- end
550
- end
551
- end
552
- end
@@ -1,51 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::GGN::Ability do
4
- subject { Sashite::GGN::Ability }
5
-
6
- describe '.load' do
7
- before do
8
- @ggn_obj = 't<self>_&_^shift[-1,0]_/t=_@f+all~_@f+all%self'
9
- end
10
-
11
- it 'loads a document from the current io stream' do
12
- subject.load(@ggn_obj).hash.must_equal(
13
- {
14
- subject: {
15
- :"...ally?" => true,
16
- :"actor" => :self,
17
- :"state" => {
18
- :"...last_moved_actor?" => nil,
19
- :"...previous_moves_counter" => nil
20
- }
21
- },
22
-
23
- verb: {
24
- name: :shift,
25
- vector: {direction: [-1,0], :"...maximum_magnitude" => nil}
26
- },
27
-
28
- object: {
29
- src_square: {
30
- :"...attacked?" => nil,
31
- :"...occupied!" => false,
32
- area: :all
33
- },
34
- dst_square: {
35
- :"...attacked?" => nil,
36
- :"...occupied!" => false,
37
- area: :all
38
- },
39
- promotable_into_actors: [:self]
40
- }
41
- }.hash
42
- )
43
- end
44
-
45
- describe 'errors' do
46
- it 'raises without an ability' do
47
- -> { subject.load 'foobar' }.must_raise ArgumentError
48
- end
49
- end
50
- end
51
- end