pgn2 0.4.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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +50 -0
  3. data/.github/workflows/publish.yml +75 -0
  4. data/.rubocop.yml +38 -0
  5. data/CHANGELOG.md +52 -0
  6. data/README.md +104 -4
  7. data/Rakefile +20 -0
  8. data/bench/.keep +0 -0
  9. data/bench/IMPROVEMENTS.md +75 -0
  10. data/bench/baseline_moves.pre-optimization.txt +22 -0
  11. data/bench/baseline_moves.txt +22 -0
  12. data/bench/baseline_parse.pre-optimization.txt +25 -0
  13. data/bench/baseline_parse.racc.txt +25 -0
  14. data/bench/baseline_parse.txt +25 -0
  15. data/bench/profile_moves.rb +53 -0
  16. data/bench/profile_parse.rb +44 -0
  17. data/docs/superpowers/plans/2026-08-12-efficiency-optimizations.md +573 -0
  18. data/docs/superpowers/plans/2026-08-12-efficiency-tests-and-profiling.md +1091 -0
  19. data/docs/superpowers/plans/2026-08-12-to-pgn-serialization.md +162 -0
  20. data/docs/superpowers/plans/2026-08-13-whittle-to-racc-migration.md +130 -0
  21. data/docs/superpowers/specs/2026-08-12-to-pgn-serialization-design.md +217 -0
  22. data/lib/pgn/board.rb +33 -15
  23. data/lib/pgn/fen.rb +16 -8
  24. data/lib/pgn/game.rb +11 -2
  25. data/lib/pgn/lexer.rb +201 -0
  26. data/lib/pgn/move.rb +7 -3
  27. data/lib/pgn/move_calculator.rb +18 -17
  28. data/lib/pgn/parser.rb +19 -199
  29. data/lib/pgn/pgn_parser.rb +392 -0
  30. data/lib/pgn/pgn_parser.y +142 -0
  31. data/lib/pgn/serializer.rb +141 -0
  32. data/lib/pgn/version.rb +1 -1
  33. data/lib/pgn.rb +3 -0
  34. data/pgn2.gemspec +12 -2
  35. data/spec/board_spec.rb +111 -0
  36. data/spec/fen_spec.rb +25 -0
  37. data/spec/game_spec.rb +74 -0
  38. data/spec/lexer_spec.rb +153 -0
  39. data/spec/move_calculator_spec.rb +226 -0
  40. data/spec/move_spec.rb +136 -0
  41. data/spec/parser_explicit_spec.rb +210 -0
  42. data/spec/parser_spec.rb +15 -0
  43. data/spec/pgn_files/doublequotes.pgn +21 -0
  44. data/spec/pgn_files/specialcharacters.pgn +79 -0
  45. data/spec/position_spec.rb +73 -0
  46. data/spec/serializer_spec.rb +89 -0
  47. data/spec/spec_helper.rb +0 -1
  48. metadata +99 -15
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgn2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stacey Touset
@@ -9,16 +9,30 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-04-01 00:00:00.000000000 Z
12
+ date: 2026-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: whittle
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '2.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '2.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: pry
16
30
  requirement: !ruby/object:Gem::Requirement
17
31
  requirements:
18
32
  - - ">="
19
33
  - !ruby/object:Gem::Version
20
34
  version: '0'
21
- type: :runtime
35
+ type: :development
22
36
  prerelease: false
23
37
  version_requirements: !ruby/object:Gem::Requirement
24
38
  requirements:
@@ -26,21 +40,21 @@ dependencies:
26
40
  - !ruby/object:Gem::Version
27
41
  version: '0'
28
42
  - !ruby/object:Gem::Dependency
29
- name: bundler
43
+ name: rake
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
- - - "~>"
46
+ - - ">="
33
47
  - !ruby/object:Gem::Version
34
- version: '2.3'
48
+ version: '0'
35
49
  type: :development
36
50
  prerelease: false
37
51
  version_requirements: !ruby/object:Gem::Requirement
38
52
  requirements:
39
- - - "~>"
53
+ - - ">="
40
54
  - !ruby/object:Gem::Version
41
- version: '2.3'
55
+ version: '0'
42
56
  - !ruby/object:Gem::Dependency
43
- name: pry
57
+ name: rspec
44
58
  requirement: !ruby/object:Gem::Requirement
45
59
  requirements:
46
60
  - - ">="
@@ -54,7 +68,7 @@ dependencies:
54
68
  - !ruby/object:Gem::Version
55
69
  version: '0'
56
70
  - !ruby/object:Gem::Dependency
57
- name: rake
71
+ name: racc
58
72
  requirement: !ruby/object:Gem::Requirement
59
73
  requirements:
60
74
  - - ">="
@@ -68,7 +82,7 @@ dependencies:
68
82
  - !ruby/object:Gem::Version
69
83
  version: '0'
70
84
  - !ruby/object:Gem::Dependency
71
- name: rspec
85
+ name: benchmark-ips
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
88
  - - ">="
@@ -81,6 +95,34 @@ dependencies:
81
95
  - - ">="
82
96
  - !ruby/object:Gem::Version
83
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: memory_profiler
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '1.60'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '1.60'
84
126
  description: A PGN parser and FEN generator for Ruby
85
127
  email:
86
128
  - stacey@touset.org
@@ -89,45 +131,79 @@ executables: []
89
131
  extensions: []
90
132
  extra_rdoc_files: []
91
133
  files:
134
+ - ".github/workflows/ci.yml"
135
+ - ".github/workflows/publish.yml"
92
136
  - ".gitignore"
93
137
  - ".rspec"
138
+ - ".rubocop.yml"
139
+ - CHANGELOG.md
94
140
  - Gemfile
