sportdb 1.7.1 → 1.7.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7821792672d5e971444ef9f51adb41f7cb2059b1
4
- data.tar.gz: 256d782e620f2cd78adba12da7b207053a9d0c6c
3
+ metadata.gz: 4a7f836cdab30262bf0a6065c1b1f68c6a54f817
4
+ data.tar.gz: 5aea61263d22babceecc7f5dc9b5d8abfc593b87
5
5
  SHA512:
6
- metadata.gz: 571e77542ea420347b555d023846f9c5fb374452c0bbcf3663c7fb543a2fdb877ebf505699c84589d28c13911b387820e98ae7385ba21c475acefb9c21673dcb
7
- data.tar.gz: b1fcafb80a003779928c2a2c2c7c610414993f2cecf287507b8807a901c75c81ec68accf4d1cceae2cc371860b7640d674b18246ea428ad3d57419cea9e11bf3
6
+ metadata.gz: 17ef76f90a0bef64d4f5a38366aef3f019adc144aa1f370ce994c64220fe9d37fac0d9e12ea48556e1cc1b6b4460cd3e0c74cb71ae96b43d980e08c1c08bb4dc
7
+ data.tar.gz: 162811a0ed6d0ca322addeb12103f0baccdf57a1f51bb8f6ea73359104a064b0b8a77959360debe8ca21d0287c47e5e2dc6b33710f41ff949e8a73f14f5c7da7
@@ -3,10 +3,10 @@ Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
5
  bin/sportdb
6
- config/fixtures.de.yml
7
- config/fixtures.en.yml
8
- config/fixtures.es.yml
9
- config/fixtures.pt.yml
6
+ config/fixtures/de.yml
7
+ config/fixtures/en.yml
8
+ config/fixtures/es.yml
9
+ config/fixtures/pt.yml
10
10
  data/seasons.txt
11
11
  data/setups/all.yml
12
12
  lib/sportdb.rb
@@ -45,6 +45,7 @@ lib/sportdb/reader.rb
45
45
  lib/sportdb/schema.rb
46
46
  lib/sportdb/stats.rb
47
47
  lib/sportdb/title.rb
48
+ lib/sportdb/updater.rb
48
49
  lib/sportdb/utils.rb
49
50
  lib/sportdb/version.rb
50
51
  tasks/test.rb
data/Rakefile CHANGED
@@ -23,11 +23,12 @@ Hoe.spec 'sportdb' do
23
23
  # self.history_file = 'History.md'
24
24
 
