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