sportdb-models 1.19.1 → 2.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/Manifest.txt +27 -38
  3. data/Rakefile +1 -1
  4. data/lib/sportdb/models.rb +55 -49
  5. data/lib/sportdb/{deleter.rb → models/deleter.rb} +3 -9
  6. data/lib/sportdb/models/formats.rb +23 -0
  7. data/lib/sportdb/models/models/assoc.rb +38 -0
  8. data/lib/sportdb/models/{badge.rb → models/badge.rb} +1 -1
  9. data/lib/sportdb/models/models/event.rb +55 -0
  10. data/lib/sportdb/models/{forward.rb → models/forward.rb} +3 -3
  11. data/lib/sportdb/models/{goal.rb → models/goal.rb} +1 -1
  12. data/lib/sportdb/models/models/ground.rb +16 -0
  13. data/lib/sportdb/models/{group.rb → models/group.rb} +10 -7
  14. data/lib/sportdb/models/models/league.rb +20 -0
  15. data/lib/sportdb/models/{roster.rb → models/lineup.rb} +3 -4
  16. data/lib/sportdb/models/{game.rb → models/match.rb} +16 -60
  17. data/lib/sportdb/models/{person.rb → models/person.rb} +0 -0
  18. data/lib/sportdb/models/{round.rb → models/round.rb} +1 -6
  19. data/lib/sportdb/models/{season.rb → models/season.rb} +0 -0
  20. data/lib/sportdb/models/{stage.rb → models/stage.rb} +9 -5
  21. data/lib/sportdb/models/{stats/alltime_standing_entry.rb → models/stats/alltime_standing.rb} +9 -1
  22. data/lib/sportdb/models/{stats/event_standing_entry.rb → models/stats/event_standing.rb} +11 -1
  23. data/lib/sportdb/models/{stats/group_standing_entry.rb → models/stats/group_standing.rb} +10 -1
  24. data/lib/sportdb/models/models/team.rb +56 -0
  25. data/lib/sportdb/models/{world → models/world}/city.rb +2 -2
  26. data/lib/sportdb/models/{world → models/world}/continent.rb +0 -0
  27. data/lib/sportdb/models/{world → models/world}/country.rb +0 -0
  28. data/lib/sportdb/models/{world → models/world}/state.rb +0 -0
  29. data/lib/sportdb/{schema.rb → models/schema.rb} +98 -74
  30. data/lib/sportdb/{stats.rb → models/stats.rb} +4 -4
  31. data/lib/sportdb/models/utils.rb +24 -24
  32. data/lib/sportdb/{version.rb → models/version.rb} +4 -4
  33. data/test/helper.rb +10 -6
  34. data/test/test_changes.rb +38 -38
  35. data/test/test_cursor.rb +15 -15
  36. data/test/test_winner.rb +75 -70
  37. metadata +29 -40
  38. data/lib/sportdb/calc.rb +0 -279
  39. data/lib/sportdb/models/assoc.rb +0 -106
  40. data/lib/sportdb/models/assoc_assoc.rb +0 -15
  41. data/lib/sportdb/models/event.rb +0 -66
  42. data/lib/sportdb/models/event_ground.rb +0 -15
  43. data/lib/sportdb/models/event_team.rb +0 -16
  44. data/lib/sportdb/models/ground.rb +0 -100
  45. data/lib/sportdb/models/group_team.rb +0 -14
  46. data/lib/sportdb/models/league.rb +0 -83
  47. data/lib/sportdb/models/stage_team.rb +0 -14
  48. data/lib/sportdb/models/stats/alltime_standing.rb +0 -44
  49. data/lib/sportdb/models/stats/event_standing.rb +0 -55
  50. data/lib/sportdb/models/stats/group_standing.rb +0 -50
  51. data/lib/sportdb/models/team.rb +0 -119
  52. data/lib/sportdb/models/team_compat.rb +0 -64
  53. data/lib/sportdb/patterns.rb +0 -37
  54. data/lib/sportdb/standings.rb +0 -178
@@ -0,0 +1,20 @@
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
+ end # class League
17
+
18
+
19
+ end # module Model
20
+ end # module SportDb
@@ -2,16 +2,15 @@
2
2
  module SportDb
3
3
  module Model
4
4
 
5
- ### use LineUp, Squad for name? - alias??
5
+ ### use Squad for name? - alias??
6
6
 
7
- class Roster < ActiveRecord::Base
7
+ class Lineup < ActiveRecord::Base
8
8
 
9
9
  belongs_to :event
10
10
  belongs_to :team
11
11
  belongs_to :person, class_name: 'PersonDb::Model::Person', foreign_key: 'person_id'
12
12
 
