sportdb-models 1.15.1 → 1.15.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98fbd2db0f79206ed3154c7ce08822218cea175c
4
- data.tar.gz: 199637ebcaa4e7fa0477c2eb412400c8303a5c6d
3
+ metadata.gz: 8297074a244e15a0faa0e79815af71b73c93ea68
4
+ data.tar.gz: 3b74416dac9a999b96998f8f34f3240fe14038ee
5
5
  SHA512:
6
- metadata.gz: 8d0392d3701140c5af5495115eb0836931f378a0b9e30b33afe8281ceb66dc948176dd89ddf0dd3fbc1d3c255ce49781c4d5335c5988f2187a8ed65fd8db0f29
7
- data.tar.gz: 6d087ae871a039444129dbc40afa3c0da415539d5a741cea95acd7117e6421adec737adf97f5ac7549f103f8d02d0f7356a9a4c869318cb4d04ed2ef0fa205fe
6
+ metadata.gz: 1a43679c3e1444aef940475e28ba250a98d2f25146a819d373fc5e7c8a87c2358cf1246548661b000a26251158597f4b91d8b47148018fde684091f2be829be9
7
+ data.tar.gz: 1b244eeaab111bcfb6e5fcbf3c74b587494425dddce4370f30b74449e68c815d4eebe318a208fafe21b479cd4457af5c1a3085ddc6009daaede7eea2a622168b
data/Manifest.txt CHANGED
@@ -58,6 +58,7 @@ lib/sportdb/reader_file.rb
58
58
  lib/sportdb/reader_zip.rb
59
59
  lib/sportdb/readers/assoc.rb
60
60
  lib/sportdb/readers/event.rb
61
+ lib/sportdb/readers/event_table.rb
61
62
  lib/sportdb/readers/game.rb
62
63
  lib/sportdb/readers/ground.rb
63
64
  lib/sportdb/readers/league.rb
@@ -87,7 +88,9 @@ test/data/at-austria/2013_14/squads/austria.txt
87
88
  test/data/at-austria/2013_14/squads/salzburg.txt
88
89
  test/data/at-austria/2014_15/1-bundesliga-ii.txt
89
90
  test/data/at-austria/2014_15/1-bundesliga.yml
91
+ test/data/at-austria/2015_16/1-bundesliga-v2.conf.txt
90
92
  test/data/at-austria/2015_16/1-bundesliga-v2.yml
93
+ test/data/at-austria/2015_16/1-bundesliga.conf.txt
91
94
  test/data/at-austria/2015_16/1-bundesliga.yml
92
95
  test/data/at-austria/2015_16/cup.yml
93
96
  test/data/at-austria/leagues.txt
@@ -142,6 +145,7 @@ test/test_csv_reader.rb
142
145
  test/test_cursor.rb
143
146
  test/test_date.rb
144
147
  test/test_event_reader.rb
148
+ test/test_event_table_reader.rb
145
149
  test/test_goals.rb
146
150
  test/test_lang.rb
147
151
  test/test_load.rb
@@ -71,7 +71,8 @@ require 'sportdb/mapper_teams'
71
71
  require 'sportdb/finders/goals' # no: requires FixturesHelpers
72
72
 
73
73
  require 'sportdb/readers/assoc'
74
- require 'sportdb/readers/event'
74
+ require 'sportdb/readers/event' ## old event reader (remove later??)
75
+ require 'sportdb/readers/event_table' ## new "standard" event reader
75
76
  require 'sportdb/readers/game'
76
77
  require 'sportdb/readers/ground'
77
78
  require 'sportdb/readers/league'