95
141
  - LICENSE.txt
96
142
  - README.md
97
143
  - Rakefile
98
144
  - TODO.md
145
+ - bench/.keep
146
+ - bench/IMPROVEMENTS.md
147
+ - bench/baseline_moves.pre-optimization.txt
148
+ - bench/baseline_moves.txt
149
+ - bench/baseline_parse.pre-optimization.txt
150
+ - bench/baseline_parse.racc.txt
151
+ - bench/baseline_parse.txt
152
+ - bench/profile_moves.rb
153
+ - bench/profile_parse.rb
154
+ - docs/superpowers/plans/2026-08-12-efficiency-optimizations.md
155
+ - docs/superpowers/plans/2026-08-12-efficiency-tests-and-profiling.md
156
+ - docs/superpowers/plans/2026-08-12-to-pgn-serialization.md
157
+ - docs/superpowers/plans/2026-08-13-whittle-to-racc-migration.md
158
+ - docs/superpowers/specs/2026-08-12-to-pgn-serialization-design.md
99
159
  - examples/immortal_game.pgn
100
160
  - lib/pgn.rb
101
161
  - lib/pgn/board.rb
102
162
  - lib/pgn/fen.rb
103
163
  - lib/pgn/game.rb
164
+ - lib/pgn/lexer.rb
104
165
  - lib/pgn/move.rb
105
166
  - lib/pgn/move_calculator.rb
106
167
  - lib/pgn/parser.rb
168
+ - lib/pgn/pgn_parser.rb
169
+ - lib/pgn/pgn_parser.y
107
170
  - lib/pgn/position.rb
171
+ - lib/pgn/serializer.rb
108
172
  - lib/pgn/version.rb
109
173
  - pgn2.gemspec
174
+ - spec/board_spec.rb
110
175
  - spec/fen_spec.rb
111
176
  - spec/game_spec.rb
177
+ - spec/lexer_spec.rb
178
+ - spec/move_calculator_spec.rb
179
+ - spec/move_spec.rb
180
+ - spec/parser_explicit_spec.rb
112
181
  - spec/parser_spec.rb
113
182
  - spec/pgn_files/alternate_castling.pgn
114
183
  - spec/pgn_files/annotations.pgn
115
184
  - spec/pgn_files/comments.pgn
185
+ - spec/pgn_files/doublequotes.pgn
116
186
  - spec/pgn_files/empty_variation_move.pgn
117
187
  - spec/pgn_files/fen.pgn
118
188
  - spec/pgn_files/multiline_comments.pgn
119
189
  - spec/pgn_files/nested_comments.pgn
120
190
  - spec/pgn_files/no_moves.pgn
191
+ - spec/pgn_files/specialcharacters.pgn
121
192
  - spec/pgn_files/test.pgn
122
193
  - spec/pgn_files/two_annotations.pgn
123
194
  - spec/pgn_files/two_games.pgn
124
195
  - spec/pgn_files/variations.pgn
125
196
  - spec/position_spec.rb
197
+ - spec/serializer_spec.rb
126
198
  - spec/spec_helper.rb
127
199
  homepage: https://github.com/muriloime/pgn
128
200
  licenses:
129
201
  - MIT
130
- metadata: {}
202
+ metadata:
203
+ homepage_uri: https://github.com/muriloime/pgn
204
+ source_code_uri: https://github.com/muriloime/pgn
205
+ bug_tracker_uri: https://github.com/muriloime/pgn/issues
206
+ changelog_uri: https://github.com/muriloime/pgn/blob/main/CHANGELOG.md
131
207
  post_install_message:
132
208
  rdoc_options: []
133
209
  require_paths:
@@ -136,32 +212,40 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
212
  requirements:
137
213
  - - ">="
138
214
  - !ruby/object:Gem::Version
139
- version: '0'
215
+ version: '3.0'
140
216
  required_rubygems_version: !ruby/object:Gem::Requirement
141
217
  requirements:
142
218
  - - ">="
143
219
  - !ruby/object:Gem::Version
144
220
  version: '0'
145
221
  requirements: []
146
- rubygems_version: 3.2.32
222
+ rubygems_version: 3.5.22
147
223
  signing_key:
148
224
  specification_version: 4
149
225
  summary: A PGN parser for Ruby
150
226
  test_files:
227
+ - spec/board_spec.rb
151
228
  - spec/fen_spec.rb
152
229
  - spec/game_spec.rb
230
+ - spec/lexer_spec.rb
231
+ - spec/move_calculator_spec.rb
232
+ - spec/move_spec.rb
233
+ - spec/parser_explicit_spec.rb
153
234
  - spec/parser_spec.rb
154
235
  - spec/pgn_files/alternate_castling.pgn
155
236
  - spec/pgn_files/annotations.pgn
156
237
  - spec/pgn_files/comments.pgn
238
+ - spec/pgn_files/doublequotes.pgn
157
239
  - spec/pgn_files/empty_variation_move.pgn
158
240
  - spec/pgn_files/fen.pgn
159
241
  - spec/pgn_files/multiline_comments.pgn
160
242
  - spec/pgn_files/nested_comments.pgn
161
243
  - spec/pgn_files/no_moves.pgn
244
+ - spec/pgn_files/specialcharacters.pgn
162
245
  - spec/pgn_files/test.pgn
163
246
  - spec/pgn_files/two_annotations.pgn
164
247
  - spec/pgn_files/two_games.pgn
165
248
  - spec/pgn_files/variations.pgn
166
249
  - spec/position_spec.rb
250
+ - spec/serializer_spec.rb
167
251
  - spec/spec_helper.rb