software_challenge_client 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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