portable_move_notation 0.2.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b589b978146bc86d24e4190c46e89c055d22ad75c3ae50605b64159e8e6908c
4
- data.tar.gz: 9b7391b895988cf11771ccd79e6827f09e26215ca2393a0cd45b50c2c7ae2385
3
+ metadata.gz: 1ea18bccd3175b8aa44c30320449202c692edd0e62f5024b0f1a35a912124f52
4
+ data.tar.gz: 0d57d166480c1c823b8ef6a6d6d4333947c467eebe3fc8f3386e72a217faaf19
5
5
  SHA512:
6
- metadata.gz: 8db07cc1f4b394860a4b169ea8c66dfe3a49b9dc386c4d822a9b581d30b9bc9c42893f857e82cb88a2323f0bd6e9314356bb48da41192cea81e8c0b48a768e70
7
- data.tar.gz: 41fe5971834d95f244d62daaa26a53fb57b34f6f1ab6730c76fd1696b3ce5a8d70daa9c783222d13e5c874624716cb30c5dcc07dd01432331e4ba57842cb4894
6
+ metadata.gz: cfd09a1595d388851a9e9e286f83abf130005c2a883938a369bee3111fce52631e8b22b79f7f21d3cb9415dc3e09a9b7e9ea8c36724a7eb28072eb76b9af0110
7
+ data.tar.gz: 6f2be96f2952714b6977d6c2e811a67ef0c4d07fa4b324b5c98b754d8e8572961f74ce6a2c2b27336b57fb7a3145daf54b078d798d737845bacbcc039bc458ee
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Portable Move Notation
2
2
 
3
- A Ruby interface for data serialization in PMN format.
3
+ A Ruby interface for data serialization in [PMN](https://developer.sashite.com/specs/portable-move-notation) format.
4
4
 
5
5
  ## Installation
6
6
 
@@ -27,14 +27,14 @@ require 'portable_move_notation'
27
27
 
28
28
  # Parse a PMN string
29
29
 
30
- PortableMoveNotation.load('52,36,C:P.12,28,c:p.53,37,C:P') # => [[[52, 36, 'C:P', nil]], [[12, 28, 'c:p', nil]], [[53, 37, 'C:P', nil]]]
30
+ PortableMoveNotation.parse('52,36,C:P.12,28,c:p.53,37,C:P') # => [[52, 36, 'C:P', nil], [12, 28, 'c:p', nil], [53, 37, 'C:P', nil]]
31
31
 
32
32
  # Emit some PMN
33
33
 
34
34
  some_moves = [
35
- [[52, 36, 'C:P', nil]],
36
- [[12, 28, 'c:p', nil]],
37
- [[53, 37, 'C:P', nil]]
35
+ [52, 36, 'C:P', nil],
36
+ [12, 28, 'c:p', nil],
37
+ [53, 37, 'C:P', nil]
38
38
  ]
39
39
 
40
40
  PortableMoveNotation.dump(*some_moves) # => '52,36,C:P.12,28,c:p.53,37,C:P'
@@ -45,50 +45,42 @@ PortableMoveNotation.dump(*some_moves) # => '52,36,C:P.12,28,c:p.53,37,C:P'
45
45
  #### Castling on kingside
46
46
 
47
47
  ```ruby
48
- PortableMoveNotation.load('60,62,C:-K;63,61,C:R') # => [[[60, 62, 'C:-K', nil], [63, 61, 'C:R', nil]]]
48
+ PortableMoveNotation.parse('60,62,C:-K;63,61,C:R') # => [[60, 62, 'C:-K', nil, 63, 61, 'C:R', nil]]
49
49
  PortableMoveNotation.dump(*[[[60, 62, 'C:-K', nil], [63, 61, 'C:R', nil]]]) # => '60,62,C:-K;63,61,C:R'
50
50
  ```
51
51
 
52
52
  #### Promoting a chess pawn into a knight
53
53
 
54
54
  ```ruby
55
- PortableMoveNotation.load('12,4,C:P,C:N') # => [[[12, 4, 'C:P', 'C:N']]]
55
+ PortableMoveNotation.parse('12,4,C:P,C:N') # => [[12, 4, 'C:P', 'C:N']]
56
56
  PortableMoveNotation.dump(*[[[12, 4, 'C:P', 'C:N']]]) # => '12,4,C:P,C:N'
57
57
  ```
58
58
 
59
59
  #### Promoting a shogi pawn
60
60
 
61
61
  ```ruby
62
- PortableMoveNotation.load('33,24,S:P,S:+P') # => [[[33, 24, 'S:P', 'S:+P']]]
62
+ PortableMoveNotation.parse('33,24,S:P,S:+P') # => [[33, 24, 'S:P', 'S:+P']]
63
63
  PortableMoveNotation.dump(*[[[33, 24, 'S:P', 'S:+P']]]) # => '33,24,S:P,S:+P'
64
64
  ```
65
65
 
66
66
  #### Dropping a shogi pawn
67
67
 
68
68
  ```ruby
69
- PortableMoveNotation.load('*,42,S:P') # => [[[nil, 42, 'S:P', nil]]]
69
+ PortableMoveNotation.parse('*,42,S:P') # => [[nil, 42, 'S:P', nil]]
70
70
  PortableMoveNotation.dump(*[[[nil, 42, 'S:P', nil]]]) # => '*,42,S:P'
71
71
  ```
72
72
 
73
73
  #### Capturing a white chess pawn en passant
74
74
 
75
75
  ```ruby
76
- PortableMoveNotation.load('48,32,C:P.33,32,c:p;32,40,c:p') # => [[[48, 32, 'C:P', nil]], [[33, 32, 'c:p', nil], [32, 40, 'c:p', nil]]]
76
+ PortableMoveNotation.parse('48,32,C:P.33,32,c:p;32,40,c:p') # => [[48, 32, 'C:P', nil], [33, 32, 'c:p', nil, 32, 40, 'c:p', nil]]
77
77
  PortableMoveNotation.dump(*[[[48, 32, 'C:P', nil]], [[33, 32, 'c:p', nil], [32, 40, 'c:p', nil]]]) # => '48,32,C:P.33,32,c:p;32,40,c:p'
78
78
  ```
79
79
 
80
- ## Contributing
81
-
82
- Bug reports and pull requests are welcome on GitHub at https://github.com/sashite/portable_move_notation.rb. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://www.contributor-covenant.org/) code of conduct.
83
-
84
80
  ## License
85
81
 
86
82
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
87
83
 
88
- ## Code of Conduct
89
-
90
- Everyone interacting in the PortableMoveNotation project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/sashite/portable_move_notation.rb/blob/master/CODE_OF_CONDUCT.md).
91
-
92
84
  ## About Sashite
