sportdb 1.9.7 → 1.9.8

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.
@@ -60,7 +60,8 @@ lib/sportdb/readers/game.rb
60
60
  lib/sportdb/readers/ground.rb
61
61
  lib/sportdb/readers/league.rb
62
62
  lib/sportdb/readers/season.rb
63
- lib/sportdb/readers/squad.rb
63
+ lib/sportdb/readers/squad_club.rb
64
+ lib/sportdb/readers/squad_national_team.rb
64
65
  lib/sportdb/readers/team.rb
65
66
  lib/sportdb/schema.rb
66
67
  lib/sportdb/standings.rb
@@ -79,6 +80,8 @@ test/data/at-austria/2013_14/bl.yml
79
80
  test/data/at-austria/2013_14/bl_ii.txt
80
81
  test/data/at-austria/2013_14/el.txt
81
82
  test/data/at-austria/2013_14/el.yml
83
+ test/data/at-austria/2013_14/squads/austria.txt
84
+ test/data/at-austria/2013_14/squads/salzburg.txt
82
85
  test/data/at-austria/leagues.txt
83
86
  test/data/at-austria/teams.txt
84
87
  test/data/at-austria/teams_2.txt
@@ -88,6 +91,7 @@ test/data/national-teams/europe/teams.txt
88
91
  test/data/national-teams/north-america/assocs.txt
89
92
  test/data/national-teams/north-america/teams.txt
90
93
  test/data/national-teams/teams.txt
94
+ test/data/players/europe/at-austria/players.txt
91
95
  test/data/players/europe/de-deutschland/players.txt
92
96
  test/data/players/south-america/br-brazil/players.txt
93
97
  test/data/world-cup/1930/cup.txt
@@ -131,7 +135,8 @@ test/test_round_auto.rb
131
135
  test/test_round_def.rb
132
136
  test/test_round_header.rb
133
137
  test/test_scores.rb
134
- test/test_squad_reader.rb
138
+ test/test_squad_club_reader.rb
139
+ test/test_squad_national_team_reader.rb
135
140
  test/test_standings.rb
136
141
  test/test_standings_ii.rb
137
142
  test/test_utils.rb
@@ -95,7 +95,8 @@ require 'sportdb/readers/game'
95
95
  require 'sportdb/readers/ground'
96
96
  require 'sportdb/readers/league'
97
97
  require 'sportdb/readers/season'
98
- require 'sportdb/readers/squad' # roster
98
+ require 'sportdb/readers/squad_club' # roster
99
+ require 'sportdb/readers/squad_national_team'
99
100
  require 'sportdb/readers/team'
100
101
  require 'sportdb/reader'
101
102
 
@@ -42,6 +42,12 @@ class Reader
42
42
  reader = PersonDb::PersonReader.new( include_path )
43
43
  reader.read( name, country_id: country.id )
44
44
  end
45
+ elsif name =~ /\/squads\/([a-z0-9]{3,})$/ # e.g. ajax.txt bayern.txt etc.
46
+ ## note: for now assume club (e.g. no dash (-) allowed for country code e.g. br-brazil etc.)
47
+ team = Team.find_by_key!( $1 )
48
+ ## note: pass in @event.id - that is, last seen event (e.g. parsed via GameReader/MatchReader)
49
+ reader = ClubSquadReader.new( include_path )
50
+ reader.read( name, team_id: team.id, event_id: @event.id )
45
51
  elsif name =~ /\/squads\/([a-z]{2,3})-[^\/]+$/
46
52
  ## fix: add to country matcher new format
47
53
  ## name is country! and parent folder is type name e.g. /squads/br-brazil
@@ -54,16 +60,17 @@ class Reader
54
60
  ## not country code (allows multiple teams per country)
55
61
 
56
62
  if $1.length == 2
63
+ ## get national team via country
57
64
  country = Country.find_by_key!( $1 )
58
65
  ### for now assume country code matches team for now (do NOT forget to downcase e.g. BRA==bra)
59
66
  logger.info " assume country code == team code for #{country.code}"
60
67
  team = Team.find_by_key!( country.code.downcase )
61
68
  else # assume length == 3
69
+ ## get national team directly (use three letter fifa code)
62
70
  team = Team.find_by_key!( $1 )
63
71
  end
64
-
65
- reader = SquadReader.new( include_path )
66
72
  ## note: pass in @event.id - that is, last seen event (e.g. parsed via GameReader/MatchReader)
73
+ reader = NationalTeamSquadReader.new( include_path )
67
74
  reader.read( name, team_id: team.id, event_id: @event.id )