13
- end # class Roster
14
-
13
+ end # class Lineup
15
14
 
16
15
  end # module Model
17
16
  end # module SportDb
@@ -3,14 +3,18 @@ module SportDb
3
3
  module Model
4
4
 
5
5
 
6
- class Game < ActiveRecord::Base
6
+ class Match < ActiveRecord::Base
7
+
8
+ self.table_name = 'matches'
7
9
 
8
10
  belongs_to :team1, class_name: 'Team', foreign_key: 'team1_id'
9
11
  belongs_to :team2, class_name: 'Team', foreign_key: 'team2_id'
10
-
11
- belongs_to :round
12
+
13
+ belongs_to :event
14
+ belongs_to :round # round is optional
12
15
  belongs_to :group # group is optional
13
-
16
+ belongs_to :stage # stage is optional
17
+
14
18
  belongs_to :ground # ground is optional
15
19
  belongs_to :city, class_name: 'WorldDb::Model::City', foreign_key: 'city_id' # city is optioanl (remove?? redundant?? use ground ??)
16
20
 
@@ -27,7 +31,7 @@ class Game < ActiveRecord::Base
27
31
  def toto12x() toto1x2; end # alias for toto12x - todo/fix: use ruby alias helper
28
32
  def toto1x2
29
33
  ## note: will return string e.g. 1-X-2 (winner will return int e.g. 1-0-2)
30
-
34
+
31
35
  ## fix: use switch/when expr/stmt instead of ifs
32
36
  value = winner90 # 1 0 2 1 => team 1 0 => draw 2 => team
33
37
  if value == 0
@@ -82,11 +86,11 @@ class Game < ActiveRecord::Base
82
86
  end
83
87
 
84
88
  ## todo/fix:
85
- # check for next-game/pre-game !!!
89
+ # check for next-match/pre-match !!!
86
90
  # use 1st leg and 2nd leg - use for winner too
87
91
  # or add new winner_total or winner_aggregated method ???
88
92
 
89
- ## check for penalty - note: some games might only have penalty and no extra time (e.g. copa liberatadores)
93
+ ## check for penalty - note: some matches might only have penalty and no extra time (e.g. copa liberatadores)
90
94
  if score1p.present? && score2p.present?
91
95
  if score1p > score2p
92
96
  self.winner = 1
@@ -114,7 +118,7 @@ class Game < ActiveRecord::Base
114
118
 
115
119
 
116
120
  ### getter/setters for deprecated attribs (score3,4,5,6) n national
117
-
121
+
118
122
  def score1ot() score1et end
119
123
  def score2ot() score2et end
120
124
 
@@ -122,7 +126,7 @@ class Game < ActiveRecord::Base
122
126
  def score2ot=(value) self.score2et = value end
123
127
 
124
128
 
125
- # game over?
129
+ # match over?
126
130
  def over?() play_at <= Time.now; end
127
131
 
128
132
  ## fix/todo: already added by ar magic ??? remove code
@@ -130,53 +134,6 @@ class Game < ActiveRecord::Base
130
134
  def complete?() score1.present? && score2.present?; end
131
135
 
132
136
 
133
- ############# convenience helpers for styling
134
- ##
135
-
136
- def team1_style_class
137
- buf = ''
138
- ## NB: remove if calc?
139
-
140
- ### fix: loser
141
- ## - add method for checking winner/loser on ko pairs using (1st leg/2nd leg totals) ??
142
- ## use new winner_total method ??
143
-
144
- if complete?
145
- if winner1?
146
- buf << 'game-team-winner '
147
- elsif winner2?
148
- buf << 'game-team-loser '
149
- else # assume draw
150
- buf << 'game-team-draw '
151
- end
152
- end
153
-
154
- buf << 'game-knockout ' if knockout?
155
- buf
156
- end
157
-
158
- def team2_style_class
159
- buf = ''
160
- ## NB: remove if calc?
161
-
162
- ### fix: loser
163
- ## - add method for checking winner/loser on ko pairs using (1st leg/2nd leg totals) ??
164
- ## use new winner_total method ??
165
-
166
- if complete?
167
- if winner1?
168
- buf << 'game-team-loser '
169
- elsif winner2?
170
- buf << 'game-team-winner '
171
- else # assume draw
172
- buf << 'game-team-draw '
173
- end
174
- end
175
-
176
- buf << 'game-knockout ' if knockout?
177
- buf
178
- end
179
-
180
137
 
181
138
  def play_at_str( format = nil )
182
139
  ## e.g. use like
@@ -218,7 +175,7 @@ class Game < ActiveRecord::Base
218
175
 
219
176
  ## todo/fix: find a better name?
