sportdb 1.1.0 → 1.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.
- data/Rakefile +1 -1
- data/lib/sportdb/cli/main.rb +3 -0
- data/lib/sportdb/lang.rb +17 -10
- data/lib/sportdb/reader.rb +26 -25
- data/lib/sportdb/utils.rb +17 -18
- data/lib/sportdb/version.rb +1 -1
- metadata +7 -7
data/Rakefile
CHANGED
data/lib/sportdb/cli/main.rb
CHANGED
|
@@ -4,6 +4,7 @@ require 'commander/import'
|
|
|
4
4
|
|
|
5
5
|
# our own code / additional for cli only
|
|
6
6
|
|
|
7
|
+
require 'logutils/db'
|
|
7
8
|
require 'sportdb/cli/opts'
|
|
8
9
|
|
|
9
10
|
|
|
@@ -60,6 +61,8 @@ def connect_to_db( options )
|
|
|
60
61
|
pp db_config
|
|
61
62
|
|
|
62
63
|
ActiveRecord::Base.establish_connection( db_config )
|
|
64
|
+
|
|
65
|
+
LogDb.setup # start logging to db
|
|
63
66
|
end
|
|
64
67
|
|
|
65
68
|
|
data/lib/sportdb/lang.rb
CHANGED
|
@@ -4,7 +4,11 @@ module SportDB
|
|
|
4
4
|
|
|
5
5
|
class Lang
|
|
6
6
|
|
|
7
|
-
def
|
|
7
|
+
def logger
|
|
8
|
+
@logger ||= LogUtils[ self ]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def initialize
|
|
8
12
|
|
|
9
13
|
@lang = 'en' # make default lang english/en
|
|
10
14
|
|
|
@@ -37,11 +41,11 @@ class Lang
|
|
|
37
41
|
attr_reader :lang
|
|
38
42
|
|
|
39
43
|
def lang=(value)
|
|
40
|
-
|
|
44
|
+
logger.debug "setting lang to #{value}"
|
|
41
45
|
|
|
42
46
|
if @lang != value
|
|
43
47
|
# reset cached values on language change
|
|
44
|
-
|
|
48
|
+
logger.debug "reseting cached lang values (lang changed from #{@lang} to #{value})"
|
|
45
49
|
|
|
46
50
|
@group = nil
|
|
47
51
|
@round = nil
|
|
@@ -184,7 +188,7 @@ private
|
|
|
184
188
|
key = key_wild.to_s.strip
|
|
185
189
|
values = values_wild.to_s.strip
|
|
186
190
|
|
|
187
|
-
|
|
191
|
+
logger.debug "processing key >>#{key}<< with words >>#{values}<<"
|
|
188
192
|
|
|
189
193
|
ary += values.split('|')
|
|
190
194
|
end
|
|
@@ -196,8 +200,11 @@ end # class Lang
|
|
|
196
200
|
|
|
197
201
|
class LangChecker
|
|
198
202
|
|
|
199
|
-
def
|
|
200
|
-
|
|
203
|
+
def logger
|
|
204
|
+
@logger ||= LogUtils[ self ]
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def initialize
|
|
201
208
|
end
|
|
202
209
|
|
|
203
210
|
def analyze( name, include_path )
|
|
@@ -205,7 +212,7 @@ class LangChecker
|
|
|
205
212
|
|
|
206
213
|
path = "#{include_path}/#{name}.txt"
|
|
207
214
|
|
|
208
|
-
|
|
215
|
+
logger.info "parsing data '#{name}' (#{path})..."
|
|
209
216
|
|
|
210
217
|
text = File.read_utf8( path )
|
|
211
218
|
|
|
@@ -227,11 +234,11 @@ class LangChecker
|
|
|
227
234
|
|
|
228
235
|
# dump stats
|
|
229
236
|
|
|
230
|
-
|
|
237
|
+
logger.info "****************************************"
|
|
231
238
|
lang_counts.each_with_index do |item,index|
|
|
232
239
|
## e.g. 1. en: 20 words
|
|
233
240
|
## 2. de: 2 words
|
|
234
|
-
|
|
241
|
+
logger.info "#{index+1}. #{item[0]}: #{item[1]}"
|
|
235
242
|
end
|
|
236
243
|
|
|
237
244
|
## return lang code w/ highest count
|
|
@@ -244,7 +251,7 @@ private
|
|
|
244
251
|
pos = text.index( word )
|
|
245
252
|
while pos.nil? == false
|
|
246
253
|
count += 1
|
|
247
|
-
|
|
254
|
+
logger.debug "bingo - found >>#{word}<< on pos #{pos}, count: #{count}"
|
|
248
255
|
### todo: check if pos+word.length/size needs +1 or similar
|
|
249
256
|
pos = text.index( word, pos+word.length)
|
|
250
257
|
end
|
data/lib/sportdb/reader.rb
CHANGED
|
@@ -4,17 +4,18 @@ module SportDB
|
|
|
4
4
|
|
|
5
5
|
class Reader
|
|
6
6
|
|
|
7
|
+
def logger
|
|
8
|
+
@logger ||= LogUtils[ self ]
|
|
9
|
+
end
|
|
10
|
+
|
|
7
11
|
## make models available in sportdb module by default with namespace
|
|
8
12
|
# e.g. lets you use Team instead of Models::Team
|
|
9
13
|
include SportDB::Models
|
|
10
14
|
|
|
11
15
|
|
|
12
|
-
def initialize
|
|
13
|
-
@logger = LogUtils::Logger.new
|
|
16
|
+
def initialize
|
|
14
17
|
end
|
|
15
18
|
|
|
16
|
-
attr_reader :logger
|
|
17
|
-
|
|
18
19
|
def load_setup( setup, include_path )
|
|
19
20
|
ary = load_fixture_setup( setup, include_path )
|
|
20
21
|
load( ary, include_path )
|
|
@@ -136,7 +137,7 @@ class Reader
|
|
|
136
137
|
|
|
137
138
|
logger.info "parsing data '#{name}' (#{path})..."
|
|
138
139
|
|
|
139
|
-
reader = ValuesReader.new(
|
|
140
|
+
reader = ValuesReader.new( path, more_values )
|
|
140
141
|
|
|
141
142
|
load_leagues_worker( reader )
|
|
142
143
|
|
|
@@ -151,7 +152,7 @@ class Reader
|
|
|
151
152
|
|
|
152
153
|
puts "*** parsing data '#{name}' (#{path})..."
|
|
153
154
|
|
|
154
|
-
reader = HashReader.new(
|
|
155
|
+
reader = HashReader.new( path )
|
|
155
156
|
|
|
156
157
|
reader.each_typed do |key, value|
|
|
157
158
|
|
|
@@ -169,16 +170,16 @@ class Reader
|
|
|
169
170
|
|
|
170
171
|
## check if it exists
|
|
171
172
|
if season.present?
|
|
172
|
-
|
|
173
|
+
logger.debug "update season #{season.id}-#{season.key}:"
|
|
173
174
|
else
|
|
174
|
-
|
|
175
|
+
logger.debug "create season:"
|
|
175
176
|
season = Season.new
|
|
176
177
|
season_attribs[ :key ] = item.to_s.strip
|
|
177
178
|
end
|
|
178
179
|
|
|
179
180
|
season_attribs[:title] = item.to_s.strip
|
|
180
181
|
|
|
181
|
-
|
|
182
|
+
logger.debug season_attribs.to_json
|
|
182
183
|
|
|
183
184
|
season.update_attributes!( season_attribs )
|
|
184
185
|
end
|
|
@@ -201,7 +202,7 @@ class Reader
|
|
|
201
202
|
|
|
202
203
|
logger.info "parsing data '#{name}' (#{path})..."
|
|
203
204
|
|
|
204
|
-
reader = HashReader.new(
|
|
205
|
+
reader = HashReader.new( path )
|
|
205
206
|
|
|
206
207
|
event_attribs = {}
|
|
207
208
|
|
|
@@ -274,7 +275,7 @@ class Reader
|
|
|
274
275
|
event = Event.new
|
|
275
276
|
end
|
|
276
277
|
|
|
277
|
-
|
|
278
|
+
logger.debug event_attribs.to_json
|
|
278
279
|
|
|
279
280
|
event.update_attributes!( event_attribs )
|
|
280
281
|
|
|
@@ -286,7 +287,7 @@ class Reader
|
|
|
286
287
|
def load_fixtures_from_string( event_key, text ) # load from string (e.g. passed in via web form)
|
|
287
288
|
|
|
288
289
|
## todo/fix: move code into LineReader e.g. use LineReader.fromString() - why? why not?
|
|
289
|
-
reader = StringLineReader.new(
|
|
290
|
+
reader = StringLineReader.new( text )
|
|
290
291
|
|
|
291
292
|
load_fixtures_worker( event_key, reader )
|
|
292
293
|
|
|
@@ -302,7 +303,7 @@ class Reader
|
|
|
302
303
|
|
|
303
304
|
SportDB.lang.lang = LangChecker.new.analyze( name, include_path )
|
|
304
305
|
|
|
305
|
-
reader = LineReader.new(
|
|
306
|
+
reader = LineReader.new( path )
|
|
306
307
|
|
|
307
308
|
load_fixtures_worker( event_key, reader )
|
|
308
309
|
|
|
@@ -316,7 +317,7 @@ class Reader
|
|
|
316
317
|
|
|
317
318
|
puts "*** parsing data '#{name}' (#{path})..."
|
|
318
319
|
|
|
319
|
-
reader = ValuesReader.new(
|
|
320
|
+
reader = ValuesReader.new( path, more_values )
|
|
320
321
|
|
|
321
322
|
load_teams_worker( reader )
|
|
322
323
|
|
|
@@ -456,7 +457,7 @@ private
|
|
|
456
457
|
})
|
|
457
458
|
end
|
|
458
459
|
|
|
459
|
-
|
|
460
|
+
logger.debug group_attribs.to_json
|
|
460
461
|
|
|
461
462
|
@group.update_attributes!( group_attribs )
|
|
462
463
|
|
|
@@ -495,9 +496,9 @@ private
|
|
|
495
496
|
|
|
496
497
|
@round = Round.find_by_event_id_and_pos( @event.id, pos )
|
|
497
498
|
if @round.present?
|
|
498
|
-
|
|
499
|
+
logger.debug "update round #{@round.id}:"
|
|
499
500
|
else
|
|
500
|
-
|
|
501
|
+
logger.debug "create round:"
|
|
501
502
|
@round = Round.new
|
|
502
503
|
|
|
503
504
|
round_attribs = round_attribs.merge( {
|
|
@@ -508,7 +509,7 @@ private
|
|
|
508
509
|
})
|
|
509
510
|
end
|
|
510
511
|
|
|
511
|
-
|
|
512
|
+
logger.debug round_attribs.to_json
|
|
512
513
|
|
|
513
514
|
@round.update_attributes!( round_attribs )
|
|
514
515
|
|
|
@@ -517,7 +518,7 @@ private
|
|
|
517
518
|
end
|
|
518
519
|
|
|
519
520
|
def parse_game( line )
|
|
520
|
-
|
|
521
|
+
logger.debug "parsing game (fixture) line: >#{line}<"
|
|
521
522
|
|
|
522
523
|
pos = find_game_pos!( line )
|
|
523
524
|
|
|
@@ -528,7 +529,7 @@ private
|
|
|
528
529
|
date = find_date!( line )
|
|
529
530
|
scores = find_scores!( line )
|
|
530
531
|
|
|
531
|
-
|
|
532
|
+
logger.debug " line: >#{line}<"
|
|
532
533
|
|
|
533
534
|
|
|
534
535
|
### todo: cache team lookups in hash?
|
|
@@ -557,9 +558,9 @@ private
|
|
|
557
558
|
game_attribs[ :pos ] = pos if pos.present?
|
|
558
559
|
|
|
559
560
|
if game.present?
|
|
560
|
-
|
|
561
|
+
logger.debug "update game #{game.id}:"
|
|
561
562
|
else
|
|
562
|
-
|
|
563
|
+
logger.debug "create game:"
|
|
563
564
|
game = Game.new
|
|
564
565
|
|
|
565
566
|
more_game_attribs = {
|
|
@@ -575,7 +576,7 @@ private
|
|
|
575
576
|
game_attribs = game_attribs.merge( more_game_attribs )
|
|
576
577
|
end
|
|
577
578
|
|
|
578
|
-
|
|
579
|
+
logger.debug game_attribs.to_json
|
|
579
580
|
|
|
580
581
|
game.update_attributes!( game_attribs )
|
|
581
582
|
end
|
|
@@ -594,7 +595,7 @@ private
|
|
|
594
595
|
end # lines.each
|
|
595
596
|
|
|
596
597
|
@patch_rounds.each do |k,v|
|
|
597
|
-
|
|
598
|
+
logger.debug "patch start_at/end_at date for round #{k}:"
|
|
598
599
|
round = Round.find( k )
|
|
599
600
|
games = round.games.order( 'play_at asc' ).all
|
|
600
601
|
|
|
@@ -611,7 +612,7 @@ private
|
|
|
611
612
|
round_attribs[:start_at] = games[0].play_at
|
|
612
613
|
round_attribs[:end_at ] = games[-1].play_at
|
|
613
614
|
|
|
614
|
-
|
|
615
|
+
logger.debug round_attribs.to_json
|
|
615
616
|
round.update_attributes!( round_attribs )
|
|
616
617
|
end
|
|
617
618
|
|
data/lib/sportdb/utils.rb
CHANGED
|
@@ -19,14 +19,14 @@ module SportDB::FixtureHelpers
|
|
|
19
19
|
## todo: check for adding ignore case for regex (e.g. 1st leg/1st Leg)
|
|
20
20
|
|
|
21
21
|
if line =~ SportDB.lang.regex_leg1
|
|
22
|
-
|
|
22
|
+
logger.debug " two leg knockout; skip knockout flag on first leg"
|
|
23
23
|
false
|
|
24
24
|
elsif line =~ SportDB.lang.regex_knockout_round
|
|
25
|
-
|
|
25
|
+
logger.debug " setting knockout flag to true"
|
|
26
26
|
true
|
|
27
27
|
elsif line =~ /K\.O\.|Knockout/
|
|
28
28
|
## NB: add two language independent markers, that is, K.O. and Knockout
|
|
29
|
-
|
|
29
|
+
logger.debug " setting knockout flag to true (lang independent marker)"
|
|
30
30
|
true
|
|
31
31
|
else
|
|
32
32
|
false
|
|
@@ -61,8 +61,8 @@ module SportDB::FixtureHelpers
|
|
|
61
61
|
|
|
62
62
|
title = match[0]
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
logger.debug " title: >#{title}<"
|
|
65
|
+
logger.debug " pos: >#{pos}<"
|
|
66
66
|
|
|
67
67
|
line.sub!( regex, '[GROUP|TITLE+POS]' )
|
|
68
68
|
|
|
@@ -81,7 +81,7 @@ module SportDB::FixtureHelpers
|
|
|
81
81
|
# e.g. (1) - must start line
|
|
82
82
|
regex = /^[ \t]*\((\d{1,3})\)[ \t]+/
|
|
83
83
|
if line =~ regex
|
|
84
|
-
|
|
84
|
+
logger.debug " pos: >#{$1}<"
|
|
85
85
|
|
|
86
86
|
line.sub!( regex, '[ROUND|POS] ' ) ## NB: add back trailing space that got swallowed w/ regex -> [ \t]+
|
|
87
87
|
return $1.to_i
|
|
@@ -110,7 +110,7 @@ module SportDB::FixtureHelpers
|
|
|
110
110
|
|
|
111
111
|
if line =~ regex
|
|
112
112
|
value = $1.to_i
|
|
113
|
-
|
|
113
|
+
logger.debug " pos: >#{value}<"
|
|
114
114
|
|
|
115
115
|
line.sub!( regex, '[ROUND|POS]' )
|
|
116
116
|
|
|
@@ -139,7 +139,7 @@ module SportDB::FixtureHelpers
|
|
|
139
139
|
|
|
140
140
|
if line =~ regex_db
|
|
141
141
|
value = "#{$1}-#{$2}-#{$3} #{$4}:#{$5}"
|
|
142
|
-
|
|
142
|
+
logger.debug " date: >#{value}<"
|
|
143
143
|
|
|
144
144
|
## todo: lets you configure year
|
|
145
145
|
## and time zone (e.g. cet, eet, utc, etc.)
|
|
@@ -149,14 +149,14 @@ module SportDB::FixtureHelpers
|
|
|
149
149
|
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
150
150
|
elsif line =~ regex_db2
|
|
151
151
|
value = "#{$1}-#{$2}-#{$3} 12:00"
|
|
152
|
-
|
|
152
|
+
logger.debug " date: >#{value}<"
|
|
153
153
|
|
|
154
154
|
line.sub!( regex_db2, '[DATE.DB2]' )
|
|
155
155
|
|
|
156
156
|
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
157
157
|
elsif line =~ regex_de2
|
|
158
158
|
value = "#{$3}-#{$2}-#{$1} #{$4}:#{$5}"
|
|
159
|
-
|
|
159
|
+
logger.debug " date: >#{value}<"
|
|
160
160
|
|
|
161
161
|
## todo: lets you configure year
|
|
162
162
|
## and time zone (e.g. cet, eet, utc, etc.)
|
|
@@ -166,7 +166,7 @@ module SportDB::FixtureHelpers
|
|
|
166
166
|
return DateTime.strptime( value, '%Y-%m-%d %H:%M' )
|
|
167
167
|
elsif line =~ regex_de
|
|
168
168
|
value = "2012-#{$2}-#{$1} #{$3}:#{$4}"
|
|
169
|
-
|
|
169
|
+
logger.debug " date: >#{value}<"
|
|
170
170
|
|
|
171
171
|
## todo: lets you configure year
|
|
172
172
|
## and time zone (e.g. cet, eet, utc, etc.)
|
|
@@ -188,7 +188,7 @@ module SportDB::FixtureHelpers
|
|
|
188
188
|
# e.g. (1) - must start line
|
|
189
189
|
regex = /^[ \t]*\((\d{1,3})\)[ \t]+/
|
|
190
190
|
if line =~ regex
|
|
191
|
-
|
|
191
|
+
logger.debug " pos: >#{$1}<"
|
|
192
192
|
|
|
193
193
|
line.sub!( regex, '[POS] ' )
|
|
194
194
|
return $1.to_i
|
|
@@ -222,7 +222,7 @@ module SportDB::FixtureHelpers
|
|
|
222
222
|
scores = []
|
|
223
223
|
|
|
224
224
|
if line =~ regex
|
|
225
|
-
|
|
225
|
+
logger.debug " score: >#{$1}-#{$2}<"
|
|
226
226
|
|
|
227
227
|
line.sub!( regex, '[SCORE]' )
|
|
228
228
|
|
|
@@ -230,7 +230,7 @@ module SportDB::FixtureHelpers
|
|
|
230
230
|
scores << $2.to_i
|
|
231
231
|
|
|
232
232
|
if line =~ regex_ot
|
|
233
|
-
|
|
233
|
+
logger.debug " score.ot: >#{$1}-#{$2}<"
|
|
234
234
|
|
|
235
235
|
line.sub!( regex_ot, '[SCORE.OT]' )
|
|
236
236
|
|
|
@@ -238,7 +238,7 @@ module SportDB::FixtureHelpers
|
|
|
238
238
|
scores << $2.to_i
|
|
239
239
|
|
|
240
240
|
if line =~ regex_p
|
|
241
|
-
|
|
241
|
+
logger.debug " score.p: >#{$1}-#{$2}<"
|
|
242
242
|
|
|
243
243
|
line.sub!( regex_p, '[SCORE.P]' )
|
|
244
244
|
|
|
@@ -256,7 +256,7 @@ module SportDB::FixtureHelpers
|
|
|
256
256
|
|
|
257
257
|
if line =~ regex
|
|
258
258
|
value = "#{$1}"
|
|
259
|
-
|
|
259
|
+
logger.debug " team#{index}: >#{value}<"
|
|
260
260
|
|
|
261
261
|
line.sub!( regex, "[TEAM#{index}]" )
|
|
262
262
|
|
|
@@ -297,7 +297,7 @@ module SportDB::FixtureHelpers
|
|
|
297
297
|
## check add $ e.g. (\b| |\t|$) does this work? - check w/ Benfica Lis.$
|
|
298
298
|
regex = /\b#{value}(\b| |\t|$)/ # wrap with world boundry (e.g. match only whole words e.g. not wac in wacker)
|
|
299
299
|
if line =~ regex
|
|
300
|
-
|
|
300
|
+
logger.debug " match for team >#{key}< >#{value}<"
|
|
301
301
|
# make sure @@oo{key}oo@@ doesn't match itself with other key e.g. wacker, wac, etc.
|
|
302
302
|
line.sub!( regex, "@@oo#{key}oo@@ " ) # NB: add one space char at end
|
|
303
303
|
return true # break out after first match (do NOT continue)
|
|
@@ -317,4 +317,3 @@ module SportDB::FixtureHelpers
|
|
|
317
317
|
|
|
318
318
|
|
|
319
319
|
end # module SportDB::FixtureHelpers
|
|
320
|
-
|
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: 31
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 1
|
|
8
|
-
-
|
|
8
|
+
- 2
|
|
9
9
|
- 0
|
|
10
|
-
version: 1.
|
|
10
|
+
version: 1.2.0
|
|
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: 2013-02-
|
|
18
|
+
date: 2013-02-22 00:00:00 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: worlddb
|
|
@@ -25,12 +25,12 @@ dependencies:
|
|
|
25
25
|
requirements:
|
|
26
26
|
- - ~>
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
|
-
hash:
|
|
28
|
+
hash: 31
|
|
29
29
|
segments:
|
|
30
30
|
- 1
|
|
31
|
-
-
|
|
31
|
+
- 2
|
|
32
32
|
- 0
|
|
33
|
-
version: 1.
|
|
33
|
+
version: 1.2.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
version_requirements: *id001
|
|
36
36
|
- !ruby/object:Gem::Dependency
|