sashite-pan 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
- SHA1:
3
- metadata.gz: b0df5e40949504b396898aafaa9995e22ceffcc4
4
- data.tar.gz: 21ea803ef8d8bedffe43c49f957ba953a4a906fe
2
+ SHA256:
3
+ metadata.gz: 5e063831fd8f910bd4ad5fd11d708be1bd0afc801b44d00e56934ac083996f34
4
+ data.tar.gz: f86d2d6b9fc44f15e9ef9cd5bb09518bea27f6e34644ad74fd11eabce05347aa
5
5
  SHA512:
6
- metadata.gz: c31d786fe117f64ba500d4be7768cfee0019dfd7a65b7c7412f73ba685d07be1ba823b44d82bdf16224255935ede441805eed99b450a83ed5921db7753d08809
7
- data.tar.gz: 7e74e5ddb41667b0cbfe3b54fe58fbdd556e9619012b1f3c6c988a55da1f6f96840273e0e2eabbef02c0c4e936a21eef58e8e1025dbabae8b4dca40031e69f88
6
+ metadata.gz: 5aa2c4c4387486061b7d5ef452292fd75067775405b068b127efc27aaf703bb2cf9b1d817f662c8b2076ddd9bf9f14ed605421a3c0f9cd14146529574d308a72
7
+ data.tar.gz: 634cdd1a259a459d93b4c3a2eab9db96b30c220f5c320604c6b00dc729634ce69f697c448c0748d05c9d785802007efd6ac4c9db9a60c4008f6d236e1f404fb2
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Cyril Wack
1
+ Copyright (c) 2014-2020 Cyril Kato
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,18 +1,14 @@
1
- # Sashite::PAN
1
+ # Portable Action Notation
2
2
 