220
177
  ## todo: move to utils for reuse?
221
-
178
+
222
179
  def check_for_changes( new_attributes )
223
180
  changes_counter = 0
224
181
  new_attributes.each do |key,new_value|
@@ -231,14 +188,13 @@ class Game < ActiveRecord::Base
231
188
  puts "change #{changes_counter} for #{key} old:>#{old_value}< : #{old_value.class.name} new:>#{new_value}< : #{new_value.class.name}"
232
189
  end
233
190
  end
234
-
191
+
235
192
  # no changes found for counter==0;
236
193
  # -- otherwise x changes found; return true
237
194
  changes_counter == 0 ? false : true
238
195
  end
239
196
 
240
- end # class Game
241
-
197
+ end # class Match
242
198
 
243
199
  end # module Model
244
200
  end # module SportDb
File without changes
@@ -5,11 +5,7 @@ module SportDb
5
5
 
6
6
  class Round < ActiveRecord::Base
7
7
 
8
- if ActiveRecord::VERSION::MAJOR == 3
9
- has_many :games, :order => 'pos'
10
- else
11
- has_many :games, -> { order('pos') }
12
- end
8
+ has_many :matches, -> { order('pos') }, class_name: 'Match'
13
9
 
14
10
  belongs_to :event
15
11
 
@@ -19,4 +15,3 @@ end # class Round
19
15
  end # module Model
20
16
  end # module SportDb
21
17
 
22
-
File without changes
@@ -5,11 +5,7 @@ module SportDb
5
5
 
6
6
  class Stage < ActiveRecord::Base
7
7
 
8
- if ActiveRecord::VERSION::MAJOR == 3
9
- has_many :games, order: 'pos'
10
- else
11
- has_many :games, -> { order('pos') }
12
- end
8
+ has_many :matches, -> { order('pos') }, class_name: 'Match'
13
9
 
14
10
  belongs_to :event
15
11
 
@@ -18,5 +14,13 @@ end
18
14
 
19
15
  end # class Stage
20
16
 
17
+
18
+ class StageTeam < ActiveRecord::Base
19
+ self.table_name = 'stages_teams'
20
+
21
+ belongs_to :stage
22
+ belongs_to :team
23
+ end # class StageTeam
24
+
21
25
  end # module Model
22
26
  end # module SportDb
@@ -4,6 +4,15 @@ module SportDb
4
4
  module Model
5
5
 
6
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
+ end # class AlltimeStanding
14
+
15
+
7
16
  class AlltimeStandingEntry < ActiveRecord::Base
8
17
 
9
18
  self.table_name = 'alltime_standing_entries'
@@ -15,7 +24,6 @@ class AlltimeStandingEntry < ActiveRecord::Base
15
24
  ## map standing_id to alltime_standing_id - convenience alias
16
25
  def standing_id=(value) write_attribute(:alltime_standing_id, value); end
17
26
 
18
-
19
27
  end # class AlltimeStandingEntry
20
28
 
21
29
 
@@ -3,6 +3,17 @@
3
3
  module SportDb
4
4
  module Model
5
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
+ end # class EventStanding
15
+
16
+
6
17
  class EventStandingEntry < ActiveRecord::Base
7
18
 
8
19
  self.table_name = 'event_standing_entries'
@@ -16,6 +27,5 @@ class EventStandingEntry < ActiveRecord::Base
16
27
 
17
28
  end # class EventStandingEntry
18
29
 
19
-
20
30
  end # module Model
21
31
  end # module SportDb
@@ -4,6 +4,16 @@ module SportDb
4
4
  module Model
5
5
 
6
6
 
7
+ class GroupStanding < ActiveRecord::Base
8
+
9
+ self.table_name = 'group_standings'
10
+
11
+ has_many :entries, class_name: 'SportDb::Model::GroupStandingEntry', foreign_key: 'group_standing_id', :dependent => :delete_all
12
+ belongs_to :group
13
+
14
+ end # class GroupStanding
15
+
16
+
7
17
  class GroupStandingEntry < ActiveRecord::Base
8
18
 
9
19
  self.table_name = 'group_standing_entries'
@@ -17,6 +27,5 @@ class GroupStandingEntry < ActiveRecord::Base
17
27
 
18
28
  end # class GroupStandingEntry
19
29
 
20
-
21
30
  end # module Model
22
31
  end # module SportDb
