sashite-ggn 0.0.1 → 0.1.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.
- checksums.yaml +4 -4
- data/README.md +523 -521
- data/VERSION.semver +1 -1
- data/lib/sashite/ggn.rb +3 -2
- data/lib/sashite/ggn/ability.rb +11 -19
- data/lib/sashite/ggn/actor.rb +5 -13
- data/lib/sashite/ggn/ally.rb +6 -14
- data/lib/sashite/ggn/area.rb +6 -14
- data/lib/sashite/ggn/attacked.rb +6 -14
- data/lib/sashite/ggn/boolean.rb +6 -14
- data/lib/sashite/ggn/digit.rb +6 -14
- data/lib/sashite/ggn/digit_excluding_zero.rb +6 -14
- data/lib/sashite/ggn/direction.rb +6 -14
- data/lib/sashite/ggn/gameplay.rb +8 -28
- data/lib/sashite/ggn/gameplay_into_base64.rb +7 -14
- data/lib/sashite/ggn/integer.rb +6 -14
- data/lib/sashite/ggn/last_moved_actor.rb +6 -14
- data/lib/sashite/ggn/maximum_magnitude.rb +6 -14
- data/lib/sashite/ggn/name.rb +6 -14
- data/lib/sashite/ggn/negative_integer.rb +6 -14
- data/lib/sashite/ggn/null.rb +7 -9
- data/lib/sashite/ggn/object.rb +11 -19
- data/lib/sashite/ggn/occupied.rb +12 -20
- data/lib/sashite/ggn/pattern.rb +7 -16
- data/lib/sashite/ggn/previous_moves_counter.rb +6 -14
- data/lib/sashite/ggn/promotable_into_actors.rb +8 -17
- data/lib/sashite/ggn/required.rb +6 -14
- data/lib/sashite/ggn/self.rb +7 -9
- data/lib/sashite/ggn/square.rb +11 -19
- data/lib/sashite/ggn/state.rb +9 -17
- data/lib/sashite/ggn/subject.rb +11 -19
- data/lib/sashite/ggn/unsigned_integer.rb +6 -14
- data/lib/sashite/ggn/unsigned_integer_excluding_zero.rb +5 -13
- data/lib/sashite/ggn/verb.rb +15 -24
- data/lib/sashite/ggn/zero.rb +7 -9
- data/sashite-ggn.gemspec +2 -4
- data/test/test_ggn.rb +501 -495
- data/test/test_ggn_ability.rb +10 -10
- data/test/test_ggn_actor.rb +516 -536
- data/test/test_ggn_ally.rb +13 -29
- data/test/test_ggn_area.rb +9 -67
- data/test/test_ggn_attacked.rb +13 -29
- data/test/test_ggn_boolean.rb +10 -26
- data/test/test_ggn_digit.rb +10 -10
- data/test/test_ggn_digit_excluding_zero.rb +10 -11
- data/test/test_ggn_direction.rb +10 -10
- data/test/test_ggn_gameplay.rb +22 -38
- data/test/test_ggn_gameplay_into_base64.rb +511 -501
- data/test/test_ggn_integer.rb +19 -21
- data/test/test_ggn_last_moved_actor.rb +13 -29
- data/test/test_ggn_maximum_magnitude.rb +18 -16
- data/test/test_ggn_name.rb +9 -39
- data/test/test_ggn_negative_integer.rb +10 -10
- data/test/test_ggn_null.rb +10 -10
- data/test/test_ggn_object.rb +22 -24
- data/test/test_ggn_occupied.rb +40 -64
- data/test/test_ggn_pattern.rb +12 -10
- data/test/test_ggn_previous_moves_counter.rb +18 -20
- data/test/test_ggn_promotable_into_actors.rb +529 -549
- data/test/test_ggn_required.rb +10 -26
- data/test/test_ggn_self.rb +10 -10
- data/test/test_ggn_square.rb +14 -16
- data/test/test_ggn_state.rb +15 -19
- data/test/test_ggn_subject.rb +17 -19
- data/test/test_ggn_unsigned_integer.rb +30 -12
- data/test/test_ggn_unsigned_integer_excluding_zero.rb +14 -10
- data/test/test_ggn_verb.rb +16 -15
- data/test/test_ggn_zero.rb +10 -10
- metadata +4 -18
data/VERSION.semver
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/lib/sashite/ggn.rb
CHANGED
data/lib/sashite/ggn/ability.rb
CHANGED
@@ -4,34 +4,26 @@ require_relative 'object'
|
|
4
4
|
|
5
5
|
module Sashite
|
6
6
|
module GGN
|
7
|
-
|
7
|
+
module Ability
|
8
8
|
PATTERN = /#{Subject::PATTERN}\^#{Verb::PATTERN}=#{Object::PATTERN}/
|
9
9
|
|
10
|
-
def self.valid?
|
11
|
-
!!
|
10
|
+
def self.valid? io
|
11
|
+
!!io.match("^#{PATTERN}$")
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
def self.load io
|
15
|
+
raise ArgumentError unless valid? io
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
subject = Subject.load io.split('^').fetch 0
|
18
|
+
verb = Verb.load io.split('^').fetch(1).split('=').fetch 0
|
19
|
+
object = Object.load io.split('=').fetch 1
|
18
20
|
|
19
|
-
@subject = Subject.new str.split('^').fetch 0
|
20
|
-
@verb = Verb.new str.split('^').fetch(1).split('=').fetch 0
|
21
|
-
@object = Object.new str.split('=').fetch 1
|
22
|
-
end
|
23
|
-
|
24
|
-
def as_json
|
25
21
|
{
|
26
|
-
subject:
|
27
|
-
verb:
|
28
|
-
object:
|
22
|
+
subject: subject,
|
23
|
+
verb: verb,
|
24
|
+
object: object
|
29
25
|
}
|
30
26
|
end
|
31
|
-
|
32
|
-
def to_s
|
33
|
-
"#{@subject}^#{@verb}=#{@object}"
|
34
|
-
end
|
35
27
|
end
|
36
28
|
end
|
37
29
|
end
|
data/lib/sashite/ggn/actor.rb
CHANGED
@@ -6,22 +6,14 @@ module Sashite
|
|
6
6
|
class Actor
|
7
7
|
PATTERN = /(#{Self::PATTERN}|#{GameplayIntoBase64::PATTERN})/
|
8
8
|
|
9
|
-
def self.valid?
|
10
|
-
!!
|
9
|
+
def self.valid? io
|
10
|
+
!!io.match("^#{PATTERN}$")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
raise ArgumentError unless
|
13
|
+
def self.load io
|
14
|
+
raise ArgumentError unless valid? io
|
15
15
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def as_json
|
20
|
-
@value.as_json
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
@value.to_s
|
16
|
+
Self.valid?(io) ? Self.load : GameplayIntoBase64.load(io)
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|
data/lib/sashite/ggn/ally.rb
CHANGED
@@ -3,25 +3,17 @@ require_relative 'null'
|
|
3
3
|
|
4
4
|
module Sashite
|
5
5
|
module GGN
|
6
|
-
|
6
|
+
module Ally
|
7
7
|
PATTERN = /(#{Boolean::PATTERN}|#{Null::PATTERN})/
|
8
8
|
|
9
|
-
def self.valid?
|
10
|
-
!!
|
9
|
+
def self.valid? io
|
10
|
+
!!io.match("^#{PATTERN}$")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
raise ArgumentError unless
|
13
|
+
def self.load io
|
14
|
+
raise ArgumentError unless valid? io
|
15
15
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def as_json
|
20
|
-
@value.as_json
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
@value.to_s
|
16
|
+
Null.valid?(io) ? Null.load : Boolean.load(io)
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|
data/lib/sashite/ggn/area.rb
CHANGED
@@ -1,24 +1,16 @@
|
|
1
1
|
module Sashite
|
2
2
|
module GGN
|
3
|
-
|
3
|
+
module Area
|
4
4
|
PATTERN = /(all|furthest_rank|palace|furthest_one-third|nearest_two-thirds)/
|
5
5
|
|
6
|
-
def self.valid?
|
7
|
-
!!
|
6
|
+
def self.valid? io
|
7
|
+
!!io.match("^#{PATTERN}$")
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
raise ArgumentError unless
|
10
|
+
def self.load io
|
11
|
+
raise ArgumentError unless valid? io
|
12
12
|
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
def as_json
|
17
|
-
@value
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_s
|
21
|
-
@value.to_s
|
13
|
+
io.to_sym
|
22
14
|
end
|
23
15
|
end
|
24
16
|
end
|
data/lib/sashite/ggn/attacked.rb
CHANGED
@@ -3,25 +3,17 @@ require_relative 'null'
|
|
3
3
|
|
4
4
|
module Sashite
|
5
5
|
module GGN
|
6
|
-
|
6
|
+
module Attacked
|
7
7
|
PATTERN = /(#{Boolean::PATTERN}|#{Null::PATTERN})/
|
8
8
|
|
9
|
-
def self.valid?
|
10
|
-
!!
|
9
|
+
def self.valid? io
|
10
|
+
!!io.match("^#{PATTERN}$")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
raise ArgumentError unless
|
13
|
+
def self.load io
|
14
|
+
raise ArgumentError unless valid? io
|
15
15
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def as_json
|
20
|
-
@value.as_json
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
@value.to_s
|
16
|
+
Null.valid?(io) ? Null.load : Boolean.load(io)
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|
data/lib/sashite/ggn/boolean.rb
CHANGED
@@ -1,24 +1,16 @@
|
|
1
1
|
module Sashite
|
2
2
|
module GGN
|
3
|
-
|
3
|
+
module Boolean
|
4
4
|
PATTERN = /[ft]/
|
5
5
|
|
6
|
-
def self.valid?
|
7
|
-
!!
|
6
|
+
def self.valid? io
|
7
|
+
!!io.match("^#{PATTERN}$")
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
raise ArgumentError unless
|
10
|
+
def self.load io
|
11
|
+
raise ArgumentError unless valid? io
|
12
12
|
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
def as_json
|
17
|
-
@value == :t
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_s
|
21
|
-
@value.to_s
|
13
|
+
io.to_sym == :t
|
22
14
|
end
|
23
15
|
end
|
24
16
|
end
|
data/lib/sashite/ggn/digit.rb
CHANGED
@@ -3,25 +3,17 @@ require_relative 'zero'
|
|
3
3
|
|
4
4
|
module Sashite
|
5
5
|
module GGN
|
6
|
-
|
6
|
+
module Digit
|
7
7
|
PATTERN = /(#{Zero::PATTERN}|#{DigitExcludingZero::PATTERN})/
|
8
8
|
|
9
|
-
def self.valid?
|
10
|
-
!!
|
9
|
+
def self.valid? io
|
10
|
+
!!io.match("^#{PATTERN}$")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
raise ArgumentError unless
|
13
|
+
def self.load io
|
14
|
+
raise ArgumentError unless valid? io
|
15
15
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def as_json
|
20
|
-
@value.as_json
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
@value.to_s
|
16
|
+
Zero.valid?(io) ? Zero.load : DigitExcludingZero.load(io)
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|
@@ -1,24 +1,16 @@
|
|
1
1
|
module Sashite
|
2
2
|
module GGN
|
3
|
-
|
3
|
+
module DigitExcludingZero
|
4
4
|
PATTERN = /[1-9]/
|
5
5
|
|
6
|
-
def self.valid?
|
7
|
-
!!
|
6
|
+
def self.valid? io
|
7
|
+
!!io.match("^#{PATTERN}$")
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
raise ArgumentError unless
|
10
|
+
def self.load io
|
11
|
+
raise ArgumentError unless valid? io
|
12
12
|
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
def as_json
|
17
|
-
@value
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_s
|
21
|
-
@value.to_s
|
13
|
+
io.to_i
|
22
14
|
end
|
23
15
|
end
|
24
16
|
end
|
@@ -2,25 +2,17 @@ require_relative 'integer'
|
|
2
2
|
|
3
3
|
module Sashite
|
4
4
|
module GGN
|
5
|
-
|
5
|
+
module Direction
|
6
6
|
PATTERN = /(#{Integer::PATTERN},)*#{Integer::PATTERN}/
|
7
7
|
|
8
|
-
def self.valid?
|
9
|
-
!!
|
8
|
+
def self.valid? io
|
9
|
+
!!io.match("^#{PATTERN}$")
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
raise ArgumentError unless
|
12
|
+
def self.load io
|
13
|
+
raise ArgumentError unless valid? io
|
14
14
|
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
def as_json
|
19
|
-
@integers.map &:as_json
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_s
|
23
|
-
@integers.join ','
|
15
|
+
io.split(',').map { |s| Integer.load s }
|
24
16
|
end
|
25
17
|
end
|
26
18
|
end
|
data/lib/sashite/ggn/gameplay.rb
CHANGED
@@ -1,39 +1,19 @@
|
|
1
|
-
require 'sashite-cgh'
|
2
1
|
require_relative 'pattern'
|
3
2
|
|
4
3
|
module Sashite
|
5
4
|
module GGN
|
6
|
-
|
5
|
+
module Gameplay
|
7
6
|
PATTERN = /#{Pattern::PATTERN}(\. #{Pattern::PATTERN})*\./
|
8
7
|
|
9
|
-
def self.valid?
|
10
|
-
|
8
|
+
def self.valid? io
|
9
|
+
io.match("^#{PATTERN}$") &&
|
10
|
+
io.split('. ').sort.join('. ') == io &&
|
11
|
+
io[0..-2].split('. ').uniq.join('. ').concat('.') == io
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
raise ArgumentError unless self.class.valid? str
|
17
|
-
|
18
|
-
@patterns = str[0..-2].split('. ').map { |pattern| Pattern.new pattern }
|
19
|
-
end
|
20
|
-
|
21
|
-
def as_json
|
22
|
-
@patterns.map &:as_json
|
23
|
-
end
|
24
|
-
|
25
|
-
def to_s
|
26
|
-
@patterns.map(&:to_s).join('. ') + '.'
|
27
|
-
end
|
28
|
-
|
29
|
-
def to_cgh
|
30
|
-
Sashite::CGH.parse to_s
|
31
|
-
end
|
32
|
-
|
33
|
-
def dimensions
|
34
|
-
first_pattern = @patterns.fetch 0
|
35
|
-
first_ability = first_pattern.abilities.fetch 0
|
36
|
-
first_ability.verb.dimensions
|
14
|
+
def self.load io
|
15
|
+
raise ArgumentError unless valid? io
|
16
|
+
io[0..-2].split('. ').map { |s| Pattern.load s }
|
37
17
|
end
|
38
18
|
end
|
39
19
|
end
|
@@ -3,25 +3,18 @@ require_relative 'gameplay'
|
|
3
3
|
|
4
4
|
module Sashite
|
5
5
|
module GGN
|
6
|
-
|
6
|
+
module GameplayIntoBase64
|
7
7
|
PATTERN = /(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?/
|
8
8
|
|
9
|
-
def self.valid?
|
10
|
-
|
9
|
+
def self.valid? io
|
10
|
+
io.match("^#{PATTERN}$") &&
|
11
|
+
Gameplay.valid?(Base64.strict_decode64(io))
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
-
raise ArgumentError unless
|
14
|
+
def self.load io
|
15
|
+
raise ArgumentError unless valid? io
|
15
16
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def as_json
|
20
|
-
@value.as_json
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
Base64.strict_encode64 @value.to_s
|
17
|
+
Gameplay.load Base64.strict_decode64(io)
|
25
18
|
end
|
26
19
|
end
|
27
20
|
end
|
data/lib/sashite/ggn/integer.rb
CHANGED
@@ -3,25 +3,17 @@ require_relative 'unsigned_integer'
|
|
3
3
|
|
4
4
|
module Sashite
|
5
5
|
module GGN
|
6
|
-
|
6
|
+
module Integer
|
7
7
|
PATTERN = /(#{NegativeInteger::PATTERN}|#{UnsignedInteger::PATTERN})/
|
8
8
|
|
9
|
-
def self.valid?
|
10
|
-
!!
|
9
|
+
def self.valid? io
|
10
|
+
!!io.match("^#{PATTERN}$")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
raise ArgumentError unless
|
13
|
+
def self.load io
|
14
|
+
raise ArgumentError unless valid? io
|
15
15
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def as_json
|
20
|
-
@value.as_json
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
@value.to_s
|
16
|
+
NegativeInteger.valid?(io) ? NegativeInteger.load(io) : UnsignedInteger.load(io)
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|
@@ -3,25 +3,17 @@ require_relative 'null'
|
|
3
3
|
|
4
4
|
module Sashite
|
5
5
|
module GGN
|
6
|
-
|
6
|
+
module LastMovedActor
|
7
7
|
PATTERN = /(#{Boolean::PATTERN}|#{Null::PATTERN})/
|
8
8
|
|
9
|
-
def self.valid?
|
10
|
-
!!
|
9
|
+
def self.valid? io
|
10
|
+
!!io.match("^#{PATTERN}$")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
raise ArgumentError unless
|
13
|
+
def self.load io
|
14
|
+
raise ArgumentError unless valid? io
|
15
15
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def as_json
|
20
|
-
@value.as_json
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
@value.to_s
|
16
|
+
Null.valid?(io) ? Null.load : Boolean.load(io)
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|