software_challenge_client 0.1.5 → 0.2.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +6 -0
  5. data/AUTHORS +6 -0
  6. data/Guardfile +44 -0
  7. data/README.md +45 -0
  8. data/RELEASES.md +4 -0
  9. data/develop.sh +3 -0
  10. data/example/client.rb +45 -17
  11. data/example/main.rb +1 -1
  12. data/generate-authors.sh +19 -0
  13. data/lib/software_challenge_client.rb +18 -15
  14. data/lib/software_challenge_client/action.rb +278 -0
  15. data/lib/software_challenge_client/board.rb +74 -289
  16. data/lib/software_challenge_client/client_interface.rb +8 -3
  17. data/lib/software_challenge_client/condition.rb +2 -4
  18. data/lib/software_challenge_client/debug_hint.rb +3 -25
  19. data/lib/software_challenge_client/direction.rb +39 -0
  20. data/lib/software_challenge_client/field.rb +34 -12
  21. data/lib/software_challenge_client/field_type.rb +29 -8
  22. data/lib/software_challenge_client/field_unavailable_exception.rb +17 -0
  23. data/lib/software_challenge_client/game_state.rb +88 -255
  24. data/lib/software_challenge_client/invalid_move_exception.rb +16 -0
  25. data/lib/software_challenge_client/logging.rb +24 -0
  26. data/lib/software_challenge_client/move.rb +36 -35
  27. data/lib/software_challenge_client/network.rb +16 -19
  28. data/lib/software_challenge_client/player.rb +47 -10
  29. data/lib/software_challenge_client/player_color.rb +8 -7
  30. data/lib/software_challenge_client/protocol.rb +131 -83
  31. data/lib/software_challenge_client/runner.rb +9 -7
  32. data/lib/software_challenge_client/version.rb +1 -1
  33. data/release.sh +9 -0
  34. data/software_challenge_client.gemspec +20 -8
  35. metadata +175 -7
  36. data/lib/software_challenge_client/connection.rb +0 -56
@@ -4,22 +4,24 @@ require_relative 'client_interface'
4
4
  require_relative 'network'
5
5
 
6
6
  class Runner
7
+ include Logging
8
+
7
9
  attr_reader :network
8
10
 
9
11
  def initialize(host, port, client, reservation = nil)
10
- puts 'Software Challenge 2015'
11
- puts 'Ruby Client'
12
- puts "Host: #{host}"
13
- puts "Port: #{port}"
12
+ logger.info 'Software Challenge 2017'
13
+ logger.info 'Ruby Client'
14
+ logger.info "Host: #{host}"
15
+ logger.info "Port: #{port}"
14
16
 
15
- board = Board.new(true)
17
+ board = Board.new()
16
18
  @network = Network.new(host, port, board, client, reservation)
17
19
  end
18
20
 
19
21
  def start
20
22
  self.network.connect
21
23
  if self.network.connected == false
22
- puts 'Not connected'
24
+ logger.error 'Not connected'
23
25
  return
24
26
  end
25
27
 
@@ -28,7 +30,7 @@ class Runner
28
30
  sleep(0.01)
29
31
  end
30
32
 
31
- puts 'Program end...'
33
+ logger.info 'Program end...'
32
34
  self.network.disconnect
33
35
  end
34
36
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module SoftwareChallengeClient
3
- VERSION = "0.1.5"
3
+ VERSION = "0.2.0"
4
4
  end
data/release.sh ADDED
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+
3
+ # This shell script automates the process of releasing a new gem version when
4
+ # running ruby in a docker container.
5
+
6
+ set -x # echo commands as they are executed
7
+ sudo chown -R root.root "$HOME/.ssh"
8
+ docker run -it --rm -v "$PWD":/usr/src/app -v "$HOME/.gitconfig":/root/.gitconfig -v "$HOME/.ssh":/root/.ssh -v "$HOME/.gem/credentials":/root/.gem/credentials -w /usr/src/app ruby:latest sh -c "bundle install --path vendor/bundle && bundle exec rake release"
9
+ sudo chown -R $USER.$USER "$HOME/.ssh"
@@ -6,19 +6,31 @@ require 'software_challenge_client/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "software_challenge_client"
8
8
  spec.version = SoftwareChallengeClient::VERSION