68
75
  elsif name =~ /(?:^|\/)seasons/ # NB: ^seasons or also possible at-austria!/seasons
69
76
  reader = SeasonReader.new( include_path )
@@ -0,0 +1,194 @@
1
+ # encoding: UTF-8
2
+
3
+
4
+ module SportDb
5
+
6
+ ###
7
+ # todo/fix: use one squad reader for
8
+ # national teams and clubs? possible? why? why not?
9
+
10
+
11
+ class ClubSquadReader
12
+
13
+ include LogUtils::Logging
14
+
15
+ ## make models available by default with namespace
16
+ # e.g. lets you use Usage instead of Model::Usage
17
+ include Models
18
+
19
+ ## value helpers e.g. is_year?, is_taglist? etc.
20
+ include TextUtils::ValueHelper
21
+
22
+ include FixtureHelpers
23
+
24
+
25
+ attr_reader :include_path
26
+
27
+
28
+ def initialize( include_path, opts = {} )
29
+ @include_path = include_path
30
+ end
31
+
32
+
33
+ def read( name, more_attribs={} )
34
+ ## note:
35
+ # event_id and team_id required!!
36
+
37
+ ## todo: move name_real_path code to LineReaderV2 ????
38
+ pos = name.index( '!/')
39
+ if pos.nil?
40
+ name_real_path = name # not found; real path is the same as name
41
+ else
42
+ # cut off everything until !/ e.g.
43
+ # at-austria!/w-wien/beers becomes
44
+ # w-wien/beers
45
+ name_real_path = name[ (pos+2)..-1 ]
46
+ end
47
+
48
+ path = "#{include_path}/#{name_real_path}.txt"
49
+
50
+ logger.info "parsing data '#{name}' (#{path})..."
51
+
52
+ # event
53
+ @event = Event.find( more_attribs[:event_id] )
54
+ pp @event
55
+
56
+ ## note: use @team - share/use in worker method
57
+ @team = Team.find( more_attribs[:team_id] )
58
+ pp @team
59
+
60
+ ### SportDb.lang.lang = LangChecker.new.analyze( name, include_path )
61
+
62
+ ## mapping tables for persons per country (indexed by country code); reset
63
+ @country_persons_cache = {}
64
+
65
+ reader = LineReader.new( path )
66
+
67
+ read_worker( reader )
68
+
69
+ Prop.create_from_fixture!( name, path )
70
+ end
71
+
72
+
73
+ def read_worker( reader )
74
+ ##
75
+ ## fix: use num (optional) for offical jersey number
76
+ # use pos for internal use only (ordering)
77
+
78
+ pos_counter = 999000 # pos counter for undefined players w/o pos
79
+
80
+ reader.each_line do |line|
81
+ logger.debug " line: >#{line}<"
82
+
83
+ cut_off_end_of_line_comment!( line )
84
+
85
+ pos = find_leading_num!( line )
86
+
87
+ if pos.nil?
88
+ pos_counter+=1 ## e.g. 999001,999002 etc.
89
+ pos = pos_counter
90
+ end
91
+
92
+ nationality = find_nationality!( line ) # e.g. ARG,AUT,USA,MEX etc. (three-letter country code)
93
+
94
+ if nationality.nil?
95
+ ## note: use/assume team's nationality is player's nationality
96
+ nationality = @team.country.code
97
+ end
98
+
99
+ ## note: for now allow lines w/ missing country records in db (used in unit tests)
100
+ country = Country.find_by_code( nationality )
101
+ if country.nil?
102
+ logger.warn "*** no country found for code >#{nationality}< in line: >#{line}<"
103
+ person_key = nil ## no country, no mapping table - canNOT map person
104
+ else
105
+ ## try mapping person using country table
106
+ ## cache mapping table by country code
107
+
108
+ country_persons = @country_persons_cache[ country.code ]
109
+ if country_persons.nil?
110
+ logger.info " persons count for country (#{country.code}): #{country.persons.count}"
111
+ country_persons = TextUtils.build_title_table_for( country.persons )
112
+ @country_persons_cache[ country.code ] = country_persons # cache mapping table
113
+ end
114
+
115
+ map_person!( line, country_persons )
116
+ person_key = find_person!( line )
117
+ end
118
+
119
+
120
+ logger.debug " line2: >#{line}<"
121
+
122
+ if person_key.nil?
123
+ ## no person match found; try auto-add person
124
+ logger.info " !! no player match found; try auto-create player"
125
+
126
+ buf = line.clone
127
+ # remove (single match) if line starts w/ - (allow spaces) e.g. | - or |- note: must start line e.g. anchor ^ used
128
+ buf = buf.sub( /^[ ]*-[ ]*/, '' ) # remove leading dash - for jersey number n/a
129
+ buf = buf.gsub( /\[[^\]]+\]/, '' ) # remove [POS] or similar
130
+ buf = buf.sub( '(c)', '' ) # remove captain marker
131
+ buf = buf.sub( '(vc)', '' ) # remove vice-captain marker
132
+ ### note: uses sub; assumes one pos marker per line
133
+ buf = buf.sub( /\b(GK|DF|MF|FW)\b/, '' ) # remove position marker
134
+ # since year/date e.g. 2011- assume one per line
135
+ # note: use (?= |$) lookahead e.g. must be followed by space or end-of-line
136
+ buf = buf.sub( /\b\d{4}-?(?= |$)/, '' )
137
+ buf = buf.strip # remove leading and trailing spaces
138
+
139
+ ## assume what's left is player name
140
+ logger.info " player_name >#{buf}<"
141
+
142
+ ## fix: add auto flag (for auto-created persons/players)
143
+ ## fix: move title_to_key logic to person model etc.
144
+ person_attribs = {
145
+ key: TextUtils.title_to_key( buf ),
146
+ title: buf
147
+ }
148
+
149
+ # note: add country from team or nationality marker
150
+ if country
151
+ person_attribs[ :country_id ] = country.id
152
+ person_attribs[ :nationality_id ] = country.id
153
+ end
154
+
155
+ logger.info " using attribs: #{person_attribs.inspect}"
156
+
157
+ person = Person.create!( person_attribs )
158
+ else
159
+ person = Person.find_by_key( person_key )
160
+
161
+ if person.nil?
162
+ logger.error " !!!!!! no mapping found for player in line >#{line}< for team #{@team.code} - #{@team.title}"
163
+ next ## skip further processing of line; can NOT save w/o person; continue w/ next record
164
+ end
165
+ end
166
+
167
+
168
+ ### check if roster record exists
169
+ roster = Roster.find_by_event_id_and_team_id_and_person_id( @event.id, @team.id, person.id )
170
+
171
+ if roster.present?
172
+ logger.debug "update Roster #{roster.id}:"
173
+ else
174
+ logger.debug "create Roster:"
175
+ roster = Roster.new
176
+ end
177
+
178
+ roster_attribs = {
179
+ pos: pos,
180
+ person_id: person.id,
181
+ team_id: @team.id,
182
+ event_id: @event.id # NB: reuse/fallthrough from races - make sure load_races goes first (to setup event)
183
+ }
184
+
185
+ logger.debug roster_attribs.to_json
186
+
187
+ roster.update_attributes!( roster_attribs )
188
+ end # lines.each
189
+
190
+ end # method read_worker
191
+
192
+
193
+ end # class ClubSquadReader
194
+ end # module SportDb
@@ -1,13 +1,11 @@
1
1
  # encoding: UTF-8
2
2
 
3
- ### fix: change/rename file to squads.rb !!!
4
-
5
3
 
6
4
  module SportDb
7
5
 
8
6
  ### squad/roster reader for national teams for now
9
7
 
10
- class SquadReader
8
+ class NationalTeamSquadReader
11
9
 
12
10
  include LogUtils::Logging
13
11
 
@@ -165,5 +163,5 @@ class SquadReader
165
163
  end # method read_worker
166
164
 
167
165
 
168
- end # class SquadReader
166
+ end # class NationTeamSquadReader
169
167
  end # module SportDb
@@ -16,15 +16,51 @@ module SportDb
16
16
 
17
17
  def cut_off_end_of_line_comment!( line )
18
18
  # cut off (that is, remove) optional end of line comment starting w/ #
19
-
19
+
20
20
  line.sub!( /#.*$/ ) do |_|
21
21
  logger.debug " cutting off end of line comment - >>#{$&}<<"
22
22
  ''
23
23
  end
24
-
24
+
25
25
  # NB: line = line.sub will NOT work - thus, lets use line.sub!
26
26
  end
27
27
 
28
+
29
+ def find_nationality!( line )
30
+ # extract optional nationality - three-letter country code from line e.g. Lionel Messi (ARG)
31
+ # and return it
32
+ # NB: side effect - removes num from line string
33
+
34
+ regex = /\(([A-Z]{3})\)/ # e.g. (ARG)
35
+ if line =~ regex
36
+ logger.debug " nationality: >#{$1}<"
37
+
38
+ line.sub!( regex, '[NATIONALITY]' )
39
+ return $1.to_s
40
+ else
41
+ return nil
42
+ end
43
+ end
44
+
45
+
46
+ def find_leading_num!( line )
47
+ # extract optional leading num from line e.g. 9 Lionel Messi
48
+ # and return it
49
+ # NB: side effect - removes num from line string
50
+
51
+ # e.g. 9 Lionel Messi - must start line
52
+ ## note: use lookahead (?=) for trailing spaces - do NOT cosume
53
+ regex = /^[ \t]*(\d{1,3})(?=[ \t]+)/
54
+ if line =~ regex
55
+ logger.debug " num: >#{$1}<"
56
+
57
+ line.sub!( regex, '[NUM]' )
58
+ return $1.to_i
59
+ else
60
+ return nil
61
+ end
62
+ end
63
+
28
64
  def find_leading_pos!( line )
29
65
  # extract optional game pos from line
30
66
  # and return it
@@ -9,17 +9,33 @@ module SportDb
9
9
  end
10
10
 
11
11
  ## todo/fix: pass in known_grounds as a parameter? why? why not?
12
- def map_ground!( line )
13
- TextUtils.map_titles_for!( 'ground', line, @known_grounds )
12
+ ### todo/fix:
13
+ ## remove =nil in para - make param required w/o fallback
14
+
15
+ def map_ground!( line, known_grounds=nil )
16
+ if known_grounds.nil?
17
+ puts "depreciated API call map_ground! (pass in mapping table as 2nd param)"
18
+ known_grounds = @known_grounds
19
+ end
20
+
21
+ TextUtils.map_titles_for!( 'ground', line, known_grounds )
14
22
  end
15
23
 
16
24
 
25
+
17
26
  def find_person!( line )
18
27
  TextUtils.find_key_for!( 'person', line )
19
28
  end
20
29
 
21
- def map_person!( line )
22
- TextUtils.map_titles_for!( 'person', line, @known_persons)
30
+ ### todo/fix:
31
+ ## remove =nil in para - make param required w/o fallback
32
+ def map_person!( line, known_persons=nil )
33
+ if known_persons.nil?
34
+ puts "depreciated API call map_person! (pass in mapping table as 2nd param)"
35
+ known_persons = @known_persons
36
+ end
37
+
38
+ TextUtils.map_titles_for!( 'person', line, known_persons )
23
39
  end
24
40
 
25
41
 
@@ -3,7 +3,7 @@ module SportDb
3
3
 
4
4
  MAJOR = 1 ## todo: namespace inside version or something - why? why not??
5
5
  MINOR = 9
6
- PATCH = 7
6
+ PATCH = 8
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
9
9
  def self.version
@@ -0,0 +1,40 @@
1
+ #################
2
+ # Austria Wien
3
+
4
+ #
5
+ # sources:
6
+ # de.wikipedia.org/wiki/FK_Austria_Wien#Bundesligamannschaft
7
+
8
+
9
+ 13 Heinz Lindner GK 2009- ## AKA Austria Wien
10
+ 31 Osman Hadzikić (BIH) GK 2014- ## Schwechat
11
+ 77 Tino Casali GK 2014- ## AKA Kärnten
12
+
13
+ 4 Vanče Šikov (MKD) DF 2014- ## Volyn Lutsk
14
+ 5 Philipp Koblischek DF 2014- ## Austria Amat.
15
+ 8 Jens Stryger Larsen (DEN) DF 2014- ## FC Nordsjælland
16
+ 14 Manuel Ortlechner DF 2009- ## Austria Kärnten
17
+ 15 Christian Ramsebner DF 2013- ## Wr Neustadt
18
+ 18 Sebastian Wimmer DF 2014- ## LASK Linz
19
+ 29 Markus Suttner DF 2008- ## Austria Amat.
20
+ 30 Fabian Koch DF 2011- ## Wacker Innsbruck
21
+ 39 Petar Gluhaković DF ## First Vienna -- check missing ???????
22
+
23
+ 6 Mario Leitgeb MF 2014- ## Grödig
24
+ 7 Marco Meilinger MF 2014- ## RB Salzburg
25
+ 10 Alexander Grünwald MF 2011- ## Wr Neustadt
26
+ 17 Florian Mader MF 2010- ## SV Ried
27
+ 20 Alexander Gorgon MF 2010- ## Austria Amat.
28
+ 21 Sascha Horvath MF 2013- ## Austria Amat.
29
+ 22 Bernhard Luxbacher MF 2013- ## Stadlau
30
+ 23 David de Paula (ESP) MF 2014- ## Wolfsberger AC
31
+ 25 James Holland (AUS) MF 2012- ## AZ Alkmaar
32
+ 28 Daniel Royer MF 2013- ## Hannover 96 -- check -- 1. FC Köln ??
33
+ 34 Peter Michorl MF 2014- ## Austria Amat.
34
+ 35 Thomas Salamon MF 2014- ## SV Grödig
35
+ 36 Tarkan Serbest MF ## Donau -- check missing ???????
36
+
37
+ 9 Martin Harrer FW 2014- ## Köflach -- check SCR Altach
38
+ 11 Ola Kamara (NOR) FW 2014- ## SV Ried -- check Strömsgodset IF
39
+ 24 Roman Kienast FW 2012- ## Sturm Graz
40
+
@@ -0,0 +1,35 @@
1
+ #############################
2
+ # FC RB Salzburg
3
+
4
+
5
+ 31 Péter Gulácsi (HUN) GK 2013- ## Liverpool
6
+ 33 Alexander Walke (GER) GK 2011- ## Hansa Rostock
7
+ 40 Fabian Bredlow (GER) GK 2014- ## RB Leipzig
8
+
9
+ 2 Benno Schmitz (GER) DF 2014- ## Bayern München
10
+ 4 Peter Ankersen (DEN) DF 2014- ## Esbjerg Esbjerg
11
+ 5 André Ramalho (BRA) DF 2011- ## RB Brasil
12
+ 6 Christian Schwegler (SUI) DF 2009- ## Young Boys
13
+ 15 Franz Schiemer DF 2009- ## Austria Vienna
14
+ 17 Andreas Ulmer DF 2009- ## SV Ried
15
+ 25 Isaac Vorsah (GHA) DF 2012- ## 1899 Hoffenheim
16
+ 28 Asger Sørensen (DEN) DF 2014- ## FC Midtjylland
17
+ 29 Rodnei (BRA) DF 2012- ## Kaiserslautern
18
+ 36 Martin Hinteregger DF 2010- ## RB Juniors
19
+
20
+ 10 Sadio Mané (SEN) MF 2012- ## Metz ## check not FW ???
21
+ 13 Stefan Ilsanker MF 2012- ## Mattersburg
22
+ 14 Valon Berisha (NOR) MF 2012- ## Viking
23
+ 21 Taxiarchis Fountas (GRE) MF 2013- ## AEK
24
+ 24 Christoph Leitgeb MF 2007- ## Sturm Graz
25
+ 30 Jodel Dossou (BEN) MF ## Club Africain -- check missing ??
26
+ 37 Valentino Lazaro MF 2012- ## Grazer AK
27
+ 44 Kevin Kampl (SVN) MF 2012- ## VfR Aalen
28
+ 77 Massimo Bruno (BEL) MF 2014- ## RSC Anderlecht
29
+
30
+ 7 Marcel Sabitzer FW 2014- ## RB Leipzig
31
+ 19 Yordi Reyna (PER) FW ## Alianza Lima -- check missing ??
32
+ 23 Robert Žulj FW ## SV Ried -- check missing ??
33
+ 26 Jonathan Soriano (ESP) FW 2012- ## Barcelona B
34
+ 27 Alan (BRA) FW 2010- ## Fluminense
35
+
@@ -0,0 +1,45 @@
1
+ ###################################
2
+ # Austria / Österreich
3
+
4
+
5
+ ### GK Goalkeepers
6
+
7
+ Heinz Lindner, 8 Jan 1988
8
+ Tino Casali, 8 Jan 1988
9
+
10
+ ### DF Defenders
11
+
12
+ Philipp Koblischek, 8 Jan 1988
13
+ Manuel Ortlechner, 8 Jan 1988
14
+ Christian Ramsebner, 8 Jan 1988
15
+ Sebastian Wimmer, 8 Jan 1988
16
+ Markus Suttner, 8 Jan 1988
17
+ Fabian Koch, 8 Jan 1988
18
+ Petar Gluhakovićsing, 8 Jan 1988
19
+ Franz Schiemer, 8 Jan 1988
20
+ Andreas Ulmer, 8 Jan 1988
21
+ Martin Hinteregger, 8 Jan 1988
22
+
23
+ ### MF Midfielders
24
+
25
+ Mario Leitgeb, 8 Jan 1988
26
+ Marco Meilinger, 8 Jan 1988
27
+ Alexander Grünwald, 8 Jan 1988
28
+ Florian Mader, 8 Jan 1988
29
+ Alexander Gorgon, 8 Jan 1988
30
+ Sascha Horvath, 8 Jan 1988
31
+ Bernhard Luxbacher, 8 Jan 1988
32
+ Daniel Royer, 8 Jan 1988
33
+ Peter Michorl, 8 Jan 1988
34
+ Thomas Salamon, 8 Jan 1988
35
+ Tarkan Serbest, 8 Jan 1988
36
+ Stefan Ilsanker, 8 Jan 1988
37
+ Christoph Leitgeb, 8 Jan 1988
38
+ Valentino Lazaro, 8 Jan 1988
39
+
40
+ ### FM Forwards
41
+
42
+ Martin Harrer, 8 Jan 1988
43
+ Roman Kienast, 8 Jan 1988
44
+ Marcel Sabitzer, 8 Jan 1988
45
+ Robert Žulj, 8 Jan 1988
@@ -45,14 +45,15 @@ AlltimeStandingEntry = SportDb::Model::AlltimeStandingEntry
45
45
  ####################
46
46
  # Reader shortcuts
47
47
 
48
- Reader = SportDb::Reader
49
- TeamReader = SportDb::TeamReader
50
- AssocReader = SportDb::AssocReader
51
- SeasonReader = SportDb::SeasonReader
52
- LeagueReader = SportDb::LeagueReader
53
- EventReader = SportDb::EventReader
54
- GameReader = SportDb::GameReader
55
- SquadReader = SportDb::SquadReader
48
+ Reader = SportDb::Reader
49
+ TeamReader = SportDb::TeamReader
50
+ AssocReader = SportDb::AssocReader
51
+ SeasonReader = SportDb::SeasonReader
52
+ LeagueReader = SportDb::LeagueReader
53
+ EventReader = SportDb::EventReader
54
+ GameReader = SportDb::GameReader
55
+ NationalTeamSquadReader = SportDb::NationalTeamSquadReader
56
+ ClubSquadReader = SportDb::ClubSquadReader
56
57
 
57
58
  ## moved to racing.db - remove/delete!!
58
59
  ## RaceTeamReader = SportDb::RaceTeamReader
@@ -0,0 +1,76 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_squad_club_reader.rb
6
+ # or better
7
+ # rake -I ./lib test
8
+
9
+
10
+ require 'helper'
11
+
12
+ class TestSquadClubReader < MiniTest::Unit::TestCase
13
+
14
+ def setup
15
+ WorldDb.delete!
16
+ SportDb.delete!
17
+ PersonDb.delete!
18
+
19
+ add_bl
20
+ end
21
+
22
+ def add_bl
23
+ SportDb.read_builtin # add 2013/14 season
24
+
25
+ at = Country.create!( key: 'at', name: 'Austria', code: 'AUT', pop: 1, area: 1)
26
+
27
+ teamreader = TeamReader.new( SportDb.test_data_path )
28
+ teamreader.read( 'at-austria/teams', country_id: at.id )
29
+
30
+ leaguereader = LeagueReader.new( SportDb.test_data_path )
31
+ leaguereader.read( 'at-austria/leagues', country_id: at.id )
32
+
33
+ gamereader = GameReader.new( SportDb.test_data_path )
34
+ ## check/fix: is country_id more_attribs needed? why? why not?
35
+ gamereader.read( 'at-austria/2013_14/bl', country_id: at.id )
36
+
37
+ bl = Event.find_by_key!( 'at.2013/14' )
38
+
39
+ assert_equal 10, bl.teams.count
40
+ assert_equal 36, bl.rounds.count
41
+ assert_equal 180, bl.games.count # 36x5 = 180
42
+
43
+ ## add players
44
+ ## -- read persons
45
+ personreader = PersonReader.new( SportDb.test_data_path )
46
+ personreader.read( 'players/europe/at-austria/players', country_id: at.id )
47
+
48
+ assert_equal 30, Person.count
49
+ end
50
+
51
+
52
+ def test_austria
53
+ austria = Team.find_by_key!( 'austria' )
54
+
55
+ event = Event.find_by_key!( 'at.2013/14' )
56
+
57
+ reader = ClubSquadReader.new( SportDb.test_data_path )
58
+ reader.read( 'at-austria/2013_14/squads/austria', team_id: austria.id, event_id: event.id )
59
+
60
+ assert_equal 28, Roster.count
61
+ end # method test_br
62
+
63
+
64
+ def test_salzburg
65
+ salzburg = Team.find_by_key!( 'salzburg' )
66
+
67
+ event = Event.find_by_key!( 'at.2013/14' )
68
+
69
+ reader = ClubSquadReader.new( SportDb.test_data_path )
70
+ reader.read( 'at-austria/2013_14/squads/salzburg', team_id: salzburg.id, event_id: event.id )
71
+
72
+ assert_equal 27, Roster.count
73
+ end # method test_salzburg
74
+
75
+
76
+ end # class TestSquadClubReader
@@ -2,14 +2,14 @@
2
2
 
3
3
  ###
4
4
  # to run use
5
- # ruby -I ./lib -I ./test test/test_squad_reader.rb
5
+ # ruby -I ./lib -I ./test test/test_squad_national_team_reader.rb
6
6
  # or better
7
7
  # rake -I ./lib test
8
8
 
9
9
 
10
10
  require 'helper'
11
11
 
12
- class TestSquadReader < MiniTest::Unit::TestCase
12
+ class TestSquadNationalTeamReader < MiniTest::Unit::TestCase
13
13
 
14
14
  def setup
15
15
  WorldDb.delete!
@@ -50,7 +50,7 @@ class TestSquadReader < MiniTest::Unit::TestCase
50
50
 
51
51
  event = Event.find_by_key!( 'world.2014' )
52
52
 
53
- reader = SquadReader.new( SportDb.test_data_path )
53
+ reader = NationalTeamSquadReader.new( SportDb.test_data_path )
54
54
  reader.read( 'world-cup/2014/squads/br-brazil', team_id: bra.id, event_id: event.id )
55
55
 
56
56
  assert_equal 23, Roster.count
@@ -70,7 +70,7 @@ class TestSquadReader < MiniTest::Unit::TestCase
70
70
 
71
71
  event = Event.find_by_key!( 'world.2014' )
72
72
 
73
- reader = SquadReader.new( SportDb.test_data_path )
73
+ reader = NationalTeamSquadReader.new( SportDb.test_data_path )
74
74
  reader.read( 'world-cup/2014/squads/de-deutschland', team_id: ger.id, event_id: event.id )
75
75
 
76
76
  assert_equal 3, Roster.count
@@ -87,7 +87,7 @@ class TestSquadReader < MiniTest::Unit::TestCase
87
87
 
88
88
  event = Event.find_by_key!( 'world.2014' )
89
89
 
90
- reader = SquadReader.new( SportDb.test_data_path )
90
+ reader = NationalTeamSquadReader.new( SportDb.test_data_path )
91
91
  reader.read( 'world-cup/2014/squads/uy-uruguay', team_id: uru.id, event_id: event.id )
92
92
 
93
93
  assert_equal 23, Roster.count
@@ -105,7 +105,7 @@ class TestSquadReader < MiniTest::Unit::TestCase
105
105
 
106
106
  event = Event.find_by_key!( 'world.2014' )
107
107
 
108
- reader = SquadReader.new( SportDb.test_data_path )
108
+ reader = NationalTeamSquadReader.new( SportDb.test_data_path )
109
109
  reader.read( 'world-cup/2014/squads/jp-japan', team_id: jpn.id, event_id: event.id )
110
110
 
111
111
  assert_equal 23, Roster.count
@@ -113,4 +113,4 @@ class TestSquadReader < MiniTest::Unit::TestCase
113
113
  end # method test_jp
114
114
 
115
115
 
116
- end # class TestSquadReader
116
+ end # class TestSquadNationalTeamReader
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.7
4
+ version: 1.9.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-07 00:00:00.000000000 Z
12
+ date: 2014-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: props
16
- requirement: &77817680 !ruby/object:Gem::Requirement
16
+ requirement: &76904160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *77817680
24
+ version_requirements: *76904160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: logutils
27
- requirement: &77813970 !ruby/object:Gem::Requirement
27
+ requirement: &76903770 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *77813970
35
+ version_requirements: *76903770
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: textutils
38
- requirement: &77813710 !ruby/object:Gem::Requirement
38
+ requirement: &76902910 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *77813710
46
+ version_requirements: *76902910
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: worlddb
49
- requirement: &77813330 !ruby/object:Gem::Requirement
49
+ requirement: &76902380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.0.2
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *77813330
57
+ version_requirements: *76902380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: tagutils
60
- requirement: &77813120 !ruby/object:Gem::Requirement
60
+ requirement: &76902160 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *77813120
68
+ version_requirements: *76902160
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: persondb
71
- requirement: &77812860 !ruby/object:Gem::Requirement
71
+ requirement: &76901930 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *77812860
79
+ version_requirements: *76901930
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: activerecord-utils
82
- requirement: &77812640 !ruby/object:Gem::Requirement
82
+ requirement: &76901680 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *77812640
90
+ version_requirements: *76901680
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: fetcher
93
- requirement: &77812360 !ruby/object:Gem::Requirement
93
+ requirement: &76901360 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0.3'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *77812360
101
+ version_requirements: *76901360
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: sportdb-keys
104
- requirement: &77812160 !ruby/object:Gem::Requirement
104
+ requirement: &76901140 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *77812160
112
+ version_requirements: *76901140
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: sportdb-console
115
- requirement: &77811880 !ruby/object:Gem::Requirement
115
+ requirement: &76900930 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *77811880
123
+ version_requirements: *76900930
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: sportdb-update
126
- requirement: &77811590 !ruby/object:Gem::Requirement
126
+ requirement: &76900490 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *77811590
134
+ version_requirements: *76900490
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: sportdb-service
137
- requirement: &77811170 !ruby/object:Gem::Requirement
137
+ requirement: &76900190 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :runtime
144
144
  prerelease: false
145
- version_requirements: *77811170
145
+ version_requirements: *76900190
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: gli
148
- requirement: &77810710 !ruby/object:Gem::Requirement
148
+ requirement: &76899670 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: 2.5.6
154
154
  type: :runtime
155
155
  prerelease: false
156
- version_requirements: *77810710
156
+ version_requirements: *76899670
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: activerecord
159
- requirement: &77809990 !ruby/object:Gem::Requirement
159
+ requirement: &76899430 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: '0'
165
165
  type: :runtime
166
166
  prerelease: false
167
- version_requirements: *77809990
167
+ version_requirements: *76899430
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: rdoc
170
- requirement: &77809630 !ruby/object:Gem::Requirement
170
+ requirement: &76898960 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ~>
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '4.0'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *77809630
178
+ version_requirements: *76898960
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: hoe
181
- requirement: &77809350 !ruby/object:Gem::Requirement
181
+ requirement: &76887310 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ~>
@@ -186,7 +186,7 @@ dependencies:
186
186
  version: '3.12'
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *77809350
189
+ version_requirements: *76887310
190
190
  description: sportdb - sport.db command line tool
191
191
  email: opensport@googlegroups.com
192
192
  executables:
@@ -259,7 +259,8 @@ files:
259
259
  - lib/sportdb/readers/ground.rb
260
260
  - lib/sportdb/readers/league.rb
261
261
  - lib/sportdb/readers/season.rb
262
- - lib/sportdb/readers/squad.rb
262
+ - lib/sportdb/readers/squad_club.rb
263
+ - lib/sportdb/readers/squad_national_team.rb
263
264
  - lib/sportdb/readers/team.rb
264
265
  - lib/sportdb/schema.rb
265
266
  - lib/sportdb/standings.rb
@@ -278,6 +279,8 @@ files:
278
279
  - test/data/at-austria/2013_14/bl_ii.txt
279
280
  - test/data/at-austria/2013_14/el.txt
280
281
  - test/data/at-austria/2013_14/el.yml
282
+ - test/data/at-austria/2013_14/squads/austria.txt
283
+ - test/data/at-austria/2013_14/squads/salzburg.txt
281
284
  - test/data/at-austria/leagues.txt
282
285
  - test/data/at-austria/teams.txt
283
286
  - test/data/at-austria/teams_2.txt
@@ -287,6 +290,7 @@ files:
287
290
  - test/data/national-teams/north-america/assocs.txt
288
291
  - test/data/national-teams/north-america/teams.txt
289
292
  - test/data/national-teams/teams.txt
293
+ - test/data/players/europe/at-austria/players.txt
290
294
  - test/data/players/europe/de-deutschland/players.txt
291
295
  - test/data/players/south-america/br-brazil/players.txt
292
296
  - test/data/world-cup/1930/cup.txt
@@ -330,7 +334,8 @@ files:
330
334
  - test/test_round_def.rb
331
335
  - test/test_round_header.rb
332
336
  - test/test_scores.rb
333
- - test/test_squad_reader.rb
337
+ - test/test_squad_club_reader.rb
338
+ - test/test_squad_national_team_reader.rb
334
339
  - test/test_standings.rb
335
340
  - test/test_standings_ii.rb
336
341
  - test/test_utils.rb
@@ -379,16 +384,17 @@ test_files:
379
384
  - test/test_load.rb
380
385
  - test/test_cursor.rb
381
386
  - test/test_standings.rb
387
+ - test/test_squad_club_reader.rb
382
388
  - test/test_scores.rb
383
389
  - test/test_winner.rb
384
390
  - test/test_standings_ii.rb
385
391
  - test/test_round_def.rb
386
392
  - test/test_utils.rb
387
- - test/test_squad_reader.rb
388
393
  - test/test_reader_from_string.rb
389
394
  - test/test_round_header.rb
390
395
  - test/test_round_auto.rb
391
396
  - test/test_goals.rb
397
+ - test/test_squad_national_team_reader.rb
392
398
  - test/test_reader.rb
393
399
  - test/test_assoc_reader.rb
394
400
  - test/test_changes.rb