@@ -0,0 +1,188 @@
1
+ # encoding: UTF-8
2
+
3
+ module SportDb
4
+
5
+
6
+ class EventTableReader
7
+
8
+ include LogUtils::Logging
9
+
10
+ ## make models available by default with namespace
11
+ # e.g. lets you use Usage instead of Model::Usage
12
+ include Models
13
+
14
+ attr_reader :event # returns event record; call read first
15
+
16
+
17
+ ## todo/fix: add from_zip()
18
+
19
+ def self.from_file( path, more_attribs={} )
20
+ ## note: assume/enfore utf-8 encoding (with or without BOM - byte order mark)
21
+ ## - see textutils/utils.rb
22
+ text = File.read_utf8( path )
23
+
24
+ self.from_string( text, more_attribs )
25
+ end
26
+
27
+ def self.from_string( text, more_attribs={} )
28
+ self.new( text, more_attribs )
29
+ end
30
+
31
+ def initialize( text, more_attribs={} )
32
+ ## todo/fix: how to add opts={} ???
33
+ @text = text
34
+ @more_attribs = more_attribs
35
+
36
+ @event = nil
37
+ end
38
+
39
+
40
+ ## split into league + season
41
+ ## e.g. Österr. Bundesliga 2015/16
42
+ ## World Cup 2018
43
+ EVENT_HEADER_REGEX = /^
44
+ (?<league>.+?) ## non-greedy
45
+ \s
46
+ (?<season>\d{4}
47
+ (?:\/\d{2})? ## optional 2nd date in season
48
+ )
49
+ $/x
50
+
51
+ def read
52
+ @event = nil # reset cached event rec
53
+ event_attribs={}
54
+
55
+ reader = LineReader.from_string( @text )
56
+
57
+ header = false
58
+ season = nil
59
+ league = nil
60
+
61
+ reader.each_line do |line|
62
+ puts " line: >#{line}<"
63
+
64
+ ## assume first line is event header (league+season)
65
+ ## e.g. Österr. Bundesliga 2015/16
66
+ ## World Cup 2018
67
+ if header == false
68
+ line = line.strip
69
+ m = EVENT_HEADER_REGEX.match( line )
70
+ if m
71
+ league_title = m[:league]
72
+ season_key = m[:season]
73
+ puts " trying event lookup - league: >#{league_title}<, season: >#{season_key}<"
74
+
75
+ season = Season.find_by( key: season_key )
76
+
77
+ ## check if it exists
78
+ if season.present?
79
+ event_attribs['season_id'] = season.id
80
+ else
81
+ logger.error "season with key >>#{season_key}<< missing"
82
+ exit 1
83
+ end
84
+
85
+ league = League.find_by( title: league_title )
86
+
87
+ ## check if it exists
88
+ if league.present? ## todo: just use if league (no present?) ???
89
+ event_attribs['league_id'] = league.id
90
+ else
91
+ logger.error "league with title >>#{league_title}<< missing"
92
+ exit 1
93
+ end
94
+ else
95
+ fail "[EventTableReader] event header must match league+season pattern: >#{line}<"
96
+ end
97
+ header = true
98
+ else
99
+ ### process regular team lines
100
+
101
+ line = line.strip
102
+ scan = StringScanner.new( line )
103
+
104
+ if scan.check( /-/ ) # option 1) list entry e.g. - Rapid Wien
105
+ puts " list entry >#{line}<"
106
+ scan.skip( /-\s+/)
107
+ team_title = scan.rest.strip ## assume the rest is the team name
108
+ elsif scan.check( /\d{1,2}\./ ) ## option 2) table entry e.g. 1. Rapid Wien
109
+ puts " table entry >#{line}<"
110
+ rank = scan.scan( /\d{1,2}/ )
111
+ scan.skip( /\.\s+/)
112
+
113
+ ## note: uses look ahead scan until we hit at least two spaces
114
+ ## or the end of string (standing records for now optional)
115
+ team_title = scan.scan_until( /(?=\s{2})|$/ )
116
+ if scan.eos?
117
+ standing = nil
118
+ else
119
+ scan.skip( /\s+/ )
120
+ standing = scan.rest
121
+ end
122
+ puts " rank: >#{rank}<, standing: >#{standing}<"
123
+ else
124
+ fail "[EventTableReader] event line must match team pattern: >#{line}<"
125
+ end
126
+
127
+ puts " team: >#{team_title}<"
128
+
129
+ team = Team.find_by( title: team_title )
130
+ ## next try synonyms (if not found/no match)
131
+ team = Team.where( "synonyms LIKE ?", "%#{team_title}%" ).first if team.nil?
132
+
133
+
134
+ if team.nil?
135
+ ### print better error message than just
136
+ ## *** error: Couldn't find SportDb::Model::Team
137
+ puts "[fatal] event reader - record for team title >#{team_title}< not found"
138
+ exit 1
139
+ ### fix/todo: throw exception/error
140
+ end
141
+
142
+ team_ids = event_attribs['team_ids'] || []
143
+ team_ids << team.id
144
+ event_attribs['team_ids'] = team_ids
145
+ end
146
+ end # each_line
147
+
148
+ pp event_attribs
149
+
150
+
151
+ league_id = event_attribs['league_id']
152
+ season_id = event_attribs['season_id']
153
+
154
+ logger.debug "find event - league_id: #{league_id}, season_id: #{season_id}"
155
+
156
+ event = Event.find_by( league_id: league_id,
157
+ season_id: season_id )
158
+
159
+ ## check if it exists
160
+ if event.present?
161
+ logger.debug "*** update event #{event.id}-#{event.key}:"
162
+ else
163
+ logger.debug "*** create event:"
164
+ event = Event.new
165
+
166
+ ## hack: fix/todo1!!
167
+ ## add "fake" start_at date for now
168
+ if season.key.size == '4' ## e.g. assume 2018 etc.
169
+ year = season.key.to_i
170
+ start_at = Date.new( year, 1, 1 )
171
+ else ## assume 2014/15 etc.
172
+ year = season.key[0..3].to_i
173
+ start_at = Date.new( year, 7, 1 )
174
+ end
175
+ event_attribs['start_at'] = start_at
176
+ end
177
+
178
+ logger.debug event_attribs.to_json
179
+
180
+ event.update_attributes!( event_attribs )
181
+
182
+ # keep a cached reference for later use
183
+ @event = event
184
+ end # method read
185
+
186
+
187
+ end # class EventTableReader
188
+ end # module SportDb
@@ -4,7 +4,7 @@ module SportDb
4
4
 