25
25
  self.extra_deps = [
26
- ['worlddb', '~> 1.7'], # NB: worlddb already includes
26
+ ['worlddb', '>= 1.7'], # NB: worlddb already includes
27
27
  # - commander
28
28
  # - logutils
29
29
  # - textutils
30
-
30
+ ['fetcher', '>= 0.3'],
31
+
31
32
  ## 3rd party
32
33
  ['gli', '>= 2.5.6']
33
34
 
@@ -23,6 +23,7 @@ require 'textutils'
23
23
 
24
24
  require 'worlddb'
25
25
 
26
+ require 'fetcher' # for fetching/downloading fixtures via HTTP/HTTPS etc.
26
27
 
27
28
  # our own code
28
29
 
@@ -57,6 +58,7 @@ require 'sportdb/utils'
57
58
  require 'sportdb/reader'
58
59
  require 'sportdb/lang'
59
60
 
61
+ require 'sportdb/updater'
60
62
  require 'sportdb/deleter'
61
63
  require 'sportdb/stats'
62
64
 
@@ -145,6 +147,11 @@ module SportDb
145
147
  Deleter.new.run
146
148
  end # method delete!
147
149
 
150
+ def self.update!
151
+ puts '*** update event fixtures...'
152
+ Updater.new.run
153
+ end
154
+
148
155
 
149
156
  def self.stats
150
157
  stats = Stats.new
@@ -195,6 +195,20 @@ command [:load, :l] do |c|
195
195
  end
196
196
  end # command load
197
197
 
198
+
199
+ desc 'Pull - Auto-update event fixtures from upstream online sources'
200
+ command :pull do |c|
201
+ c.action do |g,o,args|
202
+
203
+ connect_to_db( opts )
204
+
205
+ SportDb.update!
206
+
207
+ puts 'Done.'
208
+ end # action
209
+ end # command pull
210
+
211
+
198
212
  desc 'Show logs'
199
213
  command :logs do |c|
200
214
  c.action do |g,o,args|
@@ -6,56 +6,63 @@ class Lang
6
6
 
7
7
  include LogUtils::Logging
8
8
 
9
- def initialize
10
-
11
- @lang = 'en' # make default lang english/en
9
+ attr_reader :lang
12
10
 
13
- # load word lists
11
+ def initialize
12
+ # fix/todo: load on demand; only if no fixtures loaded/configured use builtin
13
+ load_builtin_words
14
+ end
14
15
 
15
- @fixtures_en = YAML.load( File.read_utf8( "#{SportDb.config_path}/fixtures.en.yml" ))
16
- @fixtures_de = YAML.load( File.read_utf8( "#{SportDb.config_path}/fixtures.de.yml" ))
17
- @fixtures_es = YAML.load( File.read_utf8( "#{SportDb.config_path}/fixtures.es.yml" ))
18
16
 
19
- @fixtures = {
20
- 'en' => @fixtures_en,
21
- 'de' => @fixtures_de,
22
- 'es' => @fixtures_es,
17
+ def load_builtin_words
18
+ builtin_words = {
19
+ 'en' => 'fixtures/en',
20
+ 'de' => 'fixtures/de',
21
+ 'es' => 'fixtures/es'
23
22
  }
24
23
 
24
+ load_words( builtin_words, SportDb.config_path )
25
+ end
26
+
27
+ def load_words( h, include_path )
28
+ @lang = 'en' # make default lang english/en
29
+ @words = {} # resets fixtures
30
+ @cache = {} # reset cached values
31
+
32
+ h.each_with_index do |(key,value),i|
33
+ name = value
34
+ path = "#{include_path}/#{name}.yml"
35
+ logger.debug( "loading words #{key} (#{i+1}/#{h.size}) in '#{name}' (#{path})..." )
36
+ @words[ key ] = YAML.load( File.read_utf8( path ))
37
+ end
25
38
 
26
- @words_en = fixtures_hash_to_words_ary( @fixtures_en )
27
- @words_de = fixtures_hash_to_words_ary( @fixtures_de )
28
- @words_es = fixtures_hash_to_words_ary( @fixtures_es )
29
-
30
- logger.debug "en - #{@words_en.size} words: #{@words_en}"
31
- logger.debug "de - #{@words_de.size} words: #{@words_de}"
32
- logger.debug "es - #{@words_es.size} words: #{@words_es}"
39
+ @classifier = TextUtils::Classifier.new
40
+ @words.each_with_index do |(key,value),i|
41
+ logger.debug "train classifier for #{key} (#{i+1}/#{@words.size})"
42
+ @classifier.train( key, value )
43
+ end
33
44
 
45
+ @classifier.dump # for debugging dump all words
34
46
  end
35
47
 
36
- attr_reader :words_en
37
- attr_reader :words_de
38
- attr_reader :words_es
39
- attr_reader :lang
48
+ def classify( text )
49
+ @classifier.classify( text )
50
+ end
51
+
52
+ def classify_file( path )
53
+ @classifier.classify_file( path )
54
+ end
40
55
 
41
56
  def lang=(value)
42
57
  logger.debug "setting lang to #{value}"
43
58
 
44
59
  if @lang != value
60
+
61
+ ### todo: make reset cached values into method/function for reuse (see load_words)
45
62
  # reset cached values on language change
46
63
  logger.debug "reseting cached lang values (lang changed from #{@lang} to #{value})"
47
64
 
48
- @group = nil
49
- @round = nil
50
- @knockout_round = nil
51
- @leg1 = nil
52
- @leg2 = nil
53
-
54
- @regex_group = nil
55
- @regex_round = nil
56
- @regex_knockout_round = nil
57
- @regex_leg1 = nil
58
- @regex_leg2 = nil
65
+ @cache = {}
59
66
  end
60
67
 
61
68
  @lang = value
@@ -64,49 +71,50 @@ class Lang
64
71
 
65
72
 
66
73
  def group
67
- @group ||= group_getter
74
+ @cache[ :group ] ||= group_getter
68
75
  end
69
76
 
70
77
  def round
71
- @round ||= round_getter
78
+ @cache[ :round ] ||= round_getter
72
79
  end
73
-
80
+
74
81
  def knockout_round
75
- @knockout_round ||= knockout_round_getter
82
+ @cache[ :knockout_round ] ||= knockout_round_getter
76
83
  end
77
84
 
78
85
  def leg1
79
- @leg1 ||= leg1_getter
86
+ @cache[ :leg1 ] ||= leg1_getter
80
87
  end
81
88
 
82
89
  def leg2
83
- @leg2 ||= leg2_getter
90
+ @cache[ :leg2 ] ||= leg2_getter
84
91
  end
85
92
 
86
93
 
94
+
87
95
  def regex_group
88
- @regex_group ||= regex_group_getter
96
+ @cache [ :regex_group ] ||= regex_group_getter
89
97
  end
90
-
98
+
91
99
  def regex_round
92
- @regex_round ||= regex_round_getter
100
+ @cache[ :regex_round ] ||= regex_round_getter
93
101
  end
94
-
102
+
95
103
  def regex_knockout_round
96
- @regex_knockout_round ||= regex_knockout_round_getter
104
+ @cache[ :regex_knockout_round ] ||= regex_knockout_round_getter
97
105
  end
98
106
 
99
107
  def regex_leg1
100
- @regex_leg1 ||= regex_leg1_getter
108
+ @cache[ :regex_leg1 ] ||= regex_leg1_getter
101
109
  end
102
110
 
103
111
  def regex_leg2
104
- @regex_leg2 ||= regex_leg2_getter
112
+ @cache[ :regex_leg2 ] ||= regex_leg2_getter
105
113
  end
106
114
 
107
115
  private
108
116
  def group_getter
109
- h = @fixtures[ lang ]
117
+ h = @words[ lang ]
110
118
  values = "" # NB: always construct a new string (do NOT use a reference to hash value)
111
119
  values << h['group']
112
120
  values
@@ -115,7 +123,7 @@ private
115
123
  def round_getter
116
124
  # e.g. Spieltag|Runde|Achtelfinale|Viertelfinale|Halbfinale|Finale
117
125
 
118
- h = @fixtures[ lang ]
126
+ h = @words[ lang ]
119
127
  values = "" # NB: always construct a new string (do NOT use a reference to hash value)
120
128
  values << h['round']
121
129
  values << "|" << h['matchday'] ## todo/check: fold round n matchday into one key? why? why not??
@@ -131,21 +139,21 @@ private
131
139
  end
132
140
 
133
141
  def leg1_getter
134
- h = @fixtures[ lang ]
142
+ h = @words[ lang ]
135
143
  values = "" # NB: always construct a new string (do NOT use a reference to hash value)
136
144
  values << h['leg1']
137
145
  values
138
146
  end
139
147
 
140
148
  def leg2_getter
141
- h = @fixtures[ lang ]
149
+ h = @words[ lang ]
142
150
  values = "" # NB: always construct a new string (do NOT use a reference to hash value)
143
151
  values << h['leg2']
144
152
  values
145
153
  end
146
154
 
147
155
  def knockout_round_getter
148
- h = @fixtures[ lang ]
156
+ h = @words[ lang ]
149
157
  values = "" # NB: always construct a new string (do NOT use a reference to hash value)
150
158
  values << h['round32']
151
159
  values << "|" << h['round16']
@@ -182,88 +190,7 @@ private
182
190
  /#{leg2}/
183
191
  end
184
192
 
185
-
186
- def fixtures_hash_to_words_ary( hash )
187
- ary = []
188
- hash.each do |key_wild, values_wild|
189
- key = key_wild.to_s.strip
190
- values = values_wild.to_s.strip
191
-
192
- logger.debug "processing key >>#{key}<< with words >>#{values}<<"
193
-
194
- ary += values.split('|')
195
- end
196
- ary
197
- end
198
-
199
193
  end # class Lang
200
194
 
201
195
 
202
- class LangChecker
203
-
204
- include LogUtils::Logging
205
-
206
- def initialize
207
- end
208
-
209
- def analyze( path )
210
- # return lang code e.g. en, de, es
211
-
212
- text = File.read_utf8( path )
213
-
214
- ### todo/fix:
215
- # remove comment lines and end of line comments from text
216
-
217
- en = count_words_in_text( SportDb.lang.words_en, text )
218
- de = count_words_in_text( SportDb.lang.words_de, text )
219
- es = count_words_in_text( SportDb.lang.words_es, text )
220
-
221
- lang_counts = [
222
- [ 'en', en ],
223
- [ 'de', de ],
224
- [ 'es', es ]
225
- ]
226
-
227
- # sort by word count (reverse sort e.g. highest count goes first)
228
- lang_counts = lang_counts.sort {|l,r| r[1] <=> l[1] }
229
-
230
- # dump stats
231
-
232
- logger.debug "lang checker:"
233
- lang_counts.each_with_index do |item,index|
234
- ## e.g. 1. en: 20 words
235
- ## 2. de: 2 words
236
- logger.debug " #{index+1}. #{item[0]}: #{item[1]}"
237
- end
238
-
239
- logger.info "lang checker - using lang >>#{lang_counts[0][0]}<<"
240
-
241
- ## return lang code w/ highest count
242
- lang_counts[0][0]
243
- end
244
-
245
- private
246
- def count_word_in_text( word, text )
247
- count = 0
248
- pos = text.index( word )
249
- while pos.nil? == false
250
- count += 1
251
- logger.debug "bingo - found >>#{word}<< on pos #{pos}, count: #{count}"
252
- ### todo: check if pos+word.length/size needs +1 or similar
253
- pos = text.index( word, pos+word.length)
254
- end
255
- count
256
- end
257
-
258
- def count_words_in_text( words, text )
259
- count = 0
260
- words.each do |word|
261
- count += count_word_in_text( word, text )
262
- end
263
- count
264
- end
265
-
266
- end # class LangChecker
267
-
268
-
269
196
  end # module SportDb
@@ -30,11 +30,12 @@ class Event < ActiveRecord::Base
30
30
  end
31
31
 
32
32
  def title
33
- league.title
33
+ "#{league.title} #{season.title}"
34
34
  end
35
35
 
36
36
  def full_title # includes season (e.g. year)
37
- "#{league.title} #{season.title}"
37
+ puts "*** depreciated API call Event#full_title; use Event#title instead; full_title will get removed"
38
+ "#{league.title} #{season.title}"
38
39
  end
39
40
 
40
41
 
@@ -4,6 +4,8 @@ module SportDb
4
4
 
5
5
  module Matcher
6
6
 
7
+ include WorldDb::Matcher
8
+
7
9
  def match_leagues_for_country( name, &blk )
8
10
  match_xxx_for_country( name, 'leagues', blk )
9
11
  end
@@ -23,8 +25,6 @@ class Reader
23
25
  ## make models available in sportdb module by default with namespace
24
26
  # e.g. lets you use Team instead of Models::Team
25
27
  include SportDb::Models
26
-
27
- include WorldDb::Matcher
28
28
  include SportDb::Matcher # lets us use match_teams_for_country etc.
29
29
 
30
30
 
@@ -272,6 +272,14 @@ class Reader
272
272
  reader = HashReaderV2.new( name, include_path )
273
273
 
274
274
  event_attribs = {}
275
+
276
+ ## set default sources to basename by convention
277
+ # e.g 2013_14/bl => bl
278
+ # etc.
279
+ # use fixtures/sources: to override default
280
+
281
+ event_attribs[ 'sources' ] = File.basename( name )
282
+ event_attribs[ 'config' ] = File.basename( name ) # name a of .yml file
275
283
 
276
284
  reader.each_typed do |key, value|
277
285
 
@@ -325,13 +333,17 @@ class Reader
325
333
  elsif key == 'team3'
326
334
  ## for now always assume false # todo: fix - use value and convert to boolean if not boolean
327
335
  event_attribs['team3'] = false
328
- elsif key == 'fixtures'
329
- ## skip fixtures for now (NOT yet stored in db; for now reload file to get fixtures)
336
+ elsif key == 'fixtures' || key == 'sources'
337
+ if value.kind_of?(Array)
338
+ event_attribs['sources'] = value.join(',')
339
+ else # assume plain (single fixture) string
340
+ event_attribs['sources'] = value.to_s
341
+ end
330
342
  else
331
343
  ## todo: add a source location struct to_s or similar (file, line, col)
332
344
  logger.error "unknown event attrib #{key}; skipping attrib"
333
345
  end
334
-
346
+
335
347
  end # each key,value
336
348
 
337
349
  league_id = event_attribs['league_id']
@@ -356,8 +368,11 @@ class Reader
356
368
  end # load_event
357
369
 
358
370
 
371
+
359
372
  def load_fixtures_from_string( event_key, text ) # load from string (e.g. passed in via web form)
360
373
 
374
+ SportDb.lang.lang = SportDb.lang.classify( text )
375
+
361
376
  ## todo/fix: move code into LineReader e.g. use LineReader.fromString() - why? why not?
362
377
  reader = StringLineReader.new( text )
363
378
 
@@ -385,7 +400,7 @@ class Reader
385
400
 
386
401
  logger.info "parsing data '#{name}' (#{path})..."
387
402
 
388
- SportDb.lang.lang = LangChecker.new.analyze( path )
403
+ SportDb.lang.lang = SportDb.lang.classify_file( path )
389
404
 
390
405
  reader = LineReader.new( path )
391
406
 
@@ -128,6 +128,12 @@ create_table :events do |t|
128
128
  t.date :end_at # make it required??? # NB: only use date (w/o time)
129
129
  t.boolean :team3, :null => false, :default => true ## e.g. Champions League has no 3rd place (only 1st and 2nd/final)
130
130
 
131
+ #### track 1-n sources (from repos) - # todo move to its own table later
132
+ ## NB: relative to event.yml - use mapper to "resolve" to full path w/ repo; use league+season keys
133
+ t.string :sources # e.g. cup or bl,bl_ii # NB: for now store all in on string separated by comma
134
+ t.string :config # e.g. cup or bl # e.g assumes cup.yml, bl.yml etc. for now
135
+
136
+
131
137
  t.timestamps
132
138
  end
133
139
 
@@ -0,0 +1,122 @@
1
+
2
+ module SportDb
3
+
4
+ class Updater
5
+
6
+ include LogUtils::Logging
7
+
8
+ ######
9
+ # NB: make models available in sportdb module by default with namespace
10
+ # e.g. lets you use Team instead of Models::Team
11
+ include SportDb::Models
12
+
13
+
14
+ def map_event_to_dlurl( event )
15
+
16
+ league_key = event.league.key
17
+ season_key = event.season.key
18
+
19
+ repo_path, folder_path = map_key_to_repo_n_folder_path( league_key )
20
+ return nil if repo_path.nil? # no match/mapping found; cancel download
21
+
22
+ season_path = season_key.gsub( '/', '_') # convert 2013/14 to 2013_14
23
+
24
+ ###
25
+ # e.g. https://raw.github.com/openfootball/at-austria/master/2013_14/bl.txt
26
+
27
+ dlurl = "https://raw.github.com/openfootball/#{repo_path}/master"
28
+ dlurl << "/#{folder_path}" if folder_path.present?
29
+ dlurl << "/#{season_path}"
30
+ dlurl
31
+ end
32
+
33
+
34
+ def map_key_to_repo_n_folder_path( key )
35
+
36
+ ### allow * for regex match w/ .+
37
+ map = [
38
+ [ 'at', 'at-austria' ],
39
+ [ 'at.*', 'at-austria' ],
40
+ [ 'de', 'de-deutschland' ],
41
+ [ 'be', 'europe', 'be-belgium' ], # NB: europe/be-belgium
42
+ [ 'cl', 'europe' ],
43
+ [ 'world.*', 'world-cup' ]]
44
+
45
+ map.each do |entry|
46
+ pattern = entry[0]
47
+ path = [ entry[1], entry[2] ] # repo n folder path
48
+
49
+ if pattern.index( '*' ).nil? # match just plain string (no wildcard *)
50
+ return path if key == pattern
51
+ else
52
+ # assume regex match
53
+ regex = pattern.gsub( '.', '\.' ).gsub( '*', '.+' )
54
+ return path if key =~ /#{regex}/
55
+ end
56
+ end
57
+ nil # return nil; no match found
58
+ end
59
+
60
+ def update_event( event )
61
+ puts "update event >>#{event.title}<< (#{event.league.key}+#{event.season.key})"
62
+
63
+ dlbase = map_event_to_dlurl( event )
64
+ if dlbase.nil?
65
+ puts " skip download; no download source mapping found"
66
+ return # cancel download; no mapping found
67
+ end
68
+
69
+ puts " using dlbase >>#{dlbase}<<"
70
+
71
+ if event.sources.nil?
72
+ puts " skip download; no download event source configured/found"
73
+ return
74
+ end
75
+
76
+ sources = event.sources.gsub(' ','').split(',') # NB: remove all blanks (leading,trailing,inside)
77
+ sources.each_with_index do |source,i|
78
+ dlurl = "#{dlbase}/#{source}.txt"
79
+ puts " downloading source (#{i+1}/#{sources.length}) >>#{dlurl}<< ..." # todo/check: use size for ary or length - does it matter?
80
+
81
+ # download fixtures into string
82
+ text = Fetcher.read( dlurl )
83
+
84
+ logger.debug "text.encoding.name (before): #{text.encoding.name}"
85
+
86
+ ###
87
+ # NB: Net::HTTP will NOT set encoding UTF-8 etc.
88
+ # will mostly be ASCII
89
+ # - try to change encoding to UTF-8 ourselves
90
+
91
+ #####
92
+ # NB: ASCII-8BIT == BINARY == Encoding Unknown; Raw Bytes Here
93
+
94
+ ## NB:
95
+ # for now "hardcoded" to utf8 - what else can we do?
96
+ # - note: force_encoding will NOT change the chars only change the assumed encoding w/o translation
97
+ text = text.force_encoding( Encoding::UTF_8 )
98
+ logger.debug "text.encoding.name (after): #{text.encoding.name}"
99
+
100
+
101
+ puts " importing/reading source..."
102
+ reader= Reader.new( '/tmp' ) # passing dummy include_path (not needed for reading from string)
103
+
104
+ ## todo/fix: offer a version that lets us pass in event (not event.key)
105
+ # no need for another event lookup
106
+ reader.load_fixtures_from_string( event.key, text )
107
+ end
108
+ end
109
+
110
+
111
+ def run
112
+ # for now update all events (fixtures only) - not *.yml
113
+
114
+ Event.all.each do |event|
115
+ update_event( event )
116
+ end
117
+
118
+ end
119
+
120
+ end # class Updater
121
+
122
+ end # module SportDb
@@ -1,6 +1,6 @@
1
1
 
2
2
  module SportDb
3
- VERSION = '1.7.1'
3
+ VERSION = '1.7.2'
4
4
  end
5
5
 
6
6
 
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-21 00:00:00.000000000 Z
11
+ date: 2013-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: worlddb
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fetcher
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0.3'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: gli
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -81,10 +95,10 @@ files:
81
95
  - README.md
82
96
  - Rakefile
83
97
  - bin/sportdb
84
- - config/fixtures.de.yml
85
- - config/fixtures.en.yml
86
- - config/fixtures.es.yml
87
- - config/fixtures.pt.yml
98
+ - config/fixtures/de.yml
99
+ - config/fixtures/en.yml
100
+ - config/fixtures/es.yml
101
+ - config/fixtures/pt.yml
88
102
  - data/seasons.txt
89
103
  - data/setups/all.yml
90
104
  - lib/sportdb.rb
@@ -123,6 +137,7 @@ files:
123
137
  - lib/sportdb/schema.rb
124
138
  - lib/sportdb/stats.rb
125
139
  - lib/sportdb/title.rb
140
+ - lib/sportdb/updater.rb
126
141
  - lib/sportdb/utils.rb
127
142
  - lib/sportdb/version.rb
128
143
  - tasks/test.rb