9
- spec.authors = ["Ralf-Tobias Diekert"]
10
- spec.email = ["rtd@informatik.uni-kiel.de"]
9
+ spec.authors = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/^(.*) *</)[1] }
10
+ spec.email = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/<(.*)>/)[1] }
11
11
 
12
- spec.summary = %q{This gem provides functions to build a client for the coding competition Software-Challenge 2016.}
13
- spec.description = %q{}
14
- spec.homepage = "http://www.software-challenge.de"
12
+ spec.summary = 'This gem provides functions to build a client for the coding competition Software-Challenge 2017.'
13
+ spec.description = ''
14
+ spec.homepage = 'http://www.software-challenge.de'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
17
  spec.bindir = "exe"
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", ">= 1.10"
22
- spec.add_development_dependency "rake", ">= 10.0"
23
- spec.add_development_dependency "yard", ">= 0.8"
21
+ spec.add_dependency 'typesafe_enum'
22
+ spec.add_dependency 'builder'
23
+
24
+ spec.add_development_dependency 'bundler', '>= 1.10'
25
+ spec.add_development_dependency 'rake', '>= 10.0'
26
+ spec.add_development_dependency 'yard', '>= 0.8'
27
+ spec.add_development_dependency 'rspec'
28
+ spec.add_development_dependency 'fuubar'
29
+ spec.add_development_dependency 'rubocop'
30
+ spec.add_development_dependency 'rubocop-rspec'
31
+ spec.add_development_dependency 'guard'
32
+ spec.add_development_dependency 'guard-rspec'
33
+ spec.add_development_dependency 'guard-rubocop'
34
+ spec.add_development_dependency 'pry'
35
+ spec.add_development_dependency 'pry-rescue'
24
36
  end
metadata CHANGED
@@ -1,15 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: software_challenge_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
- - Ralf-Tobias Diekert
7
+ - 'kwollw '
8
+ - 'Ralf-Tobias Diekert '
9
+ - 'Sven Koschnicke '
8
10
  autorequire:
9
11
  bindir: exe
10
12
  cert_chain: []
11
- date: 2016-01-12 00:00:00.000000000 Z
13
+ date: 2016-10-07 00:00:00.000000000 Z
12
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: typesafe_enum
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: builder
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
13
43
  - !ruby/object:Gem::Dependency
14
44
  name: bundler
15
45
  requirement: !ruby/object:Gem::Requirement
@@ -52,33 +82,170 @@ dependencies:
52
82
  - - ">="
53
83
  - !ruby/object:Gem::Version
54
84
  version: '0.8'
85
+ - !ruby/object:Gem::Dependency
86
+ name: rspec
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: fuubar
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: rubocop
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: rubocop-rspec
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: guard
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ - !ruby/object:Gem::Dependency
156
+ name: guard-rspec
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ - !ruby/object:Gem::Dependency
170
+ name: guard-rubocop
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ - !ruby/object:Gem::Dependency
184
+ name: pry
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ type: :development
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ - !ruby/object:Gem::Dependency
198
+ name: pry-rescue
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ type: :development
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
55
211
  description: ''
56
212
  email:
57
- - rtd@informatik.uni-kiel.de
213
+ - kwollw@users.noreply.github.com
214
+ - ralfbias@hotmail.com
215
+ - s.koschnicke@gfxpro.com
58
216
  executables: []
59
217
  extensions: []
60
218
  extra_rdoc_files: []
61
219
  files:
62
220
  - ".gitignore"
63
221
  - ".rspec"
222
+ - ".rubocop.yml"
223
+ - AUTHORS
64
224
  - CODE_OF_CONDUCT.md
65
225
  - Gemfile
226
+ - Guardfile
66
227
  - README.md
67
228
  - RELEASES.md
68
229
  - Rakefile
69
230
  - bin/console
70
231
  - bin/setup