@@ -0,0 +1,56 @@
1
+
2
+ module SportDb
3
+ module Model
4
+
5
+ ##################
6
+ # FIX: add ?
7
+ #
8
+ # use single table inheritance STI ????
9
+ # - to mark two dervided classes e.g.
10
+ # - Club ??? - why? why not?
11
+ # - NationalTeam ??? - why? why not?
12
+
13
+
14
+ class Team < ActiveRecord::Base
15
+
16
+ has_many :home_matches, class_name: 'Match', foreign_key: 'team1_id'
17
+ has_many :away_matches, class_name: 'Match', foreign_key: 'team2_id'
18
+
19
+ validates :key, format: { with: TEAM_KEY_RE, message: TEAM_KEY_MESSAGE }
20
+ validates :code, format: { with: TEAM_CODE_RE, message: TEAM_CODE_MESSAGE }, allow_nil: true
21
+
22
+ has_many :event_teams, class_name: 'EventTeam' # join table (events+teams)
23
+ has_many :events, :through => :event_teams
24
+
25
+ # note: team belongs_to a single (optinal) assoc for now (national assoc may have many assocs)
26
+ belongs_to :assoc
27
+
28
+ ### fix!!! - how to do it with has_many macro? use finder_sql?
29
+ ## finder_sql is depreciated in Rails 4!!!
30
+ # use -> { where() } etc. -- try it if it works
31
+ ## keep as is! best solution ??
32
+ ## a discussion here -> https://github.com/rails/rails/issues/9726
33
+ ## a discussion here (not really helpful) -> http://stackoverflow.com/questions/2125440/activerecord-has-many-where-two-columns-in-table-a-are-primary-keys-in-table-b
34
+
35
+ def matches
36
+ Match.where( 'team1_id = ? or team2_id = ?', id, id ).order( 'date' )
37
+ end
38
+
39
+ def upcoming_matches
40
+ Match.where( 'team1_id = ? or team2_id = ?', id, id ).where( 'date > ?', Date.today ).order( 'date' )
41
+ end
42
+
43
+ def past_matches
44
+ Match.where( 'team1_id = ? or team2_id = ?', id, id ).where( 'date < ?', Date.today ).order( 'date desc' )
45
+ end
46
+
47
+
48
+ has_many :badges # Winner, 2nd, Cupsieger, Aufsteiger, Absteiger, etc.
49
+
50
+ belongs_to :country, class_name: 'WorldDb::Model::Country', foreign_key: 'country_id'
51
+ belongs_to :city, class_name: 'WorldDb::Model::City', foreign_key: 'city_id'
52
+ end # class Team
53
+
54
+
55
+ end # module Model
56
+ end # module SportDb
@@ -6,14 +6,14 @@ module WorldDb
6
6
 
7
7
  class City
8
8
  has_many :teams, class_name: 'SportDb::Model::Team', foreign_key: 'city_id'
9
-
9
+
10
10
  # fix: require active record 4
11
11
  # has_many :clubs, -> { where club: true }, class_name: 'SportDb::Model::Team', foreign_key: 'city_id'
12
12
  # has_many :national_teams, -> { where club: false }, class_name: 'SportDb::Model::Team', foreign_key: 'city_id'
13
13
 
14
14
 
15
15
  has_many :grounds, class_name: 'SportDb::Model::Ground', foreign_key: 'city_id'
16
- has_many :games, :through => :grounds
16
+ has_many :matches, class_name: 'SportDb::Model::Match', :through => :grounds
17
17
  end
18
18
 
19
19
  end # module Model
File without changes
@@ -8,43 +8,58 @@ def up
8
8
 
9
9
  create_table :teams do |t|
10
10
  t.string :key, null: false # import/export key
11
- t.string :title, null: false
12
- t.string :title2 ## find a better name -why? why not? or remove?
13
- t.string :code # make it not null? - three letter code (short title)
14
- t.string :synonyms # comma separated list of synonyms - todo/fix: change to alt_names!!!
11
+ t.string :name, null: false # "canonical" unique name
12
+
13
+ t.string :code # three letter code (short name)
14
+ t.string :alt_names # comma separated list of alt names / synonyms
15
+
15
16
  t.references :country, null: false, index: false
16
- t.references :city , index: false # NB: city is optional (should be required for clubs e.g. non-national teams)
17
- ## todo/fix: add optional district (in city)
17
+ t.references :city, index: false # note: city is optional (should be required for clubs e.g. non-national teams)
18
+ t.references :district, index: false # note: optional district (in city)
19
+
20
+ ## todo/check/fix: use team type or such e.g. club/national/etc. - why? why not?
21
+ ### or remove and add virtual attribute in model instead - why? why not?
18
22
  t.boolean :club, null: false, default: false # is it a club (not a national team)?