93
85
 
94
86
  The `portable_move_notation` gem is maintained by [Sashite](https://sashite.com/).
@@ -3,13 +3,13 @@
3
3
  # Portable Move Notation module
4
4
  module PortableMoveNotation
5
5
  def self.dump(*moves)
6
- Dump.call(*moves)
6
+ Dumper.call(*moves)
7
7
  end
8
8
 
9
- def self.load(pmn_string)
10
- Load.call(pmn_string)
9
+ def self.parse(pmn_string)
10
+ Parser.call(pmn_string)
11
11
  end
12
12
  end
13
13
 
14
- require_relative 'portable_move_notation/dump'
15
- require_relative 'portable_move_notation/load'
14
+ require_relative 'portable_move_notation/dumper'
15
+ require_relative 'portable_move_notation/parser'
@@ -2,7 +2,7 @@
2
2
 
3
3
  module PortableMoveNotation
4
4
  module Action
5
- class Dump
5
+ class Dumper
6
6
  def self.call(*unserialized_actions)
7
7
  unserialized_actions.map { |params| new(*params).call }.join(';')
8
8
  end
@@ -28,13 +28,15 @@ module PortableMoveNotation
28
28
  end
29
29
 
30
30
  def call
31
- arr = if piece_hand.nil?
32
- [src_square, dst_square, piece_name]
33
- else
34
- [src_square, dst_square, piece_name, piece_hand]
35
- end
31
+ action_items.join(',')
32
+ end
33
+
34
+ private
35
+
36
+ def action_items
37
+ return [src_square, dst_square, piece_name] if piece_hand.nil?
36
38
 
37
- arr.join(',')
39
+ [src_square, dst_square, piece_name, piece_hand]
38
40
  end
39
41
  end
40
42
  end
@@ -2,9 +2,9 @@
2
2
 
3
3
  module PortableMoveNotation
4
4
  module Action
5
- class Load
5
+ class Parser
6
6
  def self.call(serialized_actions)
7
- serialized_actions.split(';').map do |serialized_action|
7
+ serialized_actions.split(';').flat_map do |serialized_action|
8
8
  new(serialized_action).call
9
9
  end
10
10
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PortableMoveNotation
4
+ class Dumper
5
+ def self.call(*unserialized_moves)
6
+ unserialized_moves.map do |move|
7
+ actions = move.each_slice(4)
8
+ Action::Dumper.call(*actions)
9
+ end.join('.')
10
+ end
11
+ end
12
+ end
13
+
14
+ require_relative 'action/dumper'
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PortableMoveNotation
4
+ class Parser
5
+ def self.call(serialized_moves_string)
6
+ serialized_moves_string.split('.').map do |serialized_actions|
7
+ Action::Parser.call(serialized_actions)
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ require_relative 'action/parser'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: portable_move_notation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-14 00:00:00.000000000 Z
11
+ date: 2020-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -122,7 +122,8 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- description: A Ruby interface for data serialization in PMN format.
125
+ description: A Ruby interface for data serialization in PMN (Portable Move Notation)
126
+ format.
126
127
  email: contact@cyril.email
127
128
  executables: []
128
129
  extensions: []
@@ -131,10 +132,10 @@ files:
131
132
  - LICENSE.md
132
133
  - README.md
133
134
  - lib/portable_move_notation.rb
134
- - lib/portable_move_notation/action/dump.rb
135
- - lib/portable_move_notation/action/load.rb
136
- - lib/portable_move_notation/dump.rb
137
- - lib/portable_move_notation/load.rb
135
+ - lib/portable_move_notation/action/dumper.rb
136
+ - lib/portable_move_notation/action/parser.rb
137
+ - lib/portable_move_notation/dumper.rb
138
+ - lib/portable_move_notation/parser.rb
138
139
  homepage: https://developer.sashite.com/specs/portable-move-notation
139
140
  licenses:
140
141
  - MIT
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PortableMoveNotation
4
- class Dump
5
- def self.call(*unserialized_moves)
6
- unserialized_moves.map { |actions| Action::Dump.call(*actions) }.join('.')
7
- end
8
- end
9
- end
10
-
11
- require_relative 'action/dump'
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PortableMoveNotation
4
- class Load
5
- def self.call(serialized_moves)
6
- serialized_moves.split('.').map do |serialized_actions|
7
- Action::Load.call(serialized_actions)
8
- end
9
- end
10
- end
11
- end
12
-
13
- require_relative 'action/load'