sportdb 1.9.16 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +2 -19
  3. data/Manifest.txt +1 -137
  4. data/README.md +2 -21
  5. data/Rakefile +14 -25
  6. data/lib/sportdb.rb +9 -260
  7. data/lib/sportdb/cli/main.rb +5 -14
  8. data/lib/sportdb/cli/opts.rb +2 -0
  9. data/lib/sportdb/cli/version.rb +26 -0
  10. metadata +10 -278
  11. data/.gemtest +0 -0
  12. data/config/fixtures/de.yml +0 -46
  13. data/config/fixtures/en.yml +0 -54
  14. data/config/fixtures/es.yml +0 -48
  15. data/config/fixtures/fr.yml +0 -53
  16. data/config/fixtures/it.yml +0 -55
  17. data/config/fixtures/pt.yml +0 -46
  18. data/config/fixtures/ro.yml +0 -55
  19. data/data/seasons.txt +0 -74
  20. data/data/setups/all.txt +0 -5
  21. data/lib/sportdb/calc.rb +0 -279
  22. data/lib/sportdb/deleter.rb +0 -52
  23. data/lib/sportdb/finders/date.rb +0 -374
  24. data/lib/sportdb/finders/goals.rb +0 -260
  25. data/lib/sportdb/finders/scores.rb +0 -122
  26. data/lib/sportdb/lang.rb +0 -216
  27. data/lib/sportdb/matcher.rb +0 -31
  28. data/lib/sportdb/models/assoc.rb +0 -106
  29. data/lib/sportdb/models/assoc_assoc.rb +0 -15
  30. data/lib/sportdb/models/badge.rb +0 -14
  31. data/lib/sportdb/models/event.rb +0 -65
  32. data/lib/sportdb/models/event_ground.rb +0 -15
  33. data/lib/sportdb/models/event_team.rb +0 -16
  34. data/lib/sportdb/models/forward.rb +0 -55
  35. data/lib/sportdb/models/game.rb +0 -244
  36. data/lib/sportdb/models/goal.rb +0 -15
  37. data/lib/sportdb/models/ground.rb +0 -100
  38. data/lib/sportdb/models/group.rb +0 -23
  39. data/lib/sportdb/models/group_team.rb +0 -14
  40. data/lib/sportdb/models/league.rb +0 -83
  41. data/lib/sportdb/models/person.rb +0 -21
  42. data/lib/sportdb/models/roster.rb +0 -18
  43. data/lib/sportdb/models/round.rb +0 -22
  44. data/lib/sportdb/models/season.rb +0 -14
  45. data/lib/sportdb/models/stats/alltime_standing.rb +0 -44
  46. data/lib/sportdb/models/stats/alltime_standing_entry.rb +0 -23
  47. data/lib/sportdb/models/stats/event_standing.rb +0 -55
  48. data/lib/sportdb/models/stats/event_standing_entry.rb +0 -21
  49. data/lib/sportdb/models/stats/group_standing.rb +0 -50
  50. data/lib/sportdb/models/stats/group_standing_entry.rb +0 -22
  51. data/lib/sportdb/models/team.rb +0 -119
  52. data/lib/sportdb/models/team_comp.rb +0 -64
  53. data/lib/sportdb/models/utils.rb +0 -78
  54. data/lib/sportdb/models/world/city.rb +0 -21
  55. data/lib/sportdb/models/world/continent.rb +0 -20
  56. data/lib/sportdb/models/world/country.rb +0 -19
  57. data/lib/sportdb/models/world/region.rb +0 -19
  58. data/lib/sportdb/patterns.rb +0 -38
  59. data/lib/sportdb/reader.rb +0 -130
  60. data/lib/sportdb/reader_file.rb +0 -123
  61. data/lib/sportdb/reader_zip.rb +0 -165
  62. data/lib/sportdb/readers/assoc.rb +0 -54
  63. data/lib/sportdb/readers/event.rb +0 -200
  64. data/lib/sportdb/readers/game.rb +0 -877
  65. data/lib/sportdb/readers/ground.rb +0 -53
  66. data/lib/sportdb/readers/league.rb +0 -54
  67. data/lib/sportdb/readers/season.rb +0 -83
  68. data/lib/sportdb/readers/squad_club.rb +0 -201
  69. data/lib/sportdb/readers/squad_national_team.rb +0 -173
  70. data/lib/sportdb/readers/team.rb +0 -53
  71. data/lib/sportdb/schema.rb +0 -373
  72. data/lib/sportdb/standings.rb +0 -178
  73. data/lib/sportdb/stats.rb +0 -27
  74. data/lib/sportdb/utils.rb +0 -89
  75. data/lib/sportdb/utils_date.rb +0 -26
  76. data/lib/sportdb/utils_goals.rb +0 -20
  77. data/lib/sportdb/utils_group.rb +0 -63
  78. data/lib/sportdb/utils_map.rb +0 -44
  79. data/lib/sportdb/utils_round.rb +0 -165
  80. data/lib/sportdb/utils_scores.rb +0 -17
  81. data/lib/sportdb/utils_teams.rb +0 -43
  82. data/lib/sportdb/version.rb +0 -22
  83. data/test/data/at-austria/2013_14/bl.txt +0 -227
  84. data/test/data/at-austria/2013_14/bl.yml +0 -30
  85. data/test/data/at-austria/2013_14/bl_ii.txt +0 -154
  86. data/test/data/at-austria/2013_14/el.txt +0 -4
  87. data/test/data/at-austria/2013_14/el.yml +0 -25
  88. data/test/data/at-austria/2013_14/squads/austria.txt +0 -40
  89. data/test/data/at-austria/2013_14/squads/salzburg.txt +0 -35
  90. data/test/data/at-austria/leagues.txt +0 -11
  91. data/test/data/at-austria/teams.txt +0 -75
  92. data/test/data/at-austria/teams_2.txt +0 -34
  93. data/test/data/national-teams/assocs.txt +0 -231
  94. data/test/data/national-teams/europe/assocs.txt +0 -13
  95. data/test/data/national-teams/europe/teams.txt +0 -13
  96. data/test/data/national-teams/north-america/assocs.txt +0 -10
  97. data/test/data/national-teams/north-america/teams.txt +0 -7
  98. data/test/data/national-teams/teams.txt +0 -19
  99. data/test/data/players/europe/at-austria/players.txt +0 -45
  100. data/test/data/players/europe/de-deutschland/players.txt +0 -41
  101. data/test/data/players/south-america/br-brazil/players.txt +0 -51
  102. data/test/data/world-cup/1930/cup.txt +0 -71
  103. data/test/data/world-cup/1930/cup.yml +0 -23
  104. data/test/data/world-cup/1930/cup_goals.txt +0 -47
  105. data/test/data/world-cup/1930/cup_goals.yml +0 -23
  106. data/test/data/world-cup/1954/cup.txt +0 -90
  107. data/test/data/world-cup/1954/cup.yml +0 -30
  108. data/test/data/world-cup/1962/cup.txt +0 -86
  109. data/test/data/world-cup/1962/cup.yml +0 -32
  110. data/test/data/world-cup/1974/cup.yml +0 -35
  111. data/test/data/world-cup/1974/cup_finals.txt +0 -14
  112. data/test/data/world-cup/1974/cup_i.txt +0 -55
  113. data/test/data/world-cup/1974/cup_ii.txt +0 -34
  114. data/test/data/world-cup/2014/cup.txt +0 -5
  115. data/test/data/world-cup/2014/cup.yml +0 -54
  116. data/test/data/world-cup/2014/squads/br-brazil.txt +0 -46
  117. data/test/data/world-cup/2014/squads/de-deutschland.txt +0 -8
  118. data/test/data/world-cup/2014/squads/jp-japan.txt +0 -30
  119. data/test/data/world-cup/2014/squads/uy-uruguay.txt +0 -32
  120. data/test/data/world-cup/leagues.txt +0 -5
  121. data/test/data/world-cup/seasons_1930.txt +0 -4
  122. data/test/data/world-cup/seasons_1954.txt +0 -4
  123. data/test/data/world-cup/seasons_1962.txt +0 -4
  124. data/test/data/world-cup/seasons_1974.txt +0 -5
  125. data/test/data/world-cup/teams_1930.txt +0 -26
  126. data/test/data/world-cup/teams_1954.txt +0 -30
  127. data/test/data/world-cup/teams_1962.txt +0 -29
  128. data/test/data/world-cup/teams_1974.txt +0 -29
  129. data/test/helper.rb +0 -120
  130. data/test/test_assoc_reader.rb +0 -201
  131. data/test/test_changes.rb +0 -74
  132. data/test/test_cursor.rb +0 -50
  133. data/test/test_date.rb +0 -100
  134. data/test/test_goals.rb +0 -109
  135. data/test/test_lang.rb +0 -130
  136. data/test/test_load.rb +0 -61
  137. data/test/test_reader.rb +0 -88
  138. data/test/test_reader_from_string.rb +0 -65
  139. data/test/test_round_auto.rb +0 -370
  140. data/test/test_round_def.rb +0 -109
  141. data/test/test_round_header.rb +0 -183
  142. data/test/test_scores.rb +0 -70
  143. data/test/test_squad_club_reader.rb +0 -76
  144. data/test/test_squad_national_team_reader.rb +0 -116
  145. data/test/test_standings.rb +0 -279
  146. data/test/test_standings_ii.rb +0 -46
  147. data/test/test_utils.rb +0 -124
  148. data/test/test_winner.rb +0 -95