3
- Ruby implementation of [PAN](http://sashite.wiki/Portable_Action_Notation) parser and emitter.
4
-
5
- ## Status
6
-
7
- * [![Gem Version](https://badge.fury.io/rb/sashite-pan.svg)](//badge.fury.io/rb/sashite-pan)
8
- * [![Build Status](https://secure.travis-ci.org/sashite/pan.rb.svg?branch=master)](//travis-ci.org/sashite/pan.rb?branch=master)
9
- * [![Dependency Status](https://gemnasium.com/sashite/pan.rb.svg)](//gemnasium.com/sashite/pan.rb)
3
+ A Ruby interface for data serialization in [PAN](https://developer.sashite.com/specs/portable-action-notation) format.
10
4
 
11
5
  ## Installation
12
6
 
13
7
  Add this line to your application's Gemfile:
14
8
 
15
- gem 'sashite-pan'
9
+ ```ruby
10
+ gem 'sashite-pan'
11
+ ```
16
12
 
17
13
  And then execute:
18
14
 
@@ -22,42 +18,62 @@ Or install it yourself as:
22
18
 
23
19
  $ gem install sashite-pan
24
20
 
25
- ## API
21
+ ## Usage
22
+
23
+ Working with PMN can be very simple, for example:
24
+
25
+ ```ruby
26
+ require 'sashite/pan'
27
+ ```
28
+
29
+ ### King's Pawn opening at chess
30
+
31
+ ```ruby
32
+ Sashite::PAN.parse('52,36,♙') # => [[52, 36, '♙', nil]]
33
+ Sashite::PAN.dump([52, 36, '♙', nil]) # => '52,36,♙'
34
+ ```
26
35
 
27
- Module method:
36
+ ### Black castles on king-side
28
37
 
29
38
  ```ruby
30
- Sashite::PAN.load verb, arg1, arg2
39
+ Sashite::PAN.parse('60,62,♔;63,61,♖') # => [[60, 62, '♔', nil], [63, 61, '♖', nil]]
40
+ Sashite::PAN.dump([60, 62, '♔', nil], [63, 61, '♖', nil]) # => '60,62,♔;63,61,♖'
31
41
  ```
32
42
 
33
- Set actor's instance methods:
43
+ ### Promoting a chess pawn into a knight
34
44
 
35
- * `verb`
36
- * `actor`
37
- * `square`
38
- * `to_a`
45
+ ```ruby
46
+ Sashite::PAN.parse('12,4,♘') # => [[12, 4, '♘', nil]]
47
+ Sashite::PAN.dump([12, 4, '♘', nil]) # => '12,4,♘'
48
+ ```
39
49
 
40
- Movement's instance methods:
50
+ ### Capturing a rook and promoting a shogi pawn
41
51
 
42
- * `verb`
43
- * `src_square`
44
- * `dst_square`
45
- * `to_a`
52
+ ```ruby
53
+ Sashite::PAN.parse('33,24,+P,R') # => [[33, 24, '+P', 'R']]
54
+ Sashite::PAN.dump([33, 24, '+P', 'R']) # => '33,24,+P,R'
55
+ ```
46
56
 
47
- ## Example
57
+ ### Dropping a shogi pawn
48
58
 
49
59
  ```ruby
50
- require 'sashite-pan'
60
+ Sashite::PAN.parse('*,42,P') # => [[nil, 42, 'P', nil]]
61
+ Sashite::PAN.dump([nil, 42, 'P', nil]) # => '*,42,P'
62
+ ```
51
63
 
52
- action = Sashite::PAN.load :shift, 42, 43
53
- action.src_square # => 42
54
- action.to_a # => [ :shift, 42, 43 ]
64
+ ### Capturing a white chess pawn _en passant_
65
+
66
+ ```ruby
67
+ Sashite::PAN.parse('33,32,♟;32,40,♟') # => [[33, 32, '♟', nil], [32, 40, '♟', nil]]
68
+ Sashite::PAN.dump([33, 32, '♟', nil], [32, 40, '♟', nil]) # => '33,32,♟;32,40,♟'
55
69
  ```
56
70
 
57
- ## Contributing
71
+ ## License
72
+
73
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
74
+
75
+ ## About Sashite
76
+
77
+ The `sashite-pan` gem is maintained by [Sashite](https://sashite.com/).
58
78
 
59
- 1. Fork it
60
- 2. Create your feature branch (`git checkout -b my-new-feature`)
61
- 3. Commit your changes (`git commit -am 'Add some feature'`)
62
- 4. Push to the branch (`git push origin my-new-feature`)
63
- 5. Create new Pull Request
79
+ 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!
@@ -1 +1,6 @@
1
- require 'sashite/pan'
1
+ # frozen_string_literal: true
2
+
3
+ # Sashite namespace
4
+ module Sashite; end
5
+
6
+ require_relative 'sashite/pan'
@@ -1,30 +1,17 @@
1
- require_relative 'pan/error/not_implemented_verb_error'
2
- require_relative 'pan/error/same_square_error'
3
- require_relative 'pan/movement/capture'
4
- require_relative 'pan/movement/shift'
5
- require_relative 'pan/set_actor/drop'
6
- require_relative 'pan/set_actor/promote'
1
+ # frozen_string_literal: true
7
2
 
8
3
  module Sashite
4
+ # The PAN (Portable Action Notation) module
9
5
  module PAN
10
- def self.load verb, arg1, arg2
11
- case verb
12
-
13
- when :capture
14
- Capture.new arg1, arg2
15
-
16
- when :drop
17
- Drop.new arg1, arg2
18
-
19
- when :promote
20
- Promote.new arg1, arg2
21
-
22
- when :shift
23
- Shift.new arg1, arg2
6
+ def self.dump(*actions)
7
+ Dumper.call(*actions)
8
+ end
24
9
 
25
- else
26
- raise NotImplementedVerbError
27
- end
10
+ def self.parse(pan_string)
11
+ Parser.call(pan_string)
28
12
  end
29
13
  end
30
14
  end
15
+
16
+ require_relative 'pan/dumper'
17
+ require_relative 'pan/parser'
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sashite
4
+ module PAN
5
+ # Dumper class
6
+ class Dumper
7
+ def self.call(*unserialized_actions)
8
+ unserialized_actions.map { |params| new(*params).call }.join(';')
9
+ end
10
+
11
+ attr_reader :src_square, :dst_square, :piece_name, :piece_hand
12
+
13
+ def initialize(src_square, dst_square, piece_name, piece_hand)
14
+ unless src_square.nil?
15
+ raise src_square.inspect unless src_square.is_a?(Integer)
16
+ end
17
+
18
+ raise dst_square.inspect unless dst_square.is_a?(Integer)
19
+ raise piece_name.inspect unless piece_name.is_a?(String)
20
+
21
+ unless piece_hand.nil?
22
+ raise piece_hand.inspect unless piece_hand.is_a?(String)
23
+ end
24
+
25
+ @src_square = (src_square.nil? ? '*' : src_square)
26
+ @dst_square = dst_square
27
+ @piece_name = piece_name
28
+ @piece_hand = piece_hand
29
+ end
30
+
31
+ def call
32
+ action_items.join(',')
33
+ end
34
+
35
+ private
36
+
37
+ def action_items
38
+ return [src_square, dst_square, piece_name] if piece_hand.nil?
39
+
40
+ [src_square, dst_square, piece_name, piece_hand]
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sashite
4
+ module PAN
5
+ # Parser class
6
+ class Parser
7
+ def self.call(serialized_actions)
8
+ serialized_actions.split(';').map do |serialized_action|
9
+ new(serialized_action).call
10
+ end
11
+ end
12
+
13
+ attr_reader :serialized_action
14
+
15
+ def initialize(serialized_action)
16
+ @serialized_action = serialized_action
17
+ end
18
+
19
+ def call
20
+ action_args = serialized_action.split(',')
21
+
22
+ src_square = action_args.fetch(0)
23
+ src_square = src_square.eql?('*') ? nil : src_square.to_i
24
+ dst_square = action_args.fetch(1).to_i
25
+ piece_name = action_args.fetch(2)
26
+ piece_hand = action_args.fetch(3, nil)
27
+
28
+ [src_square, dst_square, piece_name, piece_hand]
29
+ end
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,94 +1,147 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sashite-pan
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
- - Cyril Wack
7
+ - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-15 00:00:00.000000000 Z
11
+ date: 2020-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: awesome_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '1.6'
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.6'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: minitest
42
+ name: byebug
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '5'
47
+ version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '5'
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
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'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-thread_safety
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
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'
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
46
116
  - !ruby/object:Gem::Version
47
- version: '10'
117
+ version: '0'
48
118
  type: :development
49
119
  prerelease: false
50
120
  version_requirements: !ruby/object:Gem::Requirement
51
121
  requirements:
52
- - - "~>"
122
+ - - ">="
53
123
  - !ruby/object:Gem::Version
54
- version: '10'
55
- description: A Portable Action Notation (PAN) parser and emitter, optimized for programmer
56
- happiness.
57
- email:
58
- - contact@cyril.io
124
+ version: '0'
125
+ description: A Ruby interface for data serialization in PAN (Portable Action Notation)
126
+ format.
127
+ email: contact@cyril.email
59
128
  executables: []
60
129
  extensions: []
61
130
  extra_rdoc_files: []
62
131
  files:
63
- - ".gitignore"
64
- - ".ruby-version"
65
- - ".travis.yml"
66
- - Gemfile
67
132
  - LICENSE.md
68
133
  - README.md
69
- - Rakefile
70
- - VERSION.semver
71
134
  - lib/sashite-pan.rb
72
135
  - lib/sashite/pan.rb
73
- - lib/sashite/pan/error/not_implemented_verb_error.rb
74
- - lib/sashite/pan/error/same_square_error.rb
75
- - lib/sashite/pan/movement.rb
76
- - lib/sashite/pan/movement/capture.rb
77
- - lib/sashite/pan/movement/shift.rb
78
- - lib/sashite/pan/set_actor.rb
79
- - lib/sashite/pan/set_actor/drop.rb
80
- - lib/sashite/pan/set_actor/promote.rb
81
- - sashite-pan.gemspec
82
- - test/_test_helper.rb
83
- - test/test_capture.rb
84
- - test/test_drop.rb
85
- - test/test_pan.rb
86
- - test/test_promote.rb
87
- - test/test_shift.rb
88
- homepage: https://github.com/sashite/pan.rb
136
+ - lib/sashite/pan/dumper.rb
137
+ - lib/sashite/pan/parser.rb
138
+ homepage: https://developer.sashite.com/specs/portable-action-notation
89
139
  licenses:
90
140
  - MIT
91
- metadata: {}
141
+ metadata:
142
+ bug_tracker_uri: https://github.com/sashite/pan.rb/issues
143
+ documentation_uri: https://rubydoc.info/gems/sashite-pan/index
144
+ source_code_uri: https://github.com/sashite/pan.rb
92
145
  post_install_message:
93
146
  rdoc_options: []
94
147
  require_paths:
@@ -104,15 +157,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
157
  - !ruby/object:Gem::Version
105
158
  version: '0'
106
159
  requirements: []
107
- rubyforge_project:
108
- rubygems_version: 2.2.2
160
+ rubygems_version: 3.1.2
109
161
  signing_key:
110
162
  specification_version: 4
111
- summary: Portable Action Notation (PAN) parser and emitter.
112
- test_files:
113
- - test/_test_helper.rb
114
- - test/test_capture.rb
115
- - test/test_drop.rb
116
- - test/test_pan.rb
117
- - test/test_promote.rb
118
- - test/test_shift.rb
163
+ summary: Data serialization in PAN format.
164
+ test_files: []
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.bundle
19
- *.so
20
- *.o
21
- *.a
22
- mkmf.log
@@ -1 +0,0 @@
1
- 2.1.2
@@ -1,3 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.2
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rake/testtask'
3
-
4
- Rake::TestTask.new do |t|
5
- end
6
-
7
- task(default: :test)
@@ -1 +0,0 @@
1
- 0.2.0
@@ -1,6 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class NotImplementedVerbError < ::StandardError
4
- end
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class SameSquareError < ::StandardError
4
- end
5
- end
6
- end
@@ -1,28 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class Movement
4
- attr_reader :src_square, :dst_square
5
-
6
- def initialize src_square, dst_square
7
- raise TypeError unless src_square.is_a? Fixnum
8
- raise TypeError unless dst_square.is_a? Fixnum
9
- raise SameSquareError if src_square == dst_square
10
-
11
- @src_square = src_square
12
- @dst_square = dst_square
13
- end
14
-
15
- def to_a
16
- [
17
- verb,
18
- @src_square,
19
- @dst_square
20
- ]
21
- end
22
-
23
- def verb
24
- self.class.name.split('::').last.downcase.to_sym
25
- end
26
- end
27
- end
28
- end
@@ -1,8 +0,0 @@
1
- require_relative '../movement'
2
-
3
- module Sashite
4
- module PAN
5
- class Capture < Movement
6
- end
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- require_relative '../movement'
2
-
3
- module Sashite
4
- module PAN
5
- class Shift < Movement
6
- end
7
- end
8
- end
@@ -1,27 +0,0 @@
1
- module Sashite
2
- module PAN
3
- class SetActor
4
- attr_reader :actor, :square
5
-
6
- def initialize square, actor
7
- raise TypeError unless actor.is_a? Symbol
8
- raise TypeError unless square.is_a? Fixnum
9
-
10
- @actor = actor
11
- @square = square
12
- end
13
-
14
- def to_a
15
- [
16
- verb,
17
- @square,
18
- @actor
19
- ]
20
- end
21
-
22
- def verb
23
- self.class.name.split('::').last.downcase.to_sym
24
- end
25
- end
26
- end
27
- end
@@ -1,8 +0,0 @@
1
- require_relative '../set_actor'
2
-
3
- module Sashite
4
- module PAN
5
- class Drop < SetActor
6
- end
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- require_relative '../set_actor'
2
-
3
- module Sashite
4
- module PAN
5
- class Promote < SetActor
6
- end
7
- end
8
- end
@@ -1,19 +0,0 @@
1
- Gem::Specification.new do |spec|
2
- spec.name = 'sashite-pan'
3
- spec.version = File.read('VERSION.semver')
4
- spec.authors = ['Cyril Wack']
5
- spec.email = ['contact@cyril.io']
6
- spec.summary = %q{Portable Action Notation (PAN) parser and emitter.}
7
- spec.description = %q{A Portable Action Notation (PAN) parser and emitter, optimized for programmer happiness.}
8
- spec.homepage = 'https://github.com/sashite/pan.rb'
9
- spec.license = 'MIT'
10
-
11
- spec.files = `git ls-files -z`.split("\x0")
12
- spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
13
- spec.test_files = spec.files.grep(%r{^test/})
14
- spec.require_paths = ['lib']
15
-
16
- spec.add_development_dependency 'bundler', '~> 1.6'
17
- spec.add_development_dependency 'minitest', '~> 5'
18
- spec.add_development_dependency 'rake', '~> 10'
19
- end
@@ -1,2 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'sashite/pan'
@@ -1,45 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'capture' do
5
- describe 'errors' do
6
- it 'raises a same square error' do
7
- -> { Sashite::PAN::Capture.new 42, 42 }.must_raise Sashite::PAN::SameSquareError
8
- end
9
-
10
- it 'raises a type error from the source square' do
11
- -> { Sashite::PAN::Capture.new '42', 43 }.must_raise TypeError
12
- end
13
-
14
- it 'raises a type error from the destination square' do
15
- -> { Sashite::PAN::Capture.new 42, '43' }.must_raise TypeError
16
- end
17
- end
18
-
19
- describe 'instances' do
20
- before do
21
- @action = Sashite::PAN.load :capture, 42, 43
22
- end
23
-
24
- it 'returns the action' do
25
- @action.to_a.must_equal [ :capture, 42, 43 ]
26
- end
27
-
28
- it 'returns the action (once again)' do
29
- @action.to_a.must_equal Sashite::PAN::Capture.new(42, 43).to_a
30
- end
31
-
32
- it 'returns the verb of the action' do
33
- @action.verb.must_equal :capture
34
- end
35
-
36
- it 'returns the src_square of the action' do
37
- @action.src_square.must_equal 42
38
- end
39
-
40
- it 'returns the dst_square of the action' do
41
- @action.dst_square.must_equal 43
42
- end
43
- end
44
- end
45
- end
@@ -1,41 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'drops' do
5
- describe 'errors' do
6
- it 'raises a type error from the actor' do
7
- -> { Sashite::PAN.load :drop, 42, 'foobar' }.must_raise TypeError
8
- end
9
-
10
- it 'raises a type error from the destination square' do
11
- -> { Sashite::PAN.load :drop, '42', :foobar }.must_raise TypeError
12
- end
13
- end
14
-
15
- describe 'instances' do
16
- before do
17
- @action = Sashite::PAN.load :drop, 42, :foobar
18
- end
19
-
20
- it 'returns the action' do
21
- @action.to_a.must_equal [ :drop, 42, :foobar ]
22
- end
23
-
24
- it 'returns the action (once again)' do
25
- @action.to_a.must_equal Sashite::PAN::Drop.new(42, :foobar).to_a
26
- end
27
-
28
- it 'returns the verb of the action' do
29
- @action.verb.must_equal :drop
30
- end
31
-
32
- it 'returns the actor of the action' do
33
- @action.actor.must_equal :foobar
34
- end
35
-
36
- it 'returns the square of the action' do
37
- @action.square.must_equal 42
38
- end
39
- end
40
- end
41
- end
@@ -1,9 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'errors' do
5
- it 'raises a not implemented method error' do
6
- -> { Sashite::PAN.load :foobar, 42, 43 }.must_raise Sashite::PAN::NotImplementedVerbError
7
- end
8
- end
9
- end
@@ -1,41 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'promotion' do
5
- describe 'errors' do
6
- it 'raises a type error from the source square' do
7
- -> { Sashite::PAN.load :promote, '42', :foobar }.must_raise TypeError
8
- end
9
-
10
- it 'raises a type error from the actor' do
11
- -> { Sashite::PAN.load :promote, 42, 'foobar' }.must_raise TypeError
12
- end
13
- end
14
-
15
- describe 'instances' do
16
- before do
17
- @action = Sashite::PAN.load :promote, 42, :foobar
18
- end
19
-
20
- it 'returns the action' do
21
- @action.to_a.must_equal [ :promote, 42, :foobar ]
22
- end
23
-
24
- it 'returns the action (once again)' do
25
- @action.to_a.must_equal Sashite::PAN::Promote.new(42, :foobar).to_a
26
- end
27
-
28
- it 'returns the verb of the action' do
29
- @action.verb.must_equal :promote
30
- end
31
-
32
- it 'returns the square of the action' do
33
- @action.square.must_equal 42
34
- end
35
-
36
- it 'returns the actor of the action' do
37
- @action.actor.must_equal :foobar
38
- end
39
- end
40
- end
41
- end
@@ -1,45 +0,0 @@
1
- require_relative '_test_helper'
2
-
3
- describe Sashite::PAN do
4
- describe 'shift' do
5
- describe 'errors' do
6
- it 'raises a same square error' do
7
- -> { Sashite::PAN::Shift.new 42, 42 }.must_raise Sashite::PAN::SameSquareError
8
- end
9
-
10
- it 'raises a type error from the source square' do
11
- -> { Sashite::PAN::Shift.new '42', 43 }.must_raise TypeError
12
- end
13
-
14
- it 'raises a type error from the destination square' do
15
- -> { Sashite::PAN::Shift.new 42, '43' }.must_raise TypeError
16
- end
17
- end
18
-
19
- describe 'instances' do
20
- before do
21
- @action = Sashite::PAN.load :shift, 42, 43
22
- end
23
-
24
- it 'returns the action' do
25
- @action.to_a.must_equal [ :shift, 42, 43 ]
26
- end
27
-
28
- it 'returns the action (once again)' do
29
- @action.to_a.must_equal Sashite::PAN::Shift.new(42, 43).to_a
30
- end
31
-
32
- it 'returns the verb of the action' do
33
- @action.verb.must_equal :shift
34
- end
35
-
36
- it 'returns the src_square of the action' do
37
- @action.src_square.must_equal 42
38
- end
39
-
40
- it 'returns the dst_square of the action' do
41
- @action.dst_square.must_equal 43
42
- end
43
- end
44
- end
45
- end