23
+ t.boolean :national, null: false, default: false # is it a national selection team (not a club)?
24
+
25
+ ## todo/fix: add team reference for a and b team!!!!
26
+
27
+
28
+ t.integer :start_year # founding year -fix change to start_year / founded - why? why not?
29
+ t.integer :end_year
30
+ ## add more? - start_year2, end_year2 - why? why not?
31
+ # e.g. founded = 1946, 2013 (refounded)
32
+ # dissolved = 1997
19
33
 
20
- t.integer :since # founding year -fix change to start_year / founded - why? why not?
21
34
  t.string :address
22
35
  t.string :web
23
36
 
37
+ ## todo/fix: change to gov / governing body or such!!!
24
38
  t.references :assoc, index: false # optional: national football assoc(iation), for example - used for national teams
25
39
 
26
- ### fix: remove and add virtual attribute in model instead
27
- t.boolean :national, null: false, default: false # is it a national selection team (not a club)?
40
+ t.string :comments
41
+
28
42
  t.timestamps
29
43
  end
30
44
 
31
45
  add_index :teams, :key, unique: true
32
46
 
47
+
33
48
  ###########
34
49
  # check: use table (rename to) venues / stadiums - why? why not?
35
50
  create_table :grounds do |t|
36
51
  t.string :key, null: false # import/export key
37
- t.string :title, null: false
38
- t.string :synonyms # comma separated list of synonyms
52
+ t.string :name, null: false
53
+ t.string :alt_names # comma separated list of alt_names / synonyms
39
54
 
40
55
  t.references :country, null: false, index: false
41
56
  t.references :city, index: false # todo: make city required ???
57
+ t.references :district, index: false # note: optional district (in city)
42
58
 
43
- t.integer :since # founding year
44
- t.integer :capacity # attentence capacity e.g. 10_000 or 50_000 etc.
59
+ t.integer :start_year # founding year
60
+ t.integer :capacity # attentence capacity e.g. 10_000 or 50_000 etc.
45
61
  t.string :address
46
62
 
47
-
48
63
  ### fix/todo: add since/founded/opened/build attrib eg. 2011 or 1987
49
64
  ## - add capacity e.g. 40_000
50
65
  ## fix: add address !!!! etc
@@ -57,10 +72,10 @@ end
57
72
  add_index :grounds, :key, unique: true
58
73
 
59
74
 
60
- # join table: person+game(team1+team2+event(season+league))
75
+ # join table: person+match(team1+team2+event(season+league))
61
76
  create_table :goals do |t|
62
77
  t.references :person, null: false, index: false
63
- t.references :game, null: false, index: false
78
+ t.references :match, null: false, index: false
64
79
  t.references :team, null: false, index: false ## use integer instead w/ values 1 or 2 for team1 or team2 ?? why? why not?
65
80
 
66
81
  t.integer :minute
@@ -77,33 +92,30 @@ create_table :goals do |t|
77
92
  end
78
93
 
79
94
 
80
- ################
81
- # fix/todo: rename to squads / lineups
82
-
83
95
  # join table -> person+team+event(season+league)
84
- create_table :rosters do |t| # use squads as an alternative name? why? why not??
96
+ create_table :lineups do |t| # use squads as an alternative name? why? why not??
85
97
  t.references :person, null: false, index: false
86
98
  t.references :team, null: false, index: false
87
99
  t.references :event , index: false # make required?
88
- t.integer :pos, null: false
100
+ t.integer :num, # optional - jersey (t-shirt) number
89
101
 
90
102
  t.timestamps
91
103
  end
92
104
 
93
105
 
94
106
  create_table :events do |t|
95
- t.string :key, null: false # import/export key
96
- t.references :league, null: false, index: false
97
- t.references :season, null: false, index: false
98
- t.date :start_at, null: false # NB: only use date (w/o time) - yes!!! split into two!!!!
99
- t.date :end_at # make it required??? # NB: only use date (w/o time)
107
+ t.string :key, null: false # import/export key
108
+ t.references :league, null: false, index: false
109
+ t.references :season, null: false, index: false
110
+ t.date :start_date, null: false # note: only use date (w/o time)
111
+ t.date :end_date # note: only use date (w/o time)
112
+
113
+ t.integer :num ## optional series counter e.g. World Cup No. 2, Bundesliga No. 43 etc. etc.
100
114
 
101
- t.boolean :team3, null: false, default: true ## e.g. Champions League has no 3rd place (only 1st and 2nd/final)
115
+ ## t.boolean :team3, null: false, default: true ## e.g. Champions League has no 3rd place (only 1st and 2nd/final)
102
116
  ## todo: add league/cup flag/flags or to league itself?
103
117
  ## or add add a tournament type field - why? why not?
104
118
 
105
- t.integer :num ## optional series counter e.g. World Cup No. 2, Bundesliga No. 43 etc. etc.
106
-
107
119
  ## auto-added flag (e.g. start_at n end_at dates got calculated)
