sashite-pan 1.2.0 → 1.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.
- checksums.yaml +4 -4
- data/LICENSE.md +1 -1
- data/README.md +49 -25
- data/lib/sashite-pan.rb +1 -1
- data/lib/sashite/pan.rb +2 -2
- data/lib/sashite/pan/action.rb +3 -3
- data/lib/sashite/pan/dumper.rb +4 -2
- data/lib/sashite/pan/parser.rb +3 -1
- metadata +35 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12680869115791fc6fe8332162cbeaa71174b8ba5c5d74ebb531a805355dae1b
|
4
|
+
data.tar.gz: 1147d462de504b726ec26337bf8bfa69b28a8d3e195dbf6b2922b9b3ccaa9cf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bcb5c10788c3ba49269612062c6eea16251f372a176efd8c390fbe2e7967562bb4c83a27f7f70dd4f5af4af8f3a9ee33695f5d2a1394d105dff00e65043b45d
|
7
|
+
data.tar.gz: 0afbe377cfe6b68a5748f74221ef4e6084c55e0439ae6d7234e6864d5403e65a3b2d19f1c5f6579869a795c994c1ccc3f8b1ef0c8bc5ed2df8734318817c0c9a
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Portable Action Notation
|
2
2
|
|
3
|
+
[](https://github.com/sashite/pan.rb/releases)
|
4
|
+
[](https://rubydoc.info/github/sashite/pan.rb/main)
|
5
|
+
[](https://github.com/sashite/pan.rb/actions?query=workflow%3Aci+branch%3Amain)
|
6
|
+
[](https://github.com/sashite/pan.rb/actions?query=workflow%3Arubocop+branch%3Amain)
|
7
|
+
[](https://github.com/sashite/pan.rb/raw/main/LICENSE.md)
|
8
|
+
|
3
9
|
A Ruby interface for data serialization in [PAN](https://developer.sashite.com/specs/portable-action-notation) format.
|
4
10
|
|
5
11
|
## Installation
|
@@ -7,72 +13,90 @@ A Ruby interface for data serialization in [PAN](https://developer.sashite.com/s
|
|
7
13
|
Add this line to your application's Gemfile:
|
8
14
|
|
9
15
|
```ruby
|
10
|
-
gem
|
16
|
+
gem "sashite-pan"
|
11
17
|
```
|
12
18
|
|
13
19
|
And then execute:
|
14
20
|
|
15
|
-
|
21
|
+
```sh
|
22
|
+
bundle
|
23
|
+
```
|
16
24
|
|
17
25
|
Or install it yourself as:
|
18
26
|
|
19
|
-
|
27
|
+
```sh
|
28
|
+
gem install sashite-pan
|
29
|
+
```
|
20
30
|
|
21
31
|
## Usage
|
22
32
|
|
23
33
|
Working with PAN can be very simple, for example:
|
24
34
|
|
25
35
|
```ruby
|
26
|
-
require
|
36
|
+
require "sashite/pan"
|
27
37
|
|
28
38
|
# Emit a PAN string
|
29
39
|
|
30
40
|
actions = [
|
31
|
-
[52, 36,
|
41
|
+
[52, 36, "♙"]
|
32
42
|
]
|
33
43
|
|
34
|
-
Sashite::PAN.dump(*actions) # =>
|
44
|
+
Sashite::PAN.dump(*actions) # => "52,36,♙"
|
35
45
|
|
36
46
|
# Parse a PAN string
|
37
47
|
|
38
|
-
Sashite::PAN.parse(
|
48
|
+
Sashite::PAN.parse("52,36,♙") # => [[52, 36, "♙", nil]]
|
39
49
|
```
|
40
50
|
|
41
|
-
##
|
51
|
+
## Example
|
52
|
+
|
53
|
+
### Promoting a chess pawn into a knight
|
42
54
|
|
43
55
|
```ruby
|
44
|
-
|
56
|
+
Sashite::PAN.dump([12, 4, "♘"]) # => "12,4,♘"
|
57
|
+
Sashite::PAN.parse("12,4,♘") # => [[12, 4, "♘", nil]]
|
58
|
+
```
|
45
59
|
|
46
|
-
|
47
|
-
Sashite::PAN.parse('60,62,♔;63,61,♖') # => [[60, 62, '♔', nil], [63, 61, '♖', nil]]
|
60
|
+
### Capturing a rook and promoting a shogi pawn
|
48
61
|
|
49
|
-
|
62
|
+
```ruby
|
63
|
+
Sashite::PAN.dump([33, 24, "+P", "R"]) # => "33,24,+P,R"
|
64
|
+
Sashite::PAN.parse("33,24,+P,R") # => [[33, 24, "+P", "R"]]
|
65
|
+
```
|
50
66
|
|
51
|
-
|
52
|
-
Sashite::PAN.parse('12,4,♘') # => [[12, 4, '♘', nil]]
|
67
|
+
### Dropping a shogi pawn
|
53
68
|
|
54
|
-
|
69
|
+
```ruby
|
70
|
+
Sashite::PAN.dump([nil, 42, "P"]) # => "*,42,P"
|
71
|
+
Sashite::PAN.parse("*,42,P") # => [[nil, 42, "P", nil]]
|
72
|
+
```
|
73
|
+
|
74
|
+
***
|
55
75
|
|
56
|
-
|
57
|
-
|
76
|
+
In the context of a game with several possible actions per turn, like in
|
77
|
+
Western chess, more than one action could be consider like a move, and joined
|
78
|
+
thanks to the [`portable_move_notation`](https://rubygems.org/gems/portable_move_notation) gem.
|
58
79
|
|
59
|
-
|
80
|
+
### Black castles on king-side
|
60
81
|
|
61
|
-
|
62
|
-
Sashite::PAN.
|
82
|
+
```ruby
|
83
|
+
Sashite::PAN.dump([60, 62, "♔"], [63, 61, "♖"]) # => "60,62,♔;63,61,♖"
|
84
|
+
Sashite::PAN.parse("60,62,♔;63,61,♖") # => [[60, 62, "♔", nil], [63, 61, "♖", nil]]
|
85
|
+
```
|
63
86
|
|
64
|
-
|
87
|
+
### Capturing a white chess pawn en passant
|
65
88
|
|
66
|
-
|
67
|
-
Sashite::PAN.
|
89
|
+
```ruby
|
90
|
+
Sashite::PAN.dump([33, 32, "♟"], [32, 40, "♟"]) # => "33,32,♟;32,40,♟"
|
91
|
+
Sashite::PAN.parse("33,32,♟;32,40,♟") # => [[33, 32, "♟", nil], [32, 40, "♟", nil]]
|
68
92
|
```
|
69
93
|
|
70
94
|
## License
|
71
95
|
|
72
|
-
The
|
96
|
+
The code is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
73
97
|
|
74
98
|
## About Sashite
|
75
99
|
|
76
|
-
|
100
|
+
This [gem](https://rubygems.org/gems/sashite-pan) is maintained by [Sashite](https://sashite.com/).
|
77
101
|
|
78
102
|
With some [lines of code](https://github.com/sashite/), let's share the beauty of Chinese, Japanese and Western cultures through the game of chess!
|
data/lib/sashite-pan.rb
CHANGED
data/lib/sashite/pan.rb
CHANGED
data/lib/sashite/pan/action.rb
CHANGED
@@ -7,17 +7,17 @@ module Sashite
|
|
7
7
|
attr_reader :src_square, :dst_square, :piece_name, :piece_hand
|
8
8
|
|
9
9
|
private_class_method def self.separator
|
10
|
-
|
10
|
+
";"
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def separator
|
16
|
-
|
16
|
+
","
|
17
17
|
end
|
18
18
|
|
19
19
|
def drop_char
|
20
|
-
|
20
|
+
"*"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/lib/sashite/pan/dumper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "action"
|
4
4
|
|
5
5
|
module Sashite
|
6
6
|
module PAN
|
@@ -11,7 +11,9 @@ module Sashite
|
|
11
11
|
.join(separator)
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(src_square, dst_square, piece_name, piece_hand)
|
14
|
+
def initialize(src_square, dst_square, piece_name, piece_hand = nil)
|
15
|
+
super()
|
16
|
+
|
15
17
|
@src_square = src_square.nil? ? drop_char : Integer(src_square)
|
16
18
|
@dst_square = Integer(dst_square)
|
17
19
|
@piece_name = piece_name.to_s
|
data/lib/sashite/pan/parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "action"
|
4
4
|
|
5
5
|
module Sashite
|
6
6
|
module PAN
|
@@ -12,6 +12,8 @@ module Sashite
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def initialize(serialized_action)
|
15
|
+
super()
|
16
|
+
|
15
17
|
action_args = serialized_action.split(separator)
|
16
18
|
src_square = action_args.fetch(0)
|
17
19
|
@src_square = src_square.eql?(drop_char) ? nil : Integer(src_square)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sashite-pan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril Kato
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-md
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
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'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rubocop-performance
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rubocop-thread_safety
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,7 +171,7 @@ metadata:
|
|
143
171
|
bug_tracker_uri: https://github.com/sashite/pan.rb/issues
|
144
172
|
documentation_uri: https://rubydoc.info/gems/sashite-pan/index
|
145
173
|
source_code_uri: https://github.com/sashite/pan.rb
|
146
|
-
post_install_message:
|
174
|
+
post_install_message:
|
147
175
|
rdoc_options: []
|
148
176
|
require_paths:
|
149
177
|
- lib
|
@@ -151,15 +179,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
151
179
|
requirements:
|
152
180
|
- - ">="
|
153
181
|
- !ruby/object:Gem::Version
|
154
|
-
version:
|
182
|
+
version: 2.7.0
|
155
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
184
|
requirements:
|
157
185
|
- - ">="
|
158
186
|
- !ruby/object:Gem::Version
|
159
187
|
version: '0'
|
160
188
|
requirements: []
|
161
|
-
rubygems_version: 3.
|
162
|
-
signing_key:
|
189
|
+
rubygems_version: 3.2.15
|
190
|
+
signing_key:
|
163
191
|
specification_version: 4
|
164
192
|
summary: Data serialization in PAN format.
|
165
193
|
test_files: []
|