232
+ - develop.sh
71
233
  - example/client.rb
72
234
  - example/main.rb
235
+ - generate-authors.sh
73
236
  - lib/software_challenge_client.rb
237
+ - lib/software_challenge_client/action.rb
74
238
  - lib/software_challenge_client/board.rb
75
239
  - lib/software_challenge_client/client_interface.rb
76
240
  - lib/software_challenge_client/condition.rb
77
- - lib/software_challenge_client/connection.rb
78
241
  - lib/software_challenge_client/debug_hint.rb
242
+ - lib/software_challenge_client/direction.rb
79
243
  - lib/software_challenge_client/field.rb
80
244
  - lib/software_challenge_client/field_type.rb
245
+ - lib/software_challenge_client/field_unavailable_exception.rb
81
246
  - lib/software_challenge_client/game_state.rb
247
+ - lib/software_challenge_client/invalid_move_exception.rb
248
+ - lib/software_challenge_client/logging.rb
82
249
  - lib/software_challenge_client/move.rb
83
250
  - lib/software_challenge_client/network.rb
84
251
  - lib/software_challenge_client/player.rb
@@ -87,6 +254,7 @@ files:
87
254
  - lib/software_challenge_client/runner.rb
88
255
  - lib/software_challenge_client/util/constants.rb
89
256
  - lib/software_challenge_client/version.rb
257
+ - release.sh
90
258
  - software_challenge_client.gemspec
91
259
  homepage: http://www.software-challenge.de
92
260
  licenses: []
@@ -107,10 +275,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
275
  version: '0'
108
276
  requirements: []
109
277
  rubyforge_project:
110
- rubygems_version: 2.5.0
278
+ rubygems_version: 2.5.1
111
279
  signing_key:
112
280
  specification_version: 4
113
281
  summary: This gem provides functions to build a client for the coding competition
114
- Software-Challenge 2016.
282
+ Software-Challenge 2017.
115
283
  test_files: []
116
284
  has_rdoc:
@@ -1,56 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative 'player_color'
3
-
4
- # @author Ralf-Tobias Diekert
5
- # A connection between two fields owned by a specific player
6
- class Connection
7
- # @!attribute [r] x1
8
- # @return [Integer] x-coordinate starting point
9
- attr_reader :x1
10
- # @!attribute [r] x2
11
- # @return [Integer] y-coordinate starting point
12
- attr_reader :x2
13
- # @!attribute [r] y1
14
- # @return [Integer] x-coordinate ending point
15
- attr_reader :y1
16
- # @!attribute [r] y2
17
- # @return [Integer] y-coordinate ending point
18
- attr_reader :y2
19
- # @!attribute [r] ownerColor
20
- # @return [PlayerColor] connection's owner's color
21
- attr_reader :ownerColor
22
-
23
- # Initializer
24
- #
25
- # @param x1 [Integer] x-coordinate starting point
26
- # @param y1 [Integer] y-coordinate starting point
27
- # @param x2 [Integer] x-coordinate ending point
28
- # @param y2 [Integer] y-coordinate ending point
29
- # @param owner [PlayerColor] connection's owner's color
30
- def initialize(x1, y1, x2, y2, ownerColor)
31
- @x1 = x1
32
- @x2 = x2
33
- @y1 = y1
34
- @y2 = y2
35
- @ownerColor = ownerColor
36
- end
37
-
38
- def ==(another_connection)
39
- if (self.x1 == another_connection.x1 &&
40
- self.y1 == another_connection.y1 &&
41
- self.x2 == another_connection.x2 &&
42
- self.y2 == another_connection.y2 ||
43
- self.x1 == another_connection.x2 &&
44
- self.y1 == another_connection.y2 &&
45
- self.x2 == another_connection.x1 &&
46
- self.y2 == another_connection.y1)
47
- return ownerColor == another_connection.ownerColor
48
- else
49
- return false
50
- end
51
- end
52
-
53
- def to_s
54
- return "#{self.ownerColor} : (#{self.x1}, #{self.y1}) - (#{self.x2}, #{self.y2})"
55
- end
56
- end