108
120
  ## if auto-added flag is false - do NOT auto-update start_at, end_at etc.
109
121
  t.boolean :auto, null: false, default: true
@@ -111,8 +123,8 @@ create_table :events do |t|
111
123
 
112
124
  #### track 1-n sources (from repos) - # todo move to its own table later
113
125
  ## NB: relative to event.yml - use mapper to "resolve" to full path w/ repo; use league+season keys
114
- t.string :sources # e.g. cup or bl,bl_ii # NB: for now store all in on string separated by comma
115
- t.string :config # e.g. cup or bl # e.g assumes cup.yml, bl.yml etc. for now
126
+ # t.string :sources # e.g. cup or bl,bl_ii # NB: for now store all in on string separated by comma
127
+ # t.string :config # e.g. cup or bl # e.g assumes cup.yml, bl.yml etc. for now
116
128
 
117
129
 
118
130
  t.timestamps
@@ -123,19 +135,22 @@ add_index :events, :key, unique: true
123
135
 
124
136
  create_table :rounds do |t|
125
137
  t.references :event, null: false, index: false ## Note: do NOT auto-add index
126
- t.string :title, null: false
127
- t.string :title2
138
+ t.string :name, null: false
128
139
  t.integer :pos, null: false ## use only for "internal" sort order (defaults to insertion order)
129
140
 
130
141
  t.integer :num ## optional match day/week number
131
142
  t.string :key ## optional match day/week number key (as string)
132
143
 
133
144
  ## add new table stage/stages for grouping rounds in group rounds and playoff rounds, for example???
134
- ## # "regular" season (group) games or post-season (playoff) knockouts (k.o's)
145
+ ## # "regular" season (group) matches or post-season (playoff) knockouts (k.o's)
135
146
  t.boolean :knockout, null: false, default: false
136
147
  ## todo: add leg (e.g. leg1, leg2, etc. why? why not?)
137
- t.date :start_at # note: only use date (w/o time) - fix: change to start_date!!!
138
- t.date :end_at # note: only use date (w/o time) - fix: change to end_date!!!
148
+ t.date :start_date # note: only use date (w/o time) - fix: change to start_date!!!
149
+ t.date :end_date # note: only use date (w/o time) - fix: change to end_date!!!
150
+ t.date :start_date2 # note: only use date (w/o time) - fix: change to start_date!!!
151
+ t.date :end_date2 # note: only use date (w/o time) - fix: change to end_date!!!
152
+
153
+ ## add last_date/first-date(auto) - for "real" last and first dates - auto-added - why? why not?
139
154
 
140
155
  ## auto-added flag (e.g. start_at n end_at dates got calculated)
141
156
  ## if auto-added flag is false - do NOT auto-update start_at, end_at etc.
@@ -149,7 +164,7 @@ add_index :rounds, :event_id # fk event_id index
149
164
 
150
165
  create_table :groups do |t| # Teamgruppe (zB Gruppe A, Gruppe B, etc.)
151
166
  t.references :event, null: false, index: false ## Note: do NOT auto-add index
152
- t.string :title, null: false
167
+ t.string :name, null: false
153
168
  t.integer :pos, null: false ## use only for "internal" sort order (defaults to insertion order)
154
169
 
155
170
  t.string :key ## optional group key e.g. A, B, C or 1, 2, etc. - use why? why not?
@@ -161,7 +176,7 @@ add_index :groups, :event_id # fk event_id index
161
176
 
162
177
  create_table :stages do |t| # e.g. regular season, champions round, etc.
163
178
  t.references :event, null: false, index: false ## Note: do NOT auto-add index
164
- t.string :title, null: false
179
+ t.string :name, null: false
165
180
  ## todo/check: add pos for use only for "internal" sort order (defaults to insertion order)??
166
181
  t.timestamps
167
182
  end
@@ -170,9 +185,7 @@ add_index :stages, :event_id # fk event_id index
170
185
 
171
186
 
172
187
 
173
- ###########################
174
- # fix: rename table to matches - why? why not?
175
- create_table :games do |t|
188
+ create_table :matches do |t|
176
189
  t.string :key # import/export key
177
190
  t.references :event, null: false, index: false
178
191
  t.integer :pos, null: false ## note: use only for "internal" sort order (defaults to insertion order)
@@ -194,17 +207,20 @@ create_table :games do |t|
194
207
  t.string :stage_key
195
208
 
196
209
 
197
- t.datetime :play_at # optioanl play date - todo/fix: split into play_date AND play_time!!!
210
+ t.date :date # optioanl play date - todo/fix: split into play_date AND play_time!!!
211
+ t.time :time
212
+
198
213
  t.boolean :postponed, null: false, default: false