5
5
  MAJOR = 1 ## todo: namespace inside version or something - why? why not??
6
6
  MINOR = 15
7
- PATCH = 1
7
+ PATCH = 2
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
10
10
  def self.version
@@ -0,0 +1,20 @@
1
+ #########################################################################
2
+ # Österreichische Bundesliga 2015/16 (104. Meisterschaft / 42. Saison)
3
+ #
4
+ # Start Date: 2015-07-25
5
+ # 10 Teams
6
+
7
+
8
+ Österr. Bundesliga 2015/16 ## No. 42
9
+
10
+ 1. RB Salzburg
11
+ 2. Rapid Wien
12
+ 3. Sturm Graz
13
+ 4. Wolfsberger AC
14
+ 5. SV Ried
15
+ 6. Austria Wien
16
+ 7. Admira Wacker
17
+ 8. SCR Altach
18
+ 9. SV Grödig 19 10 12 5 4-4 8 [-2]
19
+ 10. SV Mattersburg 20 11 10 4 5-5 4 ## Aufsteiger
20
+
@@ -0,0 +1,20 @@
1
+ #########################################################################
2
+ # Österreichische Bundesliga 2015/16 (104. Meisterschaft / 42. Saison)
3
+ #
4
+ # Start Date: 2015-07-25
5
+ # 10 Teams
6
+
7
+
8
+ Österr. Bundesliga 2015/16
9
+
10
+ - RB Salzburg
11
+ - Rapid Wien
12
+ - Sturm Graz
13
+ - Wolfsberger AC
14
+ - SV Ried
15
+ - Austria Wien
16
+ - Admira Wacker
17
+ - SCR Altach
18
+ - SV Grödig
19
+ - SV Mattersburg ## Aufsteiger
20
+
data/test/helper.rb CHANGED
@@ -50,6 +50,7 @@ AssocReader = SportDb::AssocReader
50
50
  SeasonReader = SportDb::SeasonReader
51
51
  LeagueReader = SportDb::LeagueReader
52
52
  EventReader = SportDb::EventReader
53
+ EventTableReader = SportDb::EventTableReader
53
54
  GameReader = SportDb::GameReader
54
55
  NationalTeamSquadReader = SportDb::NationalTeamSquadReader
55
56
  ClubSquadReader = SportDb::ClubSquadReader
@@ -105,6 +106,13 @@ module TestEventReader
105
106
  end
106
107
  end
107
108
 
109
+ module TestEventTableReader
110
+ def self.from_file( name )
111
+ EventTableReader.from_file( "#{SportDb.test_data_path}/#{name}.txt" )
112
+ end
113
+ end
114
+
115
+
108
116
  module TestGameReader
