sportdb 1.6.11 → 1.6.12
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/models/event.rb +1 -34
- data/lib/sportdb/models/track.rb +3 -33
- data/lib/sportdb/reader.rb +13 -47
- data/lib/sportdb/utils.rb +90 -62
- data/lib/sportdb/version.rb +1 -1
- metadata +10 -10
data/lib/sportdb/models/event.rb
CHANGED
|
@@ -48,40 +48,7 @@ class Event < ActiveRecord::Base
|
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def known_teams_table
|
|
51
|
-
|
|
52
|
-
## build known teams table w/ synonyms e.g.
|
|
53
|
-
#
|
|
54
|
-
# [[ 'wolfsbrug', [ 'VfL Wolfsburg' ]],
|
|
55
|
-
# [ 'augsburg', [ 'FC Augsburg', 'Augi2', 'Augi3' ]],
|
|
56
|
-
# [ 'stuttgart', [ 'VfB Stuttgart' ]] ]
|
|
57
|
-
|
|
58
|
-
known_teams = []
|
|
59
|
-
|
|
60
|
-
teams.each_with_index do |team,index|
|
|
61
|
-
|
|
62
|
-
titles = []
|
|
63
|
-
titles << team.title
|
|
64
|
-
titles += team.synonyms.split('|') if team.synonyms.present?
|
|
65
|
-
|
|
66
|
-
## NB: sort here by length (largest goes first - best match)
|
|
67
|
-
# exclude code and key (key should always go last)
|
|
68
|
-
titles = titles.sort { |left,right| right.length <=> left.length }
|
|
69
|
-
|
|
70
|
-
## escape for regex plus allow subs for special chars/accents
|
|
71
|
-
titles = titles.map { |title| TextUtils.title_esc_regex( title ) }
|
|
72
|
-
|
|
73
|
-
titles << team.code if team.code.present?
|
|
74
|
-
titles << team.key
|
|
75
|
-
|
|
76
|
-
known_teams << [ team.key, titles ]
|
|
77
|
-
|
|
78
|
-
### fix:
|
|
79
|
-
## plain logger
|
|
80
|
-
|
|
81
|
-
LogUtils::Logger.root.debug " Team[#{index+1}] #{team.key} >#{titles.join('|')}<"
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
known_teams
|
|
51
|
+
@known_teams_table ||= build_match_table_for( teams )
|
|
85
52
|
end # method known_teams_table
|
|
86
53
|
|
|
87
54
|
end # class Event
|
data/lib/sportdb/models/track.rb
CHANGED
|
@@ -9,44 +9,14 @@ class Track < ActiveRecord::Base
|
|
|
9
9
|
#####################
|
|
10
10
|
## convenience helper for text parser/reader
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
### fix: move known_tracks_table to event!!! (e.g. scoped by event)
|
|
13
14
|
|
|
14
15
|
def self.known_tracks_table
|
|
15
|
-
|
|
16
|
-
## build known tracks table w/ synonyms e.g.
|
|
17
|
-
#
|
|
18
|
-
# [[ 'wolfsbrug', [ 'VfL Wolfsburg' ]],
|
|
19
|
-
# [ 'augsburg', [ 'FC Augsburg', 'Augi2', 'Augi3' ]],
|
|
20
|
-
# [ 'stuttgart', [ 'VfB Stuttgart' ]] ]
|
|
21
|
-
|
|
22
|
-
known_tracks = []
|
|
23
|
-
|
|
24
|
-
Track.all.each_with_index do |track,index|
|
|
25
|
-
|
|
26
|
-
titles = []
|
|
27
|
-
titles << track.title
|
|
28
|
-
titles += track.synonyms.split('|') if track.synonyms.present?
|
|
29
|
-
|
|
30
|
-
## NB: sort here by length (largest goes first - best match)
|
|
31
|
-
# exclude code and key (key should always go last)
|
|
32
|
-
titles = titles.sort { |left,right| right.length <=> left.length }
|
|
33
|
-
|
|
34
|
-
## escape for regex plus allow subs for special chars/accents
|
|
35
|
-
titles = titles.map { |title| TextUtils.title_esc_regex( title ) }
|
|
36
|
-
|
|
37
|
-
known_tracks << [ track.key, titles ]
|
|
38
|
-
|
|
39
|
-
### fix:
|
|
40
|
-
## plain logger
|
|
41
|
-
|
|
42
|
-
LogUtils::Logger.root.debug " Track[#{index+1}] #{track.key} >#{titles.join('|')}<"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
known_tracks
|
|
16
|
+
@@known_tracks_table ||= build_match_table_for( Track.all )
|
|
46
17
|
end # method known_tracks_table
|
|
47
18
|
|
|
48
19
|
|
|
49
|
-
|
|
50
20
|
def self.create_or_update_from_values( new_attributes, values )
|
|
51
21
|
|
|
52
22
|
## fix: add/configure logger for ActiveRecord!!!
|
data/lib/sportdb/reader.rb
CHANGED
|
@@ -150,65 +150,44 @@ class Reader
|
|
|
150
150
|
end # method load
|
|
151
151
|
|
|
152
152
|
|
|
153
|
-
def load_leagues( name,
|
|
154
|
-
|
|
155
|
-
path = "#{include_path}/#{name}.txt"
|
|
153
|
+
def load_leagues( name, more_attribs={} )
|
|
156
154
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
reader = ValuesReader.new( path, more_values )
|
|
155
|
+
reader = ValuesReaderV2.new( name, include_path, more_attribs )
|
|
160
156
|
|
|
161
157
|
reader.each_line do |new_attributes, values|
|
|
162
158
|
League.create_or_update_from_values( new_attributes, values )
|
|
163
159
|
end # each lines
|
|
164
|
-
|
|
165
|
-
Prop.create_from_fixture!( name, path )
|
|
166
|
-
|
|
167
|
-
end # load_leagues
|
|
168
160
|
|
|
161
|
+
end # load_leagues
|
|
169
162
|
|
|
170
|
-
def load_tracks( name, more_values={} )
|
|
171
|
-
|
|
172
|
-
path = "#{include_path}/#{name}.txt"
|
|
173
163
|
|
|
174
|
-
|
|
164
|
+
def load_tracks( name, more_attribs={} )
|
|
175
165
|
|
|
176
|
-
reader =
|
|
166
|
+
reader = ValuesReaderV2.new( name, include_path, more_attribs )
|
|
177
167
|
|
|
178
168
|
reader.each_line do |new_attributes, values|
|
|
179
169
|
Track.create_or_update_from_values( new_attributes, values )
|
|
180
170
|
end # each lines
|
|
181
|
-
|
|
182
|
-
Prop.create_from_fixture!( name, path )
|
|
183
171
|
|
|
184
172
|
end # load_tracks
|
|
185
173
|
|
|
186
174
|
|
|
187
175
|
|
|
188
|
-
def load_persons( name,
|
|
189
|
-
|
|
190
|
-
path = "#{include_path}/#{name}.txt"
|
|
191
|
-
|
|
192
|
-
logger.info "parsing data '#{name}' (#{path})..."
|
|
176
|
+
def load_persons( name, more_attribs={} )
|
|
193
177
|
|
|
194
|
-
reader =
|
|
178
|
+
reader = ValuesReaderV2.new( name, include_path, more_attribs )
|
|
195
179
|
|
|
196
180
|
reader.each_line do |new_attributes, values|
|
|
197
181
|
Person.create_or_update_from_values( new_attributes, values )
|
|
198
182
|
end # each lines
|
|
199
|
-
|
|
200
|
-
Prop.create_from_fixture!( name, path )
|
|
201
183
|
|
|
202
184
|
end # load_persons
|
|
203
185
|
|
|
204
186
|
|
|
205
187
|
|
|
206
188
|
def load_seasons( name )
|
|
207
|
-
path = "#{include_path}/#{name}.yml"
|
|
208
|
-
|
|
209
|
-
logger.info "parsing data '#{name}' (#{path})..."
|
|
210
189
|
|
|
211
|
-
reader =
|
|
190
|
+
reader = HashReaderV2.new( name, include_path )
|
|
212
191
|
|
|
213
192
|
####
|
|
214
193
|
## fix!!!!!
|
|
@@ -251,17 +230,12 @@ class Reader
|
|
|
251
230
|
end
|
|
252
231
|
|
|
253
232
|
end # each key,value
|
|
254
|
-
|
|
255
|
-
Prop.create_from_fixture!( name, path )
|
|
256
|
-
|
|
233
|
+
|
|
257
234
|
end # load_seasons
|
|
258
235
|
|
|
259
236
|
|
|
260
237
|
|
|
261
238
|
def load_event( name )
|
|
262
|
-
path = "#{include_path}/#{name}.yml"
|
|
263
|
-
|
|
264
|
-
logger.info "parsing data '#{name}' (#{path})..."
|
|
265
239
|
|
|
266
240
|
####
|
|
267
241
|
## fix!!!!!
|
|
@@ -269,7 +243,7 @@ class Reader
|
|
|
269
243
|
## use Event.create_or_update_from_hash_reader?? or similar
|
|
270
244
|
# move parsing code to model
|
|
271
245
|
|
|
272
|
-
reader =
|
|
246
|
+
reader = HashReaderV2.new( name, include_path )
|
|
273
247
|
|
|
274
248
|
event_attribs = {}
|
|
275
249
|
|
|
@@ -345,9 +319,7 @@ class Reader
|
|
|
345
319
|
logger.debug event_attribs.to_json
|
|
346
320
|
|
|
347
321
|
event.update_attributes!( event_attribs )
|
|
348
|
-
|
|
349
|
-
Prop.create_from_fixture!( name, path )
|
|
350
|
-
|
|
322
|
+
|
|
351
323
|
end # load_event
|
|
352
324
|
|
|
353
325
|
|
|
@@ -508,18 +480,12 @@ class Reader
|
|
|
508
480
|
end # method load_races_worker
|
|
509
481
|
|
|
510
482
|
|
|
511
|
-
def load_teams( name,
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
logger.info "parsing data '#{name}' (#{path})..."
|
|
515
|
-
|
|
516
|
-
reader = ValuesReader.new( path, more_values )
|
|
483
|
+
def load_teams( name, more_attribs={} )
|
|
484
|
+
reader = ValuesReaderV2.new( name, include_path, more_attribs )
|
|
517
485
|
|
|
518
486
|
reader.each_line do |new_attributes, values|
|
|
519
487
|
Team.create_or_update_from_values( new_attributes, values )
|
|
520
488
|
end # each lines
|
|
521
|
-
|
|
522
|
-
Prop.create_from_fixture!( name, path )
|
|
523
489
|
end # load_teams
|
|
524
490
|
|
|
525
491
|
private
|
data/lib/sportdb/utils.rb
CHANGED
|
@@ -3,6 +3,48 @@
|
|
|
3
3
|
### some utils moved to worldbdb/utils for reuse
|
|
4
4
|
|
|
5
5
|
|
|
6
|
+
### fix: move to textutils??
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def build_match_table_for( recs )
|
|
10
|
+
## build known tracks table w/ synonyms e.g.
|
|
11
|
+
#
|
|
12
|
+
# [[ 'wolfsbrug', [ 'VfL Wolfsburg' ]],
|
|
13
|
+
# [ 'augsburg', [ 'FC Augsburg', 'Augi2', 'Augi3' ]],
|
|
14
|
+
# [ 'stuttgart', [ 'VfB Stuttgart' ]] ]
|
|
15
|
+
|
|
16
|
+
known_titles = []
|
|
17
|
+
|
|
18
|
+
recs.each_with_index do |rec,index|
|
|
19
|
+
|
|
20
|
+
titles = []
|
|
21
|
+
titles << rec.title
|
|
22
|
+
titles += rec.synonyms.split('|') if rec.synonyms.present?
|
|
23
|
+
|
|
24
|
+
## NB: sort here by length (largest goes first - best match)
|
|
25
|
+
# exclude code and key (key should always go last)
|
|
26
|
+
titles = titles.sort { |left,right| right.length <=> left.length }
|
|
27
|
+
|
|
28
|
+
## escape for regex plus allow subs for special chars/accents
|
|
29
|
+
titles = titles.map { |title| TextUtils.title_esc_regex( title ) }
|
|
30
|
+
|
|
31
|
+
## NB: only include code field - if defined
|
|
32
|
+
titles << rec.code if rec.respond_to?(:code) && rec.code.present?
|
|
33
|
+
|
|
34
|
+
known_titles << [ rec.key, titles ]
|
|
35
|
+
|
|
36
|
+
### fix:
|
|
37
|
+
## plain logger
|
|
38
|
+
|
|
39
|
+
LogUtils::Logger.root.debug " #{rec.class.name}[#{index+1}] #{rec.key} >#{titles.join('|')}<"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
known_titles
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
6
48
|
module SportDb::FixtureHelpers
|
|
7
49
|
|
|
8
50
|
def is_postponed?( line )
|
|
@@ -286,47 +328,37 @@ module SportDb::FixtureHelpers
|
|
|
286
328
|
end
|
|
287
329
|
scores
|
|
288
330
|
end # methdod find_scores!
|
|
289
|
-
|
|
290
331
|
|
|
291
|
-
|
|
332
|
+
|
|
333
|
+
## todo/fix:
|
|
334
|
+
# find a better name find_xxx_by_title ?? find_xxx_w_match_table? or similiar
|
|
335
|
+
# move to its own file/module for easier maintance
|
|
336
|
+
# include build_match_table_for
|
|
337
|
+
# - lets us change internals e.g. lets improve matcher using a reverse index, for example
|
|
338
|
+
|
|
339
|
+
def find_xxx_worker!( name, line )
|
|
292
340
|
regex = /@@oo([^@]+?)oo@@/ # e.g. everything in @@ .... @@ (use non-greedy +? plus all chars but not @, that is [^@])
|
|
293
|
-
|
|
341
|
+
|
|
342
|
+
upcase_name = name.upcase
|
|
343
|
+
downcase_name = name.downcase
|
|
344
|
+
|
|
294
345
|
if line =~ regex
|
|
295
346
|
value = "#{$1}"
|
|
296
|
-
logger.debug "
|
|
347
|
+
logger.debug " #{downcase_name}: >#{value}<"
|
|
297
348
|
|
|
298
|
-
line.sub!( regex, "[
|
|
349
|
+
line.sub!( regex, "[#{upcase_name}]" )
|
|
299
350
|
|
|
300
351
|
return $1
|
|
301
352
|
else
|
|
302
353
|
return nil
|
|
303
354
|
end
|
|
304
355
|
end
|
|
305
|
-
|
|
306
|
-
def find_teams!( line )
|
|
307
|
-
counter = 1
|
|
308
|
-
teams = []
|
|
309
|
-
|
|
310
|
-
team = find_team_worker!( line, counter )
|
|
311
|
-
while team.present?
|
|
312
|
-
teams << team
|
|
313
|
-
counter += 1
|
|
314
|
-
team = find_team_worker!( line, counter )
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
teams
|
|
318
|
-
end
|
|
319
356
|
|
|
320
|
-
def find_team1!( line )
|
|
321
|
-
find_team_worker!( line, 1 )
|
|
322
|
-
end
|
|
323
|
-
|
|
324
|
-
def find_team2!( line )
|
|
325
|
-
find_team_worker!( line, 2 )
|
|
326
|
-
end
|
|
327
357
|
|
|
358
|
+
def match_xxx_worker!( name, line, key, values )
|
|
359
|
+
|
|
360
|
+
downcase_name = name.downcase
|
|
328
361
|
|
|
329
|
-
def match_team_worker!( line, key, values )
|
|
330
362
|
values.each do |value|
|
|
331
363
|
## nb: \b does NOT include space or newline for word boundry (only alphanums e.g. a-z0-9)
|
|
332
364
|
## (thus add it, allows match for Benfica Lis. for example - note . at the end)
|
|
@@ -334,7 +366,7 @@ module SportDb::FixtureHelpers
|
|
|
334
366
|
## check add $ e.g. (\b| |\t|$) does this work? - check w/ Benfica Lis.$
|
|
335
367
|
regex = /\b#{value}(\b| |\t|$)/ # wrap with world boundry (e.g. match only whole words e.g. not wac in wacker)
|
|
336
368
|
if line =~ regex
|
|
337
|
-
logger.debug " match for
|
|
369
|
+
logger.debug " match for #{downcase_name} >#{key}< >#{value}<"
|
|
338
370
|
# make sure @@oo{key}oo@@ doesn't match itself with other key e.g. wacker, wac, etc.
|
|
339
371
|
line.sub!( regex, "@@oo#{key}oo@@ " ) # NB: add one space char at end
|
|
340
372
|
return true # break out after first match (do NOT continue)
|
|
@@ -342,50 +374,46 @@ module SportDb::FixtureHelpers
|
|
|
342
374
|
end
|
|
343
375
|
return false
|
|
344
376
|
end
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
def find_teams!( line )
|
|
381
|
+
counter = 1
|
|
382
|
+
teams = []
|
|
383
|
+
|
|
384
|
+
team = find_xxx_worker!( "team#{counter}", line )
|
|
385
|
+
while team.present?
|
|
386
|
+
teams << team
|
|
387
|
+
counter += 1
|
|
388
|
+
team = find_xxx_worker!( "team#{counter}", line )
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
teams
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
## todo: check if find_team1 gets used? if not remove it!! use find_teams!
|
|
395
|
+
def find_team1!( line )
|
|
396
|
+
find_xxx_worker!( 'team1', line )
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
def find_team2!( line )
|
|
400
|
+
find_xxx_worker!( 'team2', line )
|
|
401
|
+
end
|
|
402
|
+
|
|
345
403
|
|
|
346
404
|
## todo/fix: pass in known_teams as a parameter? why? why not?
|
|
347
405
|
def match_teams!( line )
|
|
348
406
|
@known_teams.each do |rec|
|
|
349
407
|
key = rec[0]
|
|
350
408
|
values = rec[1]
|
|
351
|
-
|
|
352
|
-
end # each known_teams
|
|
409
|
+
match_xxx_worker!( 'team', line, key, values )
|
|
410
|
+
end # each known_teams
|
|
353
411
|
end # method match_teams!
|
|
354
412
|
|
|
355
413
|
|
|
356
414
|
|
|
357
|
-
|
|
358
|
-
|
|
359
415
|
def find_track!( line )
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if line =~ regex
|
|
363
|
-
value = "#{$1}"
|
|
364
|
-
logger.debug " track#{index}: >#{value}<"
|
|
365
|
-
|
|
366
|
-
line.sub!( regex, "[TRACK]" )
|
|
367
|
-
|
|
368
|
-
return $1
|
|
369
|
-
else
|
|
370
|
-
return nil
|
|
371
|
-
end
|
|
372
|
-
end
|
|
373
|
-
|
|
374
|
-
def match_track_worker!( line, key, values )
|
|
375
|
-
values.each do |value|
|
|
376
|
-
## nb: \b does NOT include space or newline for word boundry (only alphanums e.g. a-z0-9)
|
|
377
|
-
## (thus add it, allows match for Benfica Lis. for example - note . at the end)
|
|
378
|
-
|
|
379
|
-
## check add $ e.g. (\b| |\t|$) does this work? - check w/ Benfica Lis.$
|
|
380
|
-
regex = /\b#{value}(\b| |\t|$)/ # wrap with world boundry (e.g. match only whole words e.g. not wac in wacker)
|
|
381
|
-
if line =~ regex
|
|
382
|
-
logger.debug " match for track >#{key}< >#{value}<"
|
|
383
|
-
# make sure @@oo{key}oo@@ doesn't match itself with other key e.g. wacker, wac, etc.
|
|
384
|
-
line.sub!( regex, "@@oo#{key}oo@@ " ) # NB: add one space char at end
|
|
385
|
-
return true # break out after first match (do NOT continue)
|
|
386
|
-
end
|
|
387
|
-
end
|
|
388
|
-
return false
|
|
416
|
+
find_xxx_worker!( 'track', line )
|
|
389
417
|
end
|
|
390
418
|
|
|
391
419
|
## todo/fix: pass in known_tracks as a parameter? why? why not?
|
|
@@ -393,7 +421,7 @@ module SportDb::FixtureHelpers
|
|
|
393
421
|
@known_tracks.each do |rec|
|
|
394
422
|
key = rec[0]
|
|
395
423
|
values = rec[1]
|
|
396
|
-
|
|
424
|
+
match_xxx_worker!( 'track', line, key, values )
|
|
397
425
|
end # each known_tracks
|
|
398
426
|
end # method match_tracks!
|
|
399
427
|
|
data/lib/sportdb/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sportdb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.6.
|
|
4
|
+
version: 1.6.12
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-06-
|
|
12
|
+
date: 2013-06-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: worlddb
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &77877370 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ~>
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: '1.7'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *77877370
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: commander
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &77877150 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ~>
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: 4.1.3
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *77877150
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: rdoc
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &77876930 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ~>
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: '3.10'
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *77876930
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: hoe
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &77876710 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ~>
|
|
@@ -54,7 +54,7 @@ dependencies:
|
|
|
54
54
|
version: '3.3'
|
|
55
55
|
type: :development
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *77876710
|
|
58
58
|
description: sportdb - sport.db command line tool
|
|
59
59
|
email: opensport@googlegroups.com
|
|
60
60
|
executables:
|