199
- t.datetime :play_at_v2 # optional old date (when postponed)
200
- t.datetime :play_at_v3 # optional odl date (when postponed twice)
214
+ ## t.date :date2 # optional old date (when postponed)
215
+ ## t.date :date3 # optional odl date (when postponed twice)
201
216
 
202
217
  t.references :ground, index: false # optional - stadium (lets you get city,region,country,etc)
203
218
  t.references :city, index: false # optional - convenience for ground.city_id ???
204
219
 
205
-
206
- t.boolean :knockout, null: false, default: false
220
+ ## change home to neutral - why? why not?
207
221
  t.boolean :home, null: false, default: true # is team1 play at home or neutral (that is, at its home stadium)
222
+ t.boolean :knockout, null: false, default: false
223
+
208
224
  t.integer :score1
209
225
  t.integer :score2
210
226
  t.integer :score1et # extratime - team 1 (opt)
@@ -215,23 +231,25 @@ create_table :games do |t|
215
231
  t.integer :score2i # half time - team 2
216
232
  t.integer :score1ii # second third (opt)
217
233
  t.integer :score2ii # second third - team2 (opt)
218
- t.references :next_game, index: false ## Note: do NOT auto-add index -- for hinspiel bei rueckspiel in knockout game
219
- t.references :prev_game, index: false ## Note: do NOT auto-add index
234
+ t.references :next_match, index: false ## Note: do NOT auto-add index -- for hinspiel bei rueckspiel in knockout match
235
+ t.references :prev_match, index: false ## Note: do NOT auto-add index
220
236
 
221
237
  t.integer :winner # 1,2,0,nil calculate on save - "real" winner (after 90 or extra time or penalty, aggregated first+second leg?)
222
238
  t.integer :winner90 # 1,2,0,nil calculate on save - winner after 90 mins (or regugular play time depending on sport - add alias or find a better name!)
223
239
 
240
+ t.string :comments
241
+
224
242
  t.timestamps
225
243
  end
226
244
 
227
- add_index :games, :key, unique: true
228
- add_index :games, :event_id # fk event_id index
229
- add_index :games, :round_id # fk round_id index
230
- add_index :games, :group_id # fk group_id index
231
- add_index :games, :next_game_id # fk next_game_id index
232
- add_index :games, :prev_game_id # fk next_game_id index
233
- add_index :games, :team1_id
234
- add_index :games, :team2_id
245
+ add_index :matches, :key, unique: true
246
+ add_index :matches, :event_id # fk event_id index
247
+ add_index :matches, :round_id # fk round_id index
248
+ add_index :matches, :group_id # fk group_id index
249
+ add_index :matches, :next_match_id # fk next_match_id index
250
+ add_index :matches, :prev_match_id # fk next_match_id index
251
+ add_index :matches, :team1_id
252
+ add_index :matches, :team2_id
235
253
 
236
254
 
237
255
  # todo: remove id from join table (without extra fields)? why?? why not??
@@ -283,25 +301,29 @@ add_index :groups_teams, :group_id
283
301
 
284
302
  create_table :seasons do |t| ## also used for years - add a boolean year true/false flag too - why? why not?
285
303
  t.string :key, null: false
286
- t.string :title, null: false # e.g. 2011/12, 2012/13 ### what to do w/ 2012? for world cup etc?
304
+ t.string :name, null: false # e.g. 2011/12, 2012/13 ### what to do w/ 2012? for world cup etc?
287
305
  t.timestamps
288
306
  end
289
307
 
290
308
 
291
309
  create_table :leagues do |t| ## also for cups/conferences/tournaments/world series/etc.
292
310
  t.string :key, null: false
293
- t.string :title, null: false # e.g. Premier League, Deutsche Bundesliga, World Cup, Champions League, etc.
294
- t.references :country, index: false ## optional for now , :null => false ### todo: create "virtual" country for international leagues e.g. use int? or world (ww?)/europe (eu)/etc. similar? already taken??
311
+ t.string :name, null: false # e.g. Premier League, Deutsche Bundesliga, World Cup, Champions League, etc.
312
+ t.string :alt_names # comma separated list of alt names / synonyms
313
+
314
+ t.references :country, index: false ## optional for now ### todo: create "virtual" country for international leagues e.g. use int? or world (ww?)/europe (eu)/etc. similar? already taken??
295
315
 
296
316
  ## fix: rename to :clubs from :club - why? why not?
297
317
  ## fix: rename to :intl from :international - why? why not? shorter? better?
298
318
  ## todo/check: flip clup to league flag? why? why not?
299
- t.boolean :club, null: false, default: false # club teams or national teams?
300
- t.boolean :intl, null: false, default: false # national league or international?
301
- t.boolean :cup, null: false, default: false ## or regular season league?? use a tournament type field with enums - why? why not?
319
+ t.boolean :clubs, null: false, default: false # club teams or national teams?
320
+ t.boolean :intl, null: false, default: false # national league or international?
321
+ t.boolean :cup, null: false, default: false ## or regular season league?? use a tournament type field with enums - why? why not?
322
+
302
323
  t.integer :level ## use tier? e.g. level 1, level 2, etc.
303
324
 
304
- ## todo/fix: add start_year / end_year ???
325
+ t.integer :start_year
326
+ t.integer :end_year
305
327
 
306
328
  ## todo: add t.boolean :national flag? for national teams?
307
329
  t.timestamps
@@ -314,16 +336,16 @@ create_table :badges do |t|
314
336
  ## t.references :event, :null => false # event => league+season
315
337
  t.references :league, null: false, index: false
316
338
  t.references :season, null: false, index: false
317
- t.string :title, null: false # Meister, Weltmeister, Europameister, Cupsieger, Vize-Meister, Aufsteiger, Absteiger, etc.
339
+ t.string :name, null: false # Meister, Weltmeister, Europameister, Cupsieger, Vize-Meister, Aufsteiger, Absteiger, etc.
318
340
  t.timestamps
319
341
  end
320
342
 
321
343
 
322
344
  create_table :assocs do |t|
323
345
  t.string :key, null: false
324
- t.string :title, null: false # e.g. Premier League, Deutsche Bundesliga, World Cup, Champions League, etc.
346
+ t.string :name, null: false # e.g. Premier League, Deutsche Bundesliga, World Cup, Champions League, etc.
325
347
 
326
- t.integer :since # founding year
348
+ t.integer :start_year # founding year
327
349
  t.string :web
328
350
 
329
351
  ### if national assoc - has (optional) country ref
@@ -332,6 +354,7 @@ create_table :assocs do |t|
332
354
 
333
355
  ## add :world flag for FIFA? - just check if parent is null? for root assoc(s)? why? why not?
334
356
  ## add :regional flag for continental subdivision?
357
+ ## todo: shorten to contl and intercontl - why? why not?
335
358
  t.boolean :continental, null: false, default: false
336
359
  t.boolean :intercontinental, null: false, default: false # e.g. arab football league (africa+western asia/middle east)
337
360
  t.timestamps
@@ -365,16 +388,17 @@ create_table :group_standings do |t|
365
388
  t.timestamps
366
389
  end
367
390
 
368
- ### use items instead of entries - why (shorter! simple plural e.g. just add s)
391
+ ### use items or lines instead of entries - why (shorter! simple plural e.g. just add s)
392
+ ## use group_table_lines/stats - why? why not?
369
393
 
370
394
  create_table :group_standing_entries do |t|
371
395
  t.references :group_standing, null: false, index: false
372
396
  t.references :team, null: false, index: false
373
- t.integer :pos ## todo/fix: add rank and use pos only for "internal" insertation order
374
- t.integer :played
375
- t.integer :won
376
- t.integer :lost
377
- t.integer :drawn
397
+ t.integer :pos # check/todo: use rank? -- keep/use pos only for "internal" insertation order only - why? why not?
398
+ t.integer :played ## p/pld
399
+ t.integer :won ## w
400
+ t.integer :lost ## l
401
+ t.integer :drawn ## d or t/tied ??
378
402
  t.integer :goals_for # todo: find a short name - gf? why? why not?
379
403
  t.integer :goals_against # todo: find a shorter name - ga? why? why not?
380
404
  t.integer :pts
@@ -408,7 +432,7 @@ end
408
432
  ## -use (find a better) a different name? why? why not?
409
433
  create_table :alltime_standings do |t|
410
434
  t.string :key, null: false
411
- t.string :title, null: false
435
+ t.string :name, null: false
412
436
  t.timestamps
413
437
  end
414
438
 
@@ -423,7 +447,7 @@ create_table :alltime_standing_entries do |t|
423
447
  t.integer :goals_for # todo: find a short name - gf? why? why not?
424
448
  t.integer :goals_against # todo: find a shorter name - ga? why? why not?
425
449
  t.integer :pts
426
- t.integer :recs # note: specific to alltime - stats records counter (e.g. appearance counter)
450
+ t.integer :recs # note: specific to alltime - stats records counter (e.g. appearance counter) - find a better name - why? why not?
427
451
  t.string :comments
428
452
  t.timestamps
429
453
  end