@@ -1,100 +0,0 @@
1
-
2
- module SportDb
3
- module Model
4
-
5
- class Ground < ActiveRecord::Base
6
-
7
- belongs_to :country, class_name: 'WorldDb::Model::Country', foreign_key: 'country_id'
8
- belongs_to :city, class_name: 'WorldDb::Model::City', foreign_key: 'city_id'
9
-
10
- has_many :games
11
-
12
-
13
- def self.create_or_update_from_values( new_attributes, values )
14
-
15
- ## fix: add/configure logger for ActiveRecord!!!
16
- logger = LogKernel::Logger.root
17
-
18
- ## check optional values
19
- logger.debug " [Ground] values >#{values.join('<>')}<"
20
-
21
- city_title = ''
22
-
23
- values.each_with_index do |value, index|
24
- if value =~ /^(19|20)[0-9]{2}$/ ## assume founding year -- allow 19|20
25
- logger.info " founding/opening year #{value}"
26
- new_attributes[ :since ] = value.to_i
27
- elsif value =~ /^[1-9][0-9_]+[0-9]$/ # number; assume capacity e.g. 12_541 or similar
28
- # todo/fix: check how to differentiate between founding year
29
- # and capacity if capcity islike year
30
- # need to use _ e.g. 1_999 not 1999 and will get added as capacity !!!
31
- # - by position ?? year is first entry, capacity is second ??? -add/fix
32
-
33
- logger.info " found capacity #{value}"
34
- new_attributes[ :capacity ] = value.gsub('_', '').to_i
35
- elsif value =~ /^[A-Z]{1,3}$/ # assume; state/region code e-g B | TX etc.
36
- # skip region/state code
37
- logger.info " found region/state code #{value}; skipping for now"
38
- elsif value =~ /\/{2}/ # assume it's an address line e.g. xx // xx
39
- logger.info " found address line #{value}"
40
- new_attributes[ :address ] = value
41
- elsif value =~ /^clubs:/ # assume it's clubs line e.g. clubs: Santos
42
- logger.info " found clubs line #{value}; skipping for now"
43
- elsif value =~ /^(?:[a-z]{2}\.)?wikipedia:/ # assume it's wikipedia e.g. [es.]wikipedia:
44
- logger.info " found wikipedia line #{value}; skipping for now"
45
- else
46
- logger.info " found city >#{value}< for ground >#{new_attributes[ :key ]}<"
47
-
48
- city_title = value.dup # remember for auto-add city
49
-
50
- ## todo: assume title2 ??
51
- ## assume title2 if title2 is empty (not already in use)
52
- ## and if it title2 contains at least two letter e.g. [a-zA-Z].*[a-zA-Z]
53
- # issue warning: unknown type for value
54
- # logger.warn "unknown type for value >#{value}< - key #{new_attributes[:key]}"
55
- end
56
- end
57
-
58
- logger.debug " find ground key: #{new_attributes[ :key ]}"
59
-
60
- rec = Ground.find_by_key( new_attributes[ :key ] )
61
- if rec.present?
62
- logger.debug "update Ground #{rec.id}-#{rec.key}:"
63
- else
64
- logger.debug "create Ground:"
65
- rec = Ground.new
66
- end
67
-
68
- logger.debug new_attributes.to_json
69
-
70
- rec.update_attributes!( new_attributes )
71
-
72
- #### try to auto-add city
73
-
74
- if city_title.present?
75
-
76
- ### todo/fix: strip city_title subtitles e.g. Hamburg (Hafen) becomes Hamburg etc.
77
- city_values = [city_title]
78
- city_attributes = {
79
- country_id: rec.country_id,
80
- # region_id: rec.region_id ### todo/fix: add region if present
81
- }
82
-
83
- # todo: add convenience helper create_or_update_from_title
84
- city = City.create_or_update_from_values( city_values, city_attributes )
85
-
86
- ### fix/todo: set new autoadd flag too?
87
- ## e.g. check if updated? e.g. timestamp created <> updated otherwise assume created?
88
-
89
- ## now at last add city_id to brewery!
90
- rec.city_id = city.id
91
- rec.save!
92
- end
93
- end # create_or_update_from_values
94
-
95
-
96
- end # class Ground
97
-
98
- end # module Model
99
- end # module SportDb
100
-
@@ -1,23 +0,0 @@
1
-
2
- module SportDb
3
- module Model
4
-
5
-
6
- class Group < ActiveRecord::Base
7
-
8
- if ActiveRecord::VERSION::MAJOR == 3
9
- has_many :games, order: 'pos'
10
- else
11
- has_many :games, -> { order('pos') }
12
- end
13
-
14
- belongs_to :event
15
-
16
- has_many :group_teams, class_name: 'GroupTeam'
17
- has_many :teams, :through => :group_teams
18
-
19
- end # class Group
20
-
21
-
22
- end # module Model
23
- end # module SportDb
@@ -1,14 +0,0 @@
1
- module SportDb
2
- module Model
3
-
4
-
5
- class GroupTeam < ActiveRecord::Base
6
- self.table_name = 'groups_teams'
7
-
8
- belongs_to :group
9
- belongs_to :team
10
- end # class GroupTeam
11
-
12
-
13
- end # module Model
14
- end # module SportDb
@@ -1,83 +0,0 @@
1
- module SportDb
2
- module Model
3
-
4
-
5
- class League < ActiveRecord::Base
6
-
7
- ## leagues also used for conferences, world series, cups, etc.
8
- #
9
- ## league (or cup/conference/series/etc.) + season (or year) = event
10
-
11
- has_many :events
12
- has_many :seasons, :through => :events
13
-
14
- belongs_to :country, :class_name => 'WorldDb::Model::Country', :foreign_key => 'country_id'
15
-
16
-
17
- def self.create_or_update_from_values( new_attributes, values )
18
-
19
- ## fix: add/configure logger for ActiveRecord!!!
20
- logger = LogKernel::Logger.root
21
-
22
- ## check optional values
23
- values.each_with_index do |value, index|
24
- if value =~ /^club$/ # club flag
25
- new_attributes[ :club ] = true
26
- elsif value =~ /^[a-z]{2}$/ ## assume two-letter country key e.g. at,de,mx,etc.
27
- value_country = Country.find_by_key!( value )
28
- new_attributes[ :country_id ] = value_country.id
29
- else
30
- ## todo: assume title2 ??
31
- ## assume title2 if title2 is empty (not already in use)
32
- ## and if it title2 contains at least two letter e.g. [a-zA-Z].*[a-zA-Z]
33
- # issue warning: unknown type for value
34
- logger.warn "unknown type for value >#{value}< - key #{new_attributes[:key]}"
35
- end
36
- end
37
-
38
- logger.debug " find league key: #{new_attributes[ :key ]}"
39
-
40
- rec = League.find_by_key( new_attributes[ :key ] )
41
- if rec.present?
42
- logger.debug "update League #{rec.id}-#{rec.key}:"
43
- else
44
- logger.debug "create League:"
45
- rec = League.new
46
- end
47
-
48
- logger.debug new_attributes.to_json
49
-
50
- rec.update_attributes!( new_attributes )
51
- end # create_or_update_from_values
52
-
53
-
54
-
55
- def self.create_from_ary!( leagues, more_values={} )
56
- leagues.each do |values|
57
-
58
- ## key & title required
59
- attr = {
60
- key: values[0],
61
- title: values[1]
62
- }
63
-
64
- attr = attr.merge( more_values )
65
-
66
- ## check for optional values
67
- values[2..-1].each do |value|
68
- if value.is_a? Country
69
- attr[ :country_id ] = value.id
70
- else
71
- # issue warning: unknown type for value
72
- end
73
- end
74
-
75
- League.create!( attr )
76
- end # each league
77
- end
78
-
79
- end # class League
80
-
81
-
82
- end # module Model
83
- end # module SportDb
@@ -1,21 +0,0 @@
1
-
2
- #### note ---
3
- ## uses PersonDb namespace!!!!!
4
- #
5
- # move to models/person/person.rb - why? why not??
6
-
7
-
8
- module PersonDb
9
- module Model
10
-
11
- ### extends "basic" person model in PersonDb
12
- class Person
13
-
14
- has_many :goals
15
-
16
- end # class Person
17
-
18
-
19
- end # module Model
20
- end # module PersonDb
21
-
@@ -1,18 +0,0 @@
1
-
2
- module SportDb
3
- module Model
4
-
5
- ### use LineUp, Squad for name? - alias??
6
-
7
- class Roster < ActiveRecord::Base
8
-
9
- belongs_to :event
10
- belongs_to :team
11
- belongs_to :person, class_name: 'PersonDb::Model::Person', foreign_key: 'person_id'
12
-
13
- end # class Roster
14
-
15
-
16
- end # module Model
17
- end # module SportDb
18
-
@@ -1,22 +0,0 @@
1
-
2
- module SportDb
3
- module Model
4
-
5
-
6
- class Round < ActiveRecord::Base
7
-
8
- if ActiveRecord::VERSION::MAJOR == 3
9
- has_many :games, :order => 'pos'
10
- else
11
- has_many :games, -> { order('pos') }
12
- end
13
-
14
- belongs_to :event
15
-
16
- end # class Round
17
-
18
-
19
- end # module Model
20
- end # module SportDb
21
-
22
-
@@ -1,14 +0,0 @@
1
-
2
- module SportDb
3
- module Model
4
-
5
-
6
- class Season < ActiveRecord::Base
7
-
8
- has_many :events
9
-
10
- end # class Season
11
-
12
-
13
- end # module Model
14
- end # module SportDb
@@ -1,44 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module SportDb
4
- module Model
5
-
6
-
7
- class AlltimeStanding < ActiveRecord::Base
8
-
9
- self.table_name = 'alltime_standings'
10
-
11
- has_many :entries, class_name: 'SportDb::Model::AlltimeStandingEntry', foreign_key: 'alltime_standing_id', :dependent => :delete_all
12
-
13
-
14
- def recalc_for_league!( league, opts={} )
15
-
16
- recs = StandingsHelper.calc_for_events( league.events, opts )
17
-
18
- ## - remove (if exit) old entries and add new entries
19
- entries.delete_all # note: assoc dependent set to :delete_all (defaults to :nullify)
20
-
21
- recs.each do |team_key,rec|
22
-
23
- team = Team.find_by_key!( team_key )
24
- ### note: we also add rec.recs (appearance counter) - not included w/ group or event standings, for example
25
- entries.create!(
26
- team_id: team.id,
27
- pos: rec.pos,
28
- played: rec.played,
29
- won: rec.won,
30
- drawn: rec.drawn,
31
- lost: rec.lost,
32
- goals_for: rec.goals_for,
33
- goals_against: rec.goals_against,
34
- pts: rec.pts,
35
- recs: rec.recs )
36
- end
37
- end # method recalc_for_league!
38
-
39
-
40
- end # class AlltimeStanding
41
-
42
-
43
- end # module Model
44
- end # module SportDb
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module SportDb
4
- module Model
5
-
6
-
7
- class AlltimeStandingEntry < ActiveRecord::Base
8
-
9
- self.table_name = 'alltime_standing_entries'
10
-
11
- belongs_to :standing, class_name: 'SportDb::Model::AlltimeStanding', foreign_key: 'alltime_standing_id'
12
- belongs_to :team
13
-
14
- ## note:
15
- ## map standing_id to alltime_standing_id - convenience alias
16
- def standing_id=(value) write_attribute(:alltime_standing_id, value); end
17
-
18
-
19
- end # class AlltimeStandingEntry
20
-
21
-
22
- end # module Model
23
- end # module SportDb
@@ -1,55 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module SportDb
4
- module Model
5
-
6
-
7
- class EventStanding < ActiveRecord::Base
8
-
9
- self.table_name = 'event_standings'
10
-
11
- has_many :entries, class_name: 'SportDb::Model::EventStandingEntry', foreign_key: 'event_standing_id', :dependent => :delete_all
12
- belongs_to :event
13
-
14
- ## convenience helper; recalcs all records
15
- def self.recalc!( opts={} ) self.order(:id).each { |rec| rec.recalc!(opts) }; end
16
-
17
-
18
- def recalc!( opts={} )
19
- ## will calculate event standing e.g.
20
-
21
- ## calc points (pts) - loop over all group games/matches
22
- # group.games.each do |game|
23
- # end
24
-
25
- # todo/fix!!!!!!!!!!:
26
- # skip knockout rounds - why? why not?
27
- # make it configure-able?
28
-
29
- recs = StandingsHelper.calc( event.games, opts )
30
-
31
- ## - remove (if exit) old entries and add new entries
32
- entries.delete_all # note: assoc dependent set to :delete_all (defaults to :nullify)
33
-
34
- ## add empty entries
35
- event.teams.each do |team|
36
- puts " adding entry for team #{team.title} (#{team.code})"
37
- rec = recs[ team.key ] # find (in-memory) stats records
38
- entries.create!(
39
- team_id: team.id,
40
- pos: rec.pos,
41
- played: rec.played,
42
- won: rec.won,
43
- drawn: rec.drawn,
44
- lost: rec.lost,
45
- goals_for: rec.goals_for,
46
- goals_against: rec.goals_against,
47
- pts: rec.pts )
48
- end
49
- end # method recalc!
50
-
51
-
52
- end # class EventStanding
53
- end # module Model
54
-
55
- end # module SportDb
@@ -1,21 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module SportDb
4
- module Model
5
-
6
- class EventStandingEntry < ActiveRecord::Base
7
-
8
- self.table_name = 'event_standing_entries'
9
-
10
- belongs_to :standing, class_name: 'SportDb::Model::EventStanding', foreign_key: 'event_standing_id'
11
- belongs_to :team
12
-
13
- ## note:
14
- ## map standing_id to group_standing_id - convenience alias
15
- def standing_id=(value) write_attribute(:event_standing_id, value); end
16
-
17
- end # class EventStandingEntry
18
-
19
-
20
- end # module Model
21
- end # module SportDb