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.
Files changed (76) hide show
  1. data/Manifest.txt +12 -55
  2. data/Rakefile +11 -10
  3. data/bin/sportdb +1 -2
  4. data/config/fixtures.de.yml +42 -0
  5. data/config/fixtures.en.yml +52 -0
  6. data/config/fixtures.es.yml +44 -0
  7. data/config/fixtures.pt.yml +44 -0
  8. data/lib/sportdb/cli/main.rb +189 -0
  9. data/lib/sportdb/cli/opts.rb +15 -69
  10. data/lib/sportdb/data/fixtures.rb +205 -0
  11. data/lib/sportdb/{keys.rb → data/keys.rb} +9 -2
  12. data/lib/sportdb/data/models.rb +43 -0
  13. data/lib/sportdb/deleter.rb +27 -0
  14. data/lib/sportdb/lang.rb +265 -0
  15. data/lib/sportdb/models/event.rb +0 -34
  16. data/lib/sportdb/reader.rb +322 -78
  17. data/lib/sportdb/stats.rb +28 -0
  18. data/lib/sportdb/utils.rb +90 -13
  19. data/lib/sportdb/version.rb +1 -1
  20. data/lib/sportdb.rb +49 -198
  21. data/tasks/test.rb +163 -0
  22. metadata +46 -71
  23. data/data/america/2011.rb +0 -36
  24. data/data/america/2011.txt +0 -110
  25. data/data/america/2011.yml +0 -30
  26. data/data/america/teams.txt +0 -26
  27. data/data/at/2011_12/bl.rb +0 -30
  28. data/data/at/2011_12/bl.txt +0 -79
  29. data/data/at/2011_12/cup.rb +0 -66
  30. data/data/at/2012_13/bl.rb +0 -33
  31. data/data/at/2012_13/bl.txt +0 -198
  32. data/data/at/2012_13/cup.rb +0 -111
  33. data/data/at/2012_13/cup.txt +0 -89
  34. data/data/at/badges.rb +0 -22
  35. data/data/at/teams.txt +0 -88
  36. data/data/cl/2011_12/cl.rb +0 -88
  37. data/data/cl/2011_12/el.rb +0 -65
  38. data/data/cl/2012_13/cl.rb +0 -324
  39. data/data/cl/badges.rb +0 -68
  40. data/data/cl/teams.txt +0 -46
  41. data/data/copa/sud_2012_13.rb +0 -38
  42. data/data/copa/sud_2012_13.txt +0 -49
  43. data/data/copa/teams.txt +0 -35
  44. data/data/de/2012_13/bl.rb +0 -38
  45. data/data/de/2012_13/bl.txt +0 -216
  46. data/data/de/teams.txt +0 -23
  47. data/data/en/2012_13/pl.rb +0 -39
  48. data/data/en/2012_13/pl.txt +0 -291
  49. data/data/en/teams.txt +0 -26
  50. data/data/es/teams.txt +0 -8
  51. data/data/euro/2008.rb +0 -30
  52. data/data/euro/2008.txt +0 -114
  53. data/data/euro/2012.rb +0 -25
  54. data/data/euro/2012.txt +0 -114
  55. data/data/euro/teams.txt +0 -36
  56. data/data/leagues.rb +0 -68
  57. data/data/mx/apertura_2012.rb +0 -35
  58. data/data/mx/apertura_2012.txt +0 -106
  59. data/data/mx/teams.txt +0 -20
  60. data/data/nfl/teams.txt +0 -46
  61. data/data/nhl/teams.txt +0 -40
  62. data/data/ro/l1_2012_13.rb +0 -137
  63. data/data/ro/teams.txt +0 -26
  64. data/data/seasons.rb +0 -22
  65. data/data/world/2010.rb +0 -93
  66. data/data/world/2010.txt +0 -215
  67. data/data/world/quali_2012_13_america.rb +0 -25
  68. data/data/world/quali_2012_13_america.txt +0 -41
  69. data/data/world/quali_2012_13_europe.rb +0 -32
  70. data/data/world/quali_2012_13_europe_c.txt +0 -85
  71. data/data/world/quali_2012_13_europe_i.txt +0 -74
  72. data/data/world/teams.txt +0 -25
  73. data/lib/sportdb/cli/runner.rb +0 -147
  74. data/lib/sportdb/loader.rb +0 -82
  75. data/lib/sportdb/templater.rb +0 -81
  76. 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
@@ -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
@@ -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
@@ -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
@@ -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' )