module SportDb
Public Class Methods
handle_csv( source, start: nil )
click to toggle source
helper
move handle_csv somewhere else - why? why not?
# File lib/sportdb/importers.rb, line 45 def self.handle_csv( source, start: nil ) ## todo/fix: (re)use a more generic filter instead of start for start of season only ## todo/fix: use a "generic" filter_season helper for easy reuse ## filter_season( clause, season_key ) ## or better filter = SeasonFilter.new( clause ) ## filter.skip? filter.include? ( season_sason_key )? ## fiteer.before?( season_key ) etc. ## find some good method names!!!! season_start = start ? Season.parse( start ) : nil if source.is_a?( Datafile::DirPackage::Entry) || source.is_a?( Datafile::ZipPackage::Entry) entry = source basename = File.basename( entry.name, File.extname( entry.name ) ) ## get basename WITHOUT extension ## check if basename is all numbers (and _-) e.g. 2020.csv or 20.csv etc. ## if yes, assume "mixed" match datafiles (with many/mixed leagues) if basename =~ /^[0-9_-]+$/ pp [entry.name, basename] CsvMatchImporter.parse( entry.read ) else ## assume "classic" with season league_key = basename ## todo/fix: check if season_key is proper season - e.g. matches pattern !!!! season_q = File.basename( File.dirname( entry.name )) season = Season.parse( season_q ) ## normalize season season_key = season.key if season_start && season_start > season ## skip if start season before this season else pp [entry.name, season_key, league_key] event = CsvEventImporter.parse( entry.read, league: league_key, season: season_key ) puts "added #{event.name} - from source >#{entry.name}<" puts " #{event.teams.size} teams" puts " #{event.matches.size} matches" puts " #{event.rounds.size} rounds" end end else ## assume (string) filepath for now - add more options later on!!!! ## assume single (free-standing) file path = source full_path = File.expand_path( path ) ## resolve/make path absolute ## 1) assume basename is the league key ## 2) assume last directory is the season key basename = File.basename( full_path, File.extname( full_path ) ) ## get basename WITHOUT extension if basename =~ /^[0-9_-]+$/ pp [path, basename] CsvMatchImporter.read( full_path ) else ## assume "classic" with season ## 1) assume basename is the league key ## 2) assume last directory is the season key league_key = basename season_q = File.basename( File.dirname( full_path ) ) season = Season.parse( season_q ) ## normalize season season_key = season.key if season_start && season_start > season ## skip if start season before this season else ## todo/fix: check if season_key is proper season - e.g. matches pattern !!!! pp [path, season_key, league_key] event = CsvEventImporter.read( full_path, league: league_key, season: season_key ) puts "added #{event.name} - from source >#{path}<" puts " #{event.teams.size} teams" puts " #{event.matches.size} matches" puts " #{event.rounds.size} rounds" end end end end
read_csv( path )
click to toggle source
add convenience shortcut helper
# File lib/sportdb/importers.rb, line 31 def self.read_csv( path ) if File.directory?( path ) ## if directory assume "unzipped" package DirPackage.new( path ).read_csv elsif File.file?( path ) && File.extname( path ).downcase == '.zip' ## check if file is a .zip (archive) file ZipPackage.new( path ).read_csv else ## no package; assume single (standalone) datafile ## assume single (free-standing) file handle_csv( path ) end end