sportdb 1.6.16 → 1.6.17
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.rb +4 -1
- data/lib/sportdb/reader.rb +104 -124
- data/lib/sportdb/version.rb +1 -1
- metadata +9 -9
data/lib/sportdb.rb
CHANGED
|
@@ -124,7 +124,10 @@ module SportDB
|
|
|
124
124
|
|
|
125
125
|
def self.read( ary, include_path )
|
|
126
126
|
reader = Reader.new( include_path )
|
|
127
|
-
|
|
127
|
+
## todo: check kind_of?( Array ) or kind_of?(String) to support array or string
|
|
128
|
+
ary.each do |name|
|
|
129
|
+
reader.load( name )
|
|
130
|
+
end
|
|
128
131
|
end
|
|
129
132
|
|
|
130
133
|
|
data/lib/sportdb/reader.rb
CHANGED
|
@@ -34,139 +34,81 @@ class Reader
|
|
|
34
34
|
@include_path = include_path
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
def load_setup(
|
|
38
|
-
ary = load_fixture_setup( setup )
|
|
39
|
-
load( ary )
|
|
40
|
-
end # method load_setup
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
## fix/todo: rename ??
|
|
44
|
-
def load_fixture_setup( name )
|
|
45
|
-
|
|
46
|
-
## todo/fix: cleanup quick and dirty code
|
|
47
|
-
|
|
37
|
+
def load_setup( name )
|
|
48
38
|
path = "#{include_path}/#{name}.yml"
|
|
49
39
|
|
|
50
40
|
logger.info "parsing data '#{name}' (#{path})..."
|
|
51
41
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
### build up array for fixtures from hash
|
|
57
|
-
|
|
58
|
-
ary = []
|
|
59
|
-
|
|
60
|
-
hash.each do |key_wild, value_wild|
|
|
61
|
-
key = key_wild.to_s.strip
|
|
62
|
-
|
|
63
|
-
logger.debug "yaml key:#{key_wild.class.name} >>#{key}<<, value:#{value_wild.class.name} >>#{value_wild}<<"
|
|
64
|
-
|
|
65
|
-
if value_wild.kind_of?( String ) # assume non-event data
|
|
66
|
-
ary << value_wild
|
|
67
|
-
elsif value_wild.kind_of?( Array ) # assume non_event data as array of strings
|
|
68
|
-
ary = ary + value_wild
|
|
69
|
-
elsif value_wild.kind_of?( Hash ) # assume event data
|
|
70
|
-
|
|
71
|
-
value_wild.each do |event_key, event_values|
|
|
72
|
-
# e.g.
|
|
73
|
-
# at.2012/13: at/2012_13/bl, at/2012_13/bl2
|
|
74
|
-
# becomes
|
|
75
|
-
# [ 'at.2012/13', 'at/2012_13/bl', 'at/2012_13/bl2' ]
|
|
76
|
-
ary << ( [ event_key.to_s ] + event_values.split(',') )
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
else
|
|
80
|
-
logger.error "unknow fixture type in setup (yaml key:#{key_wild.class.name} >>#{key}<<, value:#{value_wild.class.name} >>#{value_wild}<<); skipping"
|
|
81
|
-
end
|
|
82
|
-
|
|
42
|
+
reader = FixtureReader.new( path )
|
|
43
|
+
|
|
44
|
+
reader.each do |fixture_name|
|
|
45
|
+
load( fixture_name )
|
|
83
46
|
end
|
|
84
|
-
|
|
85
|
-
logger.debug "fixture setup:"
|
|
86
|
-
logger.debug ary.to_json
|
|
87
|
-
|
|
88
|
-
ary
|
|
89
|
-
|
|
90
|
-
end # load_fixture_setup
|
|
47
|
+
end # method load_setup
|
|
91
48
|
|
|
92
49
|
|
|
93
|
-
def load(
|
|
94
|
-
|
|
95
|
-
logger.debug "enter load(include_path=>>#{include_path}<<)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
load_leagues( name )
|
|
50
|
+
def load( name ) # convenience helper for all-in-one reader
|
|
51
|
+
|
|
52
|
+
logger.debug "enter load( name=>>#{name}<<, include_path=>>#{include_path}<<)"
|
|
53
|
+
|
|
54
|
+
if name =~ /^circuits/ # e.g. circuits.txt in formula1.db
|
|
55
|
+
load_tracks( name )
|
|
56
|
+
elsif name =~ /^drivers/ # e.g. drivers.txt in formula1.db
|
|
57
|
+
load_persons( name )
|
|
58
|
+
elsif name =~ /^teams/ # e.g. teams.txt in formula1.db
|
|
59
|
+
load_teams( name )
|
|
60
|
+
elsif name =~ /\/races/ # e.g. 2013/races.txt in formula1.db
|
|
61
|
+
load_races( name )
|
|
62
|
+
elsif name =~ /\/squads/ || name =~ /\/rosters/ # e.g. 2013/squads.txt in formula1.db
|
|
63
|
+
load_rosters( name )
|
|
64
|
+
elsif name =~ /\/([0-9]{2})-/
|
|
65
|
+
race_pos = $1.to_i
|
|
66
|
+
# NB: assume @event is set from previous load
|
|
67
|
+
race = Race.find_by_event_id_and_pos( @event.id, race_pos )
|
|
68
|
+
load_records( name, race_id: race.id ) # e.g. 2013/04-gp-monaco.txt in formula1.db
|
|
69
|
+
elsif name =~ /(?:^|\/)seasons/ # NB: ^seasons or also possible at-austria!/seasons
|
|
70
|
+
load_seasons( name )
|
|
71
|
+
elsif name =~ /^leagues/
|
|
72
|
+
if name =~ /club/
|
|
73
|
+
# e.g. leagues_club
|
|
74
|
+
load_leagues( name, club: true )
|
|
75
|
+
else
|
|
76
|
+
# e.g. leagues
|
|
77
|
+
load_leagues( name )
|
|
78
|
+
end
|
|
79
|
+
elsif match_leagues_for_country( name ) do |country_key| # name =~ /^([a-z]{2})\/leagues/
|
|
80
|
+
# auto-add country code (from folder structure) for country-specific leagues
|
|
81
|
+
# e.g. at/leagues
|
|
82
|
+
country = Country.find_by_key!( country_key )
|
|
83
|
+
load_leagues( name, club: true, country_id: country.id )
|
|
127
84
|
end
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
end
|
|
134
|
-
elsif match_teams_for_country( name ) do |country_key| # name =~ /^([a-z]{2})\/teams/
|
|
135
|
-
# auto-add country code (from folder structure) for country-specific teams
|
|
136
|
-
# e.g. at/teams at/teams.2 de/teams etc.
|
|
137
|
-
country = Country.find_by_key!( country_key )
|
|
138
|
-
load_teams( name, club: true, country_id: country.id )
|
|
139
|
-
end
|
|
140
|
-
elsif name =~ /\/teams/
|
|
141
|
-
if name =~ /club/
|
|
142
|
-
# club teams (many countries)
|
|
143
|
-
# e.g. club/europe/teams
|
|
144
|
-
load_teams( name, club: true )
|
|
145
|
-
else
|
|
146
|
-
# assume national teams
|
|
147
|
-
# e.g. world/teams amercia/teams_n
|
|
148
|
-
load_teams( name, national: true )
|
|
85
|
+
elsif match_teams_for_country( name ) do |country_key| # name =~ /^([a-z]{2})\/teams/
|
|
86
|
+
# auto-add country code (from folder structure) for country-specific teams
|
|
87
|
+
# e.g. at/teams at/teams.2 de/teams etc.
|
|
88
|
+
country = Country.find_by_key!( country_key )
|
|
89
|
+
load_teams( name, club: true, country_id: country.id )
|
|
149
90
|
end
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
# assume
|
|
157
|
-
#
|
|
158
|
-
|
|
159
|
-
event_key = rec[0] # e.g. at.2012/13
|
|
160
|
-
event_name = rec[1] # e.g. at/2012_13/bl
|
|
161
|
-
fixture_names = rec[1..-1] # e.g. at/2012_13/bl, at/2012_13/bl2
|
|
162
|
-
|
|
163
|
-
load_event( event_name )
|
|
164
|
-
fixture_names.each do |fixture_name|
|
|
165
|
-
load_fixtures( event_key, fixture_name )
|
|
166
|
-
end
|
|
91
|
+
elsif name =~ /\/teams/
|
|
92
|
+
if name =~ /club/
|
|
93
|
+
# club teams (many countries)
|
|
94
|
+
# e.g. club/europe/teams
|
|
95
|
+
load_teams( name, club: true )
|
|
96
|
+
else
|
|
97
|
+
# assume national teams
|
|
98
|
+
# e.g. world/teams amercia/teams_n
|
|
99
|
+
load_teams( name, national: true )
|
|
167
100
|
end
|
|
168
|
-
|
|
169
|
-
|
|
101
|
+
elsif name =~ /\/(\d{4}|\d{4}_\d{2})\// # e.g. must match /2012/ or /2012_13/
|
|
102
|
+
load_event( name )
|
|
103
|
+
event = fetch_event( name )
|
|
104
|
+
fixtures = fetch_event_fixtures( name )
|
|
105
|
+
fixtures.each do |fx|
|
|
106
|
+
load_fixtures( event.key, fx )
|
|
107
|
+
end
|
|
108
|
+
else
|
|
109
|
+
logger.error "unknown sportdb fixture type >#{name}<"
|
|
110
|
+
# todo/fix: exit w/ error
|
|
111
|
+
end
|
|
170
112
|
end # method load
|
|
171
113
|
|
|
172
114
|
|
|
@@ -245,6 +187,44 @@ class Reader
|
|
|
245
187
|
end # load_seasons
|
|
246
188
|
|
|
247
189
|
|
|
190
|
+
def fetch_event_fixtures( name )
|
|
191
|
+
# todo: merge with fetch_event to make it single read op - why? why not??
|
|
192
|
+
reader = HashReaderV2.new( name, include_path )
|
|
193
|
+
|
|
194
|
+
fixtures = []
|
|
195
|
+
|
|
196
|
+
reader.each_typed do |key, value|
|
|
197
|
+
if key == 'fixtures' && value.kind_of?( Array )
|
|
198
|
+
logger.debug "fixtures:"
|
|
199
|
+
logger.debug value.to_json
|
|
200
|
+
## todo: make sure we get an array!!!!!
|
|
201
|
+
fixtures = value
|
|
202
|
+
else
|
|
203
|
+
# skip; do nothing
|
|
204
|
+
end
|
|
205
|
+
end # each key,value
|
|
206
|
+
|
|
207
|
+
if fixtures.empty?
|
|
208
|
+
logger.warn "no fixtures found for event - >#{name}<; assume fixture name is the same as event"
|
|
209
|
+
fixtures = [name]
|
|
210
|
+
else
|
|
211
|
+
## add path to fixtures (use path from event e.g)
|
|
212
|
+
# - bl + at-austria!/2012_13/bl -> at-austria!/2012_13/bl
|
|
213
|
+
# - bl_ii + at-austria!/2012_13/bl -> at-austria!/2012_13/bl_ii
|
|
214
|
+
|
|
215
|
+
dir = File.dirname( name ) # use dir for fixtures
|
|
216
|
+
|
|
217
|
+
fixtures = fixtures.map do |fx|
|
|
218
|
+
fx_new = "#{dir}/#{fx}" # add path upfront
|
|
219
|
+
logger.debug "fx: #{fx_new} | >#{fx}< + >#{dir}<"
|
|
220
|
+
fx_new
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
fixtures
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
|
|
248
228
|
def fetch_event( name )
|
|
249
229
|
# get/fetch/find event from yml file
|
|
250
230
|
|
|
@@ -345,7 +325,7 @@ class Reader
|
|
|
345
325
|
event_attribs['team3'] = false
|
|
346
326
|
else
|
|
347
327
|
## todo: add a source location struct to_s or similar (file, line, col)
|
|
348
|
-
logger.error "unknown event attrib; skipping attrib"
|
|
328
|
+
logger.error "unknown event attrib #{key}; skipping attrib"
|
|
349
329
|
end
|
|
350
330
|
|
|
351
331
|
end # each key,value
|
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.17
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -13,7 +13,7 @@ date: 2013-06-25 00:00:00.000000000Z
|
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: worlddb
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &16188720 !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: *16188720
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: commander
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &16188324 !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: *16188324
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: rdoc
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &16187760 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ~>
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: '4.0'
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *16187760
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: hoe
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &16187424 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ~>
|
|
@@ -54,7 +54,7 @@ dependencies:
|
|
|
54
54
|
version: '3.6'
|
|
55
55
|
type: :development
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *16187424
|
|
58
58
|
description: sportdb - sport.db command line tool
|
|
59
59
|
email: opensport@googlegroups.com
|
|
60
60
|
executables:
|