109
117
  ## NOTE: pass in .yml as path (that is, event config!!!!)
110
118
  def self.from_file( name, more_attribs={} )
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_event_table_reader.rb
6
+ # or better
7
+ # rake -I ./lib test
8
+
9
+
10
+ require 'helper'
11
+
12
+ class TestEventTableReaderXX < MiniTest::Test # note: TestEventTableReader alreay defined, thus, add xx
13
+
14
+ def setup
15
+ WorldDb.delete!
16
+ SportDb.delete!
17
+ PersonDb.delete!
18
+
19
+ ## setup österr. bundesliga
20
+ at = Country.create!( key: 'at', name: 'Austria', code: 'AUT', pop: 1, area: 1)
21
+ season = Season.create!( key: '2015/16', title: '2015/16' )
22
+ bl = League.create!( key: 'at', title: 'Österr. Bundesliga', club: true, country_id: at.id )
23
+
24
+ ## read teams (required for db key lookup)
25
+ teamreader = TestTeamReader.from_file( 'at-austria/teams', country_id: at.id )
26
+ teamreader.read
27
+ teamreader = TestTeamReader.from_file( 'at-austria/teams_2', country_id: at.id )
28
+ teamreader.read
29
+ end
30
+
31
+ def test_bl
32
+ r = TestEventTableReader.from_file( 'at-austria/2015_16/1-bundesliga.conf' )
33
+ r.read
34
+
35
+ assert true ## if we get here; assume everything ok
36
+ end
37
+
38
+ def test_bl_v2
39
+ r = TestEventTableReader.from_file( 'at-austria/2015_16/1-bundesliga-v2.conf' )
40
+ r.read
41
+
42
+ assert true ## if we get here; assume everything ok
43
+ end
44
+
45
+
46
+ ### fix/todo:
47
+ ## to be done - add support for Wiener Sportklub (RL Ost) => Wiener Sportklub lookups
48
+ def xxxx_test_cup
49
+ at = Country.create!( key: 'at', name: 'Austria', code: 'AUT', pop: 1, area: 1)
50
+ season = Season.create!( key: '2015/16', title: '2015/16' )
51
+ cup = League.create!( key: 'at.cup', title: 'Cup', club: true, country_id: at.id )
52
+
53
+ r = TestEventReader.from_file( 'at-austria/2015_16/cup' )
54
+ r.read
55
+
56
+ assert true ## if we get here; assume everything ok
57
+ end
58
+
59
+ end # class TestEventReader
60
+
61
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.1
4
+ version: 1.15.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-05 00:00:00.000000000 Z
11
+ date: 2015-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: worlddb-models
@@ -135,6 +135,7 @@ files:
135
135
  - lib/sportdb/reader_zip.rb
136
136
  - lib/sportdb/readers/assoc.rb
137
137
  - lib/sportdb/readers/event.rb
138
+ - lib/sportdb/readers/event_table.rb
138
139
  - lib/sportdb/readers/game.rb
139
140
  - lib/sportdb/readers/ground.rb
140
141
  - lib/sportdb/readers/league.rb
@@ -164,7 +165,9 @@ files:
164
165
  - test/data/at-austria/2013_14/squads/salzburg.txt
165
166
  - test/data/at-austria/2014_15/1-bundesliga-ii.txt
166
167
  - test/data/at-austria/2014_15/1-bundesliga.yml
168
+ - test/data/at-austria/2015_16/1-bundesliga-v2.conf.txt
167
169
  - test/data/at-austria/2015_16/1-bundesliga-v2.yml
170
+ - test/data/at-austria/2015_16/1-bundesliga.conf.txt
168
171
  - test/data/at-austria/2015_16/1-bundesliga.yml
169
172
  - test/data/at-austria/2015_16/cup.yml
170
173
  - test/data/at-austria/leagues.txt
@@ -219,6 +222,7 @@ files:
219
222
  - test/test_cursor.rb
220
223
  - test/test_date.rb
221
224
  - test/test_event_reader.rb
225
+ - test/test_event_table_reader.rb
222
226
  - test/test_goals.rb
223
227
  - test/test_lang.rb
224
228
  - test/test_load.rb