sportdb 0.9.7 → 1.0.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/Manifest.txt +12 -55
- data/Rakefile +11 -10
- data/bin/sportdb +1 -2
- data/config/fixtures.de.yml +42 -0
- data/config/fixtures.en.yml +52 -0
- data/config/fixtures.es.yml +44 -0
- data/config/fixtures.pt.yml +44 -0
- data/lib/sportdb/cli/main.rb +189 -0
- data/lib/sportdb/cli/opts.rb +15 -69
- data/lib/sportdb/data/fixtures.rb +205 -0
- data/lib/sportdb/{keys.rb → data/keys.rb} +9 -2
- data/lib/sportdb/data/models.rb +43 -0
- data/lib/sportdb/deleter.rb +27 -0
- data/lib/sportdb/lang.rb +265 -0
- data/lib/sportdb/models/event.rb +0 -34
- data/lib/sportdb/reader.rb +322 -78
- data/lib/sportdb/stats.rb +28 -0
- data/lib/sportdb/utils.rb +90 -13
- data/lib/sportdb/version.rb +1 -1
- data/lib/sportdb.rb +49 -198
- data/tasks/test.rb +163 -0
- metadata +46 -71
- data/data/america/2011.rb +0 -36
- data/data/america/2011.txt +0 -110
- data/data/america/2011.yml +0 -30
- data/data/america/teams.txt +0 -26
- data/data/at/2011_12/bl.rb +0 -30
- data/data/at/2011_12/bl.txt +0 -79
- data/data/at/2011_12/cup.rb +0 -66
- data/data/at/2012_13/bl.rb +0 -33
- data/data/at/2012_13/bl.txt +0 -198
- data/data/at/2012_13/cup.rb +0 -111
- data/data/at/2012_13/cup.txt +0 -89
- data/data/at/badges.rb +0 -22
- data/data/at/teams.txt +0 -88
- data/data/cl/2011_12/cl.rb +0 -88
- data/data/cl/2011_12/el.rb +0 -65
- data/data/cl/2012_13/cl.rb +0 -324
- data/data/cl/badges.rb +0 -68
- data/data/cl/teams.txt +0 -46
- data/data/copa/sud_2012_13.rb +0 -38
- data/data/copa/sud_2012_13.txt +0 -49
- data/data/copa/teams.txt +0 -35
- data/data/de/2012_13/bl.rb +0 -38
- data/data/de/2012_13/bl.txt +0 -216
- data/data/de/teams.txt +0 -23
- data/data/en/2012_13/pl.rb +0 -39
- data/data/en/2012_13/pl.txt +0 -291
- data/data/en/teams.txt +0 -26
- data/data/es/teams.txt +0 -8
- data/data/euro/2008.rb +0 -30
- data/data/euro/2008.txt +0 -114
- data/data/euro/2012.rb +0 -25
- data/data/euro/2012.txt +0 -114
- data/data/euro/teams.txt +0 -36
- data/data/leagues.rb +0 -68
- data/data/mx/apertura_2012.rb +0 -35
- data/data/mx/apertura_2012.txt +0 -106
- data/data/mx/teams.txt +0 -20
- data/data/nfl/teams.txt +0 -46
- data/data/nhl/teams.txt +0 -40
- data/data/ro/l1_2012_13.rb +0 -137
- data/data/ro/teams.txt +0 -26
- data/data/seasons.rb +0 -22
- data/data/world/2010.rb +0 -93
- data/data/world/2010.txt +0 -215
- data/data/world/quali_2012_13_america.rb +0 -25
- data/data/world/quali_2012_13_america.txt +0 -41
- data/data/world/quali_2012_13_europe.rb +0 -32
- data/data/world/quali_2012_13_europe_c.txt +0 -85
- data/data/world/quali_2012_13_europe_i.txt +0 -74
- data/data/world/teams.txt +0 -25
- data/lib/sportdb/cli/runner.rb +0 -147
- data/lib/sportdb/loader.rb +0 -82
- data/lib/sportdb/templater.rb +0 -81
- data/templates/fixtures.rb.erb +0 -51
@@ -1,74 +0,0 @@
|
|
1
|
-
###########################################
|
2
|
-
## WM 2014 - Qualification Europe Group I
|
3
|
-
|
4
|
-
# note: timezone for games (play_at) is *always* CET (central european time)
|
5
|
-
|
6
|
-
Gruppe I | FRA ESP BLR FIN GEO
|
7
|
-
|
8
|
-
|
9
|
-
1. Spieltag - Fr. 7. Sep 2012 / Gruppe I
|
10
|
-
|
11
|
-
(1) geo 1:0 blr 2012-09-07 15:00
|
12
|
-
(2) fin 0:1 fra 2012-09-07 15:00
|
13
|
-
|
14
|
-
|
15
|
-
2. Spieltag - Di. 11. Sep 2012 / Gruppe I
|
16
|
-
|
17
|
-
(3) geo 0:1 esp 2012-09-11 15:00
|
18
|
-
(4) fra 3:1 blr 2012-09-11 15:00
|
19
|
-
|
20
|
-
|
21
|
-
3. Spieltag - Fr. 12. Okt 2012 / Gruppe I
|
22
|
-
|
23
|
-
(5) fin 1:1 geo 2012-10-12 17:30
|
24
|
-
(6) blr 0:4 esp 2012-10-12 20:00
|
25
|
-
|
26
|
-
|
27
|
-
4. Spieltag - Di. 16. Okt 2012 / Gruppe I
|
28
|
-
|
29
|
-
(7) esp 1:1 fra 2012-10-16 21:00
|
30
|
-
(8) blr 2:0 geo 2012-10-16 18:00
|
31
|
-
|
32
|
-
|
33
|
-
5. Spieltag - Fr. 22. Mär 2013 / Gruppe I
|
34
|
-
|
35
|
-
(9) fra - geo 2013-03-22 15:00
|
36
|
-
(10) esp - fin 2013-03-22 15:00
|
37
|
-
|
38
|
-
|
39
|
-
6. Spieltag - Di. 26. Mär 2013 / Gruppe I
|
40
|
-
|
41
|
-
(11) fra - esp 2013-03-26 15:00
|
42
|
-
|
43
|
-
|
44
|
-
7. Spieltag - Fr. 7. Jun 2013 / Gruppe I
|
45
|
-
|
46
|
-
(12) fin - blr 2013-06-07 15:00
|
47
|
-
|
48
|
-
|
49
|
-
8. Spieltag - Di. 11. Jun 2013 / Gruppe I
|
50
|
-
|
51
|
-
(13) blr - fin 2013-06-11 15:00
|
52
|
-
|
53
|
-
|
54
|
-
9. Spieltag - Fr. 6. Sep 2013 / Gruppe I
|
55
|
-
|
56
|
-
(14) geo - fra 2013-09-06 15:00
|
57
|
-
(15) fin - esp 2013-09-06 15:00
|
58
|
-
|
59
|
-
|
60
|
-
10. Spieltag - Di. 10. Sep 2013 / Gruppe I
|
61
|
-
|
62
|
-
(16) blr - fra 2013-09-10 15:00
|
63
|
-
(17) geo - fin 2013-09-10 15:00
|
64
|
-
|
65
|
-
|
66
|
-
11. Spieltag - Fr. 11. Okt 2013 / Gruppe I
|
67
|
-
|
68
|
-
(18) esp - blr 2013-10-11 15:00
|
69
|
-
|
70
|
-
|
71
|
-
12. Spieltag - Di. 15. Okt 2013 / Gruppe I
|
72
|
-
|
73
|
-
(19) fra - fin 2013-10-15 15:00
|
74
|
-
(20) esp - geo 2013-10-15 15:00
|
data/data/world/teams.txt
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
########################
|
4
|
-
## africa
|
5
|
-
|
6
|
-
alg, Algerien, ALG, dz
|
7
|
-
civ, Elfenbeinküste, CIV, ci
|
8
|
-
gha, Ghana, GHA, gh
|
9
|
-
cmr, Kamerun, CMR, cm
|
10
|
-
nga, Nigeria, NGA, ng
|
11
|
-
rsa, Südafrika, RSA, za
|
12
|
-
|
13
|
-
|
14
|
-
#############################
|
15
|
-
## asia w/ australia
|
16
|
-
|
17
|
-
aus, Australien, AUS, au
|
18
|
-
jpn, Japan, JPN, jp
|
19
|
-
prk, Nordkorea, PRK, kp
|
20
|
-
kor, Südkorea, KOR, kr
|
21
|
-
|
22
|
-
###############################
|
23
|
-
## oceania
|
24
|
-
|
25
|
-
nzl, Neuseeland, NZL, nz
|
data/lib/sportdb/cli/runner.rb
DELETED
@@ -1,147 +0,0 @@
|
|
1
|
-
|
2
|
-
module SportDB
|
3
|
-
|
4
|
-
class Runner
|
5
|
-
|
6
|
-
|
7
|
-
## make models available in sportdb module by default with namespace
|
8
|
-
# e.g. lets you use Team instead of Models::Team
|
9
|
-
include SportDB::Models
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@logger = Logger.new(STDOUT)
|
13
|
-
@logger.level = Logger::INFO
|
14
|
-
|
15
|
-
@opts = Opts.new
|
16
|
-
end
|
17
|
-
|
18
|
-
attr_reader :logger, :opts
|
19
|
-
|
20
|
-
def run( args )
|
21
|
-
opt=OptionParser.new do |cmd|
|
22
|
-
|
23
|
-
cmd.banner = "Usage: sportdb [options]"
|
24
|
-
|
25
|
-
|
26
|
-
## NB: reserve -c for use with -c/--config
|
27
|
-
cmd.on( '--create', 'Create DB schema' ) { opts.create = true }
|
28
|
-
cmd.on( '--setup', "Create DB schema 'n' load all builtin data" ) { opts.setup = true }
|
29
|
-
|
30
|
-
cmd.on( '--world', "Populate world tables with builtin data (version #{WorldDB::VERSION})" ) { opts.world = true }
|
31
|
-
cmd.on( '--sport', "Populate sport tables with builtin data" ) { opts.sport = true }
|
32
|
-
|
33
|
-
|
34
|
-
cmd.on( '--delete', 'Delete all records' ) { opts.delete = true }
|
35
|
-
|
36
|
-
### todo: in future allow multiple search path??
|
37
|
-
cmd.on( '-i', '--include PATH', "Data path (default is #{opts.data_path})" ) { |path| opts.data_path = path }
|
38
|
-
|
39
|
-
cmd.on( '--load', 'Use loader for builtin sports data' ) { opts.load = true }
|
40
|
-
|
41
|
-
cmd.on( '-e', '--event KEY', 'Event to load or generate' ) { |key| opts.event = key; }
|
42
|
-
|
43
|
-
cmd.on( '-o', '--output PATH', "Output path (default is #{opts.output_path})" ) { |path| opts.output_path = path }
|
44
|
-
cmd.on( '-g', '--generate', 'Generate fixtures from template' ) { opts.generate = true }
|
45
|
-
|
46
|
-
|
47
|
-
cmd.on( '-v', '--version', "Show version" ) do
|
48
|
-
puts SportDB.banner
|
49
|
-
exit
|
50
|
-
end
|
51
|
-
|
52
|
-
cmd.on( "--verbose", "Show debug trace" ) do
|
53
|
-
logger.datetime_format = "%H:%H:%S"
|
54
|
-
logger.level = Logger::DEBUG
|
55
|
-
|
56
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
57
|
-
end
|
58
|
-
|
59
|
-
cmd.on_tail( "-h", "--help", "Show this message" ) do
|
60
|
-
puts <<EOS
|
61
|
-
|
62
|
-
sportdb - sport.db command line tool, version #{VERSION}
|
63
|
-
|
64
|
-
#{cmd.help}
|
65
|
-
|
66
|
-
Examples:
|
67
|
-
sportdb cl/teams cl/2012_13/cl # import champions league (cl)
|
68
|
-
sportdb --create # create database schema
|
69
|
-
|
70
|
-
More Examples:
|
71
|
-
sportdb # show stats (table counts, table props)
|
72
|
-
sportdb -i ../sport.db/db cl/teams cl/2012_13/cl # import champions league (cl) in db folder
|
73
|
-
|
74
|
-
Further information:
|
75
|
-
http://geraldb.github.com/sport.db
|
76
|
-
|
77
|
-
EOS
|
78
|
-
exit
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
opt.parse!( args )
|
83
|
-
|
84
|
-
puts SportDB.banner
|
85
|
-
|
86
|
-
puts "working directory: #{Dir.pwd}"
|
87
|
-
|
88
|
-
db_config = {
|
89
|
-
:adapter => 'sqlite3',
|
90
|
-
:database => "#{opts.output_path}/sport.db"
|
91
|
-
}
|
92
|
-
|
93
|
-
puts "Connecting to db using settings: "
|
94
|
-
pp db_config
|
95
|
-
|
96
|
-
ActiveRecord::Base.establish_connection( db_config )
|
97
|
-
|
98
|
-
if opts.setup?
|
99
|
-
WorldDB.create
|
100
|
-
SportDB.create
|
101
|
-
WorldDB.read_all
|
102
|
-
SportDB.load_all # ruby (.rb) fixtures
|
103
|
-
SportDB.read_all # plain text (.txt) fixtures
|
104
|
-
else
|
105
|
-
|
106
|
-
if opts.create?
|
107
|
-
WorldDB.create
|
108
|
-
SportDB.create
|
109
|
-
end
|
110
|
-
|
111
|
-
if opts.world? || opts.sport?
|
112
|
-
if opts.world?
|
113
|
-
WorldDB.delete! if opts.delete?
|
114
|
-
WorldDB.read_all
|
115
|
-
end
|
116
|
-
|
117
|
-
if opts.sport?
|
118
|
-
SportDB.delete! if opts.delete?
|
119
|
-
SportDB.load_all
|
120
|
-
SportDB.read_all
|
121
|
-
end
|
122
|
-
else # no sport or world flag
|
123
|
-
if opts.delete?
|
124
|
-
SportDB.delete!
|
125
|
-
WorldDB.delete! # countries,regions,cities,tags,taggings,props
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
if opts.event.present?
|
130
|
-
if opts.generate?
|
131
|
-
Templater.new( logger ).run( opts, args ) # export/generate ruby fixtures
|
132
|
-
else
|
133
|
-
Reader.new( logger ).run( opts, args ) # load/read plain text fixtures
|
134
|
-
end
|
135
|
-
else
|
136
|
-
Loader.new( logger ).run( opts, args ) # load ruby fixtures
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
SportDB.stats
|
141
|
-
|
142
|
-
puts 'Done.'
|
143
|
-
|
144
|
-
end # method run
|
145
|
-
|
146
|
-
end # class Runner
|
147
|
-
end # module SportDB
|
data/lib/sportdb/loader.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
module SportDB
|
2
|
-
|
3
|
-
class Loader
|
4
|
-
|
5
|
-
## make models available in sportdb module by default with namespace
|
6
|
-
# e.g. lets you use Team instead of Models::Team
|
7
|
-
include SportDB::Models
|
8
|
-
|
9
|
-
|
10
|
-
def initialize( logger=nil )
|
11
|
-
if logger.nil?
|
12
|
-
@logger = Logger.new(STDOUT)
|
13
|
-
@logger.level = Logger::INFO
|
14
|
-
else
|
15
|
-
@logger = logger
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
attr_reader :logger
|
20
|
-
|
21
|
-
|
22
|
-
def run( opts, args )
|
23
|
-
|
24
|
-
args.each do |arg|
|
25
|
-
name = arg # File.basename( arg, '.*' )
|
26
|
-
|
27
|
-
if opts.load?
|
28
|
-
load_fixtures_builtin( name )
|
29
|
-
else
|
30
|
-
load_fixtures_with_include_path( name, opts.data_path )
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
end # method run
|
35
|
-
|
36
|
-
|
37
|
-
def load_fixtures_with_include_path( name, include_path ) # load from file system
|
38
|
-
path = "#{include_path}/#{name}.rb"
|
39
|
-
|
40
|
-
puts "*** loading data '#{name}' (#{path})..."
|
41
|
-
|
42
|
-
## nb: assume/enfore utf-8 encoding (with or without BOM - byte order mark)
|
43
|
-
## - see sportdb/utils.rb
|
44
|
-
code = File.read_utf8( path )
|
45
|
-
|
46
|
-
load_fixtures_worker( code )
|
47
|
-
|
48
|
-
Prop.create!( key: "db.#{fixture_name_to_prop_key(name)}.version", value: "file.rb.#{File.mtime(path).strftime('%Y.%m.%d')}" )
|
49
|
-
end
|
50
|
-
|
51
|
-
def load_fixtures_builtin( name ) # load from gem (built-in)
|
52
|
-
path = "#{SportDB.data_path}/#{name}.rb"
|
53
|
-
|
54
|
-
puts "*** loading data '#{name}' (#{path})..."
|
55
|
-
|
56
|
-
code = File.read_utf8( path )
|
57
|
-
|
58
|
-
load_fixtures_worker( code )
|
59
|
-
|
60
|
-
## for builtin fixtures use VERSION of gem
|
61
|
-
|
62
|
-
Prop.create!( key: "db.#{fixture_name_to_prop_key(name)}.version", value: "sport.rb.#{SportDB::VERSION}" )
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
|
69
|
-
def load_fixtures_worker( code )
|
70
|
-
|
71
|
-
self.class_eval( code )
|
72
|
-
|
73
|
-
# NB: same as
|
74
|
-
#
|
75
|
-
# module SportDB
|
76
|
-
# include SportDB::Models
|
77
|
-
# <code here>
|
78
|
-
# end
|
79
|
-
end
|
80
|
-
|
81
|
-
end # class Loader
|
82
|
-
end # module SportDB
|
data/lib/sportdb/templater.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
module SportDB
|
2
|
-
|
3
|
-
class Template
|
4
|
-
|
5
|
-
def initialize( path )
|
6
|
-
@path = path
|
7
|
-
end
|
8
|
-
|
9
|
-
def render( binding )
|
10
|
-
## '<>' means omit newline for lines starting with <% and ending in %>
|
11
|
-
ERB.new( load_template(), 0, '<>' ).result( binding )
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
def load_template
|
16
|
-
puts " Loading template >#{@path}<..."
|
17
|
-
File.read( @path )
|
18
|
-
end
|
19
|
-
|
20
|
-
end # class Template
|
21
|
-
|
22
|
-
|
23
|
-
class Templater
|
24
|
-
|
25
|
-
## make models available in sportdb module by default with namespace
|
26
|
-
# e.g. lets you use Team instead of Models::Team
|
27
|
-
include SportDB::Models
|
28
|
-
|
29
|
-
|
30
|
-
def initialize( logger )
|
31
|
-
if logger.nil?
|
32
|
-
@logger = Logger.new(STDOUT)
|
33
|
-
@logger.level = Logger::INFO
|
34
|
-
else
|
35
|
-
@logger = logger
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
attr_reader :logger
|
40
|
-
|
41
|
-
def run( opts, args )
|
42
|
-
|
43
|
-
## assume active activerecord connection
|
44
|
-
##
|
45
|
-
|
46
|
-
args.each do |arg|
|
47
|
-
## name = File.basename( arg, '.*' )
|
48
|
-
name = arg
|
49
|
-
gen_fixtures( opts.event, name )
|
50
|
-
end
|
51
|
-
|
52
|
-
end # method run
|
53
|
-
|
54
|
-
|
55
|
-
# make props available for template
|
56
|
-
attr_reader :event
|
57
|
-
|
58
|
-
def gen_fixtures( event_key, name )
|
59
|
-
|
60
|
-
@event = Event.find_by_key!( event_key )
|
61
|
-
|
62
|
-
puts "Event #{@event.key} >#{@event.title}<"
|
63
|
-
|
64
|
-
## todo: honor -o/--output option ??
|
65
|
-
|
66
|
-
dest = "#{name}.rb"
|
67
|
-
|
68
|
-
## todo: check if path (parent dirs) exits?
|
69
|
-
|
70
|
-
source = "#{SportDB.root}/templates/fixtures.rb.erb"
|
71
|
-
|
72
|
-
puts " Merging template #{source} to #{dest}..."
|
73
|
-
|
74
|
-
out = File.new( dest, 'w+' )
|
75
|
-
out << Template.new( source ).render( binding )
|
76
|
-
out.flush
|
77
|
-
out.close
|
78
|
-
end
|
79
|
-
|
80
|
-
end # class Templater
|
81
|
-
end # module SportDB
|
data/templates/fixtures.rb.erb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
####################################################################
|
4
|
-
# generiert am <%= Time.now %>
|
5
|
-
# using <%= SportDB.banner %>
|
6
|
-
####################################################################
|
7
|
-
|
8
|
-
|
9
|
-
###########################################
|
10
|
-
# <%= event.title %>
|
11
|
-
|
12
|
-
|
13
|
-
<%# todo: use proper key from event for variable e.g. pl or similar (strip season, etc.) %>
|
14
|
-
|
15
|
-
ev = Event.find_by_key!( '<%= event.key %>' )
|
16
|
-
|
17
|
-
<% event.teams.each do |team| %>
|
18
|
-
<%= '%-18s' % team.key %> = Team.find_by_key!( '<%= team.key %>' )
|
19
|
-
<% end %>
|
20
|
-
|
21
|
-
|
22
|
-
<% event.rounds.each do |round| %>
|
23
|
-
<%= 'r%02d' % round.pos %> = Round.create!( event: ev, pos: <%= round.pos %>, title: '<%= round.title %>', start_at: Time.utc('<%= round.start_at.strftime('%Y-%m-%d %H:%M') %>'))
|
24
|
-
<% end %>
|
25
|
-
|
26
|
-
|
27
|
-
<% event.rounds.each do |round| %>
|
28
|
-
<%= 'games%02d' % round.pos %> = [
|
29
|
-
<% round.games.each_with_index do |game| %>
|
30
|
-
[ <%= '%3d' % game.pos %>, <%= '%-18s' % "#{game.team1.key}," %>
|
31
|
-
[
|
32
|
-
<%= "#{game.score1},#{game.score2}" if game.score1.present? && game.score2.present? %>
|
33
|
-
<%= ",#{game.score3},#{game.score4}" if game.score3.present? && game.score4.present? %>
|
34
|
-
<%= ",#{game.score5},#{game.score6}" if game.score5.present? && game.score6.present? %>
|
35
|
-
],
|
36
|
-
<%= '%-18s' % "#{game.team2.key}," %> Time.utc('<%= game.play_at.strftime('%Y-%m-%d %H:%M') %>')
|
37
|
-
, <%= game.knockout %>
|
38
|
-
],
|
39
|
-
<%# does comma for last entry matter? ruby ignores it for sure? check %>
|
40
|
-
<% end %>
|
41
|
-
]
|
42
|
-
|
43
|
-
<% end %>
|
44
|
-
|
45
|
-
|
46
|
-
<% event.rounds.each do |round| %>
|
47
|
-
Game.create_from_ary!( <%= 'games%02d' % round.pos %>, <%= 'r%02d' % round.pos %> )
|
48
|
-
<% end %>
|
49
|
-
|
50
|
-
<%# todo: what to put for value??? %>
|
51
|
-
Prop.create!( key: 'db.<%= event.key %>.fixtures.version', value: '1' )
|