sportdb 0.4.2 → 0.4.3
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.
- data/lib/sportdb/cli/runner.rb +1 -1
- data/lib/sportdb/models/event.rb +9 -7
- data/lib/sportdb/models/group.rb +9 -4
- data/lib/sportdb/reader.rb +90 -16
- data/lib/sportdb/version.rb +1 -1
- metadata +4 -4
data/lib/sportdb/cli/runner.rb
CHANGED
data/lib/sportdb/models/event.rb
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
module SportDB
|
|
2
|
-
module Models
|
|
3
|
-
|
|
1
|
+
module SportDB::Models
|
|
4
2
|
|
|
5
3
|
class Event < ActiveRecord::Base
|
|
6
4
|
|
|
@@ -11,9 +9,13 @@ class Event < ActiveRecord::Base
|
|
|
11
9
|
has_many :event_teams, :class_name => 'EventTeam'
|
|
12
10
|
has_many :teams, :through => :event_teams
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
def add_teams_from_ary!( team_keys )
|
|
13
|
+
team_keys.each do |team_key|
|
|
14
|
+
team = Team.find_by_key!( team_key )
|
|
15
|
+
self.teams << team
|
|
16
|
+
end
|
|
17
|
+
end
|
|
15
18
|
|
|
19
|
+
end # class Event
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
end # module Models
|
|
19
|
-
end # module SportDB
|
|
21
|
+
end # module SportDB::Models
|
data/lib/sportdb/models/group.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
module SportDB
|
|
2
|
-
module Models
|
|
1
|
+
module SportDB::Models
|
|
3
2
|
|
|
4
3
|
|
|
5
4
|
class Group < ActiveRecord::Base
|
|
@@ -10,9 +9,15 @@ class Group < ActiveRecord::Base
|
|
|
10
9
|
has_many :group_teams, :class_name => 'GroupTeam'
|
|
11
10
|
has_many :teams, :through => :group_teams
|
|
12
11
|
|
|
12
|
+
def add_teams_from_ary!( team_keys )
|
|
13
|
+
team_keys.each do |team_key|
|
|
14
|
+
team = Team.find_by_key!( team_key )
|
|
15
|
+
self.teams << team
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
13
19
|
end # class Group
|
|
14
20
|
|
|
15
21
|
|
|
16
|
-
|
|
17
|
-
end # module SportDB
|
|
22
|
+
end # module SportDB::Models
|
|
18
23
|
|
data/lib/sportdb/reader.rb
CHANGED
|
@@ -72,10 +72,22 @@ class Reader
|
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
def is_round?( line )
|
|
75
|
-
line =~ /Spieltag|Runde/
|
|
75
|
+
line =~ /Spieltag|Runde|Achtelfinale|Viertelfinale|Halbfinale|Finale/
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def find_knockout_flag( line )
|
|
79
|
+
if line =~ /Achtelfinale|Viertelfinale|Halbfinale|Finale|K\.O\.|Knockout/
|
|
80
|
+
puts " setting knockout flag to true"
|
|
81
|
+
true
|
|
82
|
+
else
|
|
83
|
+
false
|
|
84
|
+
end
|
|
76
85
|
end
|
|
77
86
|
|
|
78
87
|
def find_round_pos!( line )
|
|
88
|
+
## fix/todo:
|
|
89
|
+
## if no round found assume last_pos+1 ??? why? why not?
|
|
90
|
+
|
|
79
91
|
regex = /\b(\d+)\b/
|
|
80
92
|
|
|
81
93
|
if line =~ regex
|
|
@@ -126,7 +138,26 @@ class Reader
|
|
|
126
138
|
end
|
|
127
139
|
end
|
|
128
140
|
|
|
129
|
-
|
|
141
|
+
|
|
142
|
+
def find_game_pos!( line )
|
|
143
|
+
# extract optional game pos from line
|
|
144
|
+
# and return it
|
|
145
|
+
# NB: side effect - removes pos from line string
|
|
146
|
+
|
|
147
|
+
# e.g. (1) - must start line
|
|
148
|
+
regex = /^[ \t]*\((\d{1,3})\)[ \t]+/
|
|
149
|
+
if line =~ regex
|
|
150
|
+
puts " pos: >#{$1}<"
|
|
151
|
+
|
|
152
|
+
line.sub!( regex, '[POS] ' )
|
|
153
|
+
return $1.to_i
|
|
154
|
+
else
|
|
155
|
+
return nil
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def find_scores!( line )
|
|
130
161
|
# extract score from line
|
|
131
162
|
# and return it
|
|
132
163
|
# NB: side effect - removes date from line string
|
|
@@ -134,17 +165,42 @@ class Reader
|
|
|
134
165
|
# e.g. 1:2 or 0:2 or 3:3
|
|
135
166
|
regex = /\b(\d):(\d)\b/
|
|
136
167
|
|
|
168
|
+
# e.g. 1:2nV => overtime
|
|
169
|
+
regex_ot = /\b(\d):(\d)[ \t]?[nN][vV]\b/
|
|
170
|
+
|
|
171
|
+
# e.g. 5:4iE => penalty
|
|
172
|
+
regex_p = /\b(\d):(\d)[ \t]?[iI][eE]\b/
|
|
173
|
+
|
|
174
|
+
scores = []
|
|
175
|
+
|
|
137
176
|
if line =~ regex
|
|
138
|
-
|
|
139
|
-
puts " score: >#{value}<"
|
|
177
|
+
puts " score: >#{$1}-#{$2}<"
|
|
140
178
|
|
|
141
179
|
line.sub!( regex, '[SCORE]' )
|
|
142
180
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
181
|
+
scores << $1.to_i
|
|
182
|
+
scores << $2.to_i
|
|
183
|
+
|
|
184
|
+
if line =~ regex_ot
|
|
185
|
+
puts " score.ot: >#{$1}-#{$2}<"
|
|
186
|
+
|
|
187
|
+
line.sub!( regex_ot, '[SCORE.OT]' )
|
|
188
|
+
|
|
189
|
+
scores << $1.to_i
|
|
190
|
+
scores << $2.to_i
|
|
191
|
+
|
|
192
|
+
if line =~ regex_p
|
|
193
|
+
puts " score.p: >#{$1}-#{$2}<"
|
|
194
|
+
|
|
195
|
+
line.sub!( regex_p, '[SCORE.P]' )
|
|
196
|
+
|
|
197
|
+
scores << $1.to_i
|
|
198
|
+
scores << $2.to_i
|
|
199
|
+
end
|
|
200
|
+
end
|
|
146
201
|
end
|
|
147
|
-
|
|
202
|
+
scores
|
|
203
|
+
end # methdod find_scores!
|
|
148
204
|
|
|
149
205
|
|
|
150
206
|
def find_team_worker!( line, index )
|
|
@@ -221,6 +277,8 @@ class Reader
|
|
|
221
277
|
if is_round?( line )
|
|
222
278
|
puts "parsing round line: >#{line}<"
|
|
223
279
|
pos = find_round_pos!( line )
|
|
280
|
+
|
|
281
|
+
@knockout_flag = find_knockout_flag( line )
|
|
224
282
|
puts " line: >#{line}<"
|
|
225
283
|
|
|
226
284
|
## NB: dummy/placeholder start_at, end_at date
|
|
@@ -257,12 +315,14 @@ class Reader
|
|
|
257
315
|
else
|
|
258
316
|
puts "parsing game (fixture) line: >#{line}<"
|
|
259
317
|
|
|
318
|
+
pos = find_game_pos!( line )
|
|
319
|
+
|
|
260
320
|
match_teams!( line )
|
|
261
321
|
team1_key = find_team1!( line )
|
|
262
322
|
team2_key = find_team2!( line )
|
|
263
323
|
|
|
264
324
|
date = find_date!( line )
|
|
265
|
-
|
|
325
|
+
scores = find_scores!( line )
|
|
266
326
|
|
|
267
327
|
puts " line: >#{line}<"
|
|
268
328
|
|
|
@@ -279,10 +339,17 @@ class Reader
|
|
|
279
339
|
)
|
|
280
340
|
|
|
281
341
|
game_attribs = {
|
|
282
|
-
score1:
|
|
283
|
-
score2:
|
|
284
|
-
|
|
342
|
+
score1: scores[0],
|
|
343
|
+
score2: scores[1],
|
|
344
|
+
score3: scores[2],
|
|
345
|
+
score4: scores[3],
|
|
346
|
+
score5: scores[4],
|
|
347
|
+
score6: scores[5],
|
|
348
|
+
play_at: date,
|
|
349
|
+
knockout: @knockout_flag
|
|
285
350
|
}
|
|
351
|
+
|
|
352
|
+
game_attribs[ :pos ] = pos if pos.present?
|
|
286
353
|
|
|
287
354
|
if game.present?
|
|
288
355
|
puts "*** update game #{game.id}:"
|
|
@@ -291,13 +358,15 @@ class Reader
|
|
|
291
358
|
game = Game.new
|
|
292
359
|
|
|
293
360
|
more_game_attribs = {
|
|
294
|
-
## NB: use round.games.count for pos
|
|
295
|
-
## lets us add games out of order if later needed
|
|
296
|
-
pos: @round.games.count+1,
|
|
297
361
|
round_id: @round.id,
|
|
298
362
|
team1_id: team1.id,
|
|
299
363
|
team2_id: team2.id
|
|
300
|
-
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
## NB: use round.games.count for pos
|
|
367
|
+
## lets us add games out of order if later needed
|
|
368
|
+
more_game_attribs[ :pos ] = @round.games.count+1 if pos.nil?
|
|
369
|
+
|
|
301
370
|
game_attribs = game_attribs.merge( more_game_attribs )
|
|
302
371
|
end
|
|
303
372
|
|
|
@@ -313,6 +382,11 @@ class Reader
|
|
|
313
382
|
round = Round.find( k )
|
|
314
383
|
games = round.games.order( 'play_at asc' ).all
|
|
315
384
|
|
|
385
|
+
## skip rouns w/ no games
|
|
386
|
+
|
|
387
|
+
## todo/fix: what's the best way for checking assoc w/ 0 recs?
|
|
388
|
+
next if games.size == 0
|
|
389
|
+
|
|
316
390
|
round_attribs = {}
|
|
317
391
|
|
|
318
392
|
## todo: check for no records
|
data/lib/sportdb/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sportdb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 9
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 4
|
|
9
|
-
-
|
|
10
|
-
version: 0.4.
|
|
9
|
+
- 3
|
|
10
|
+
version: 0.4.3
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Gerald Bauer
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2012-10-
|
|
18
|
+
date: 2012-10-28 00:00:00 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: activerecord
|