lib/sportdb/reader_zip.rb in sportdb-1.9.10 vs lib/sportdb/reader_zip.rb in sportdb-1.9.11

- old
+ new

@@ -3,10 +3,163 @@ module SportDb class ZipReader < ReaderBase + def initialize( name, include_path, opts = {} ) + ## todo/fix: make include_path an opts (included in opts?) - why? why not?? + + path = "#{include_path}/#{name}.zip" + ## todo: check if zip exists + + @zip_file = Zip::File.open( path ) ## NOTE: do NOT create if file is missing; let it crash + + ### allow prefix (path) in name + ### e.g. assume all files relative to setup manifest + ## e.g. at-austria-master/setups/all.txt or + ## be-belgium-master/setups/all.txt + ## for + ## setups/all.txt + ### + ## will get (re)set w/ fixture/setup reader + ## + ## todo/fix: change/rename to @relative_path ?? - why? why not? + @zip_prefix = '' + end + + def close + ## todo/check: add a close method - why? why not ??? + @zip_file.close + end + + + def create_fixture_reader( name ) + ## e.g. pass in => setups/all or setups/test etc. e.g. w/o .txt extension + query = "**/#{name}.txt" + + ## note: returns an array of Zip::Entry + candidates = @zip_file.glob( query ) + pp candidates + + ## use first candidates entry as match + ## todo/fix: issue warning if more than one entries/matches!! + + ## get fullpath e.g. at-austria-master/setups/all.txt + path = candidates[0].name + logger.debug " zip entry path >>#{path}<<" + + ## cut-off at-austria-master/ NOTE: includes trailing slash (if present) + ## logger.debug " path.size #{path.size} >>#{path}<<" + ## logger.debug " name.size #{name.size+4} >>#{name}<<" + + ## note: add +4 for extension (.txt) + @zip_prefix = path[ 0...(path.size-(name.size+4)) ] + logger.debug " zip entry prefix >>#{@zip_prefix}<<" + + logger.info "parsing data in zip '#{name}' (#{path})..." + + FixtureReader.from_zip( @zip_file, path ) + end + + def create_club_squad_reader( name, more_attribs={} ) + path = name_to_zip_entry_path( name ) + + logger.info "parsing data in zip (club squad) '#{name}' (#{path})..." + ClubSquadReader.from_zip( @zip_file, path, more_attribs ) + end + + def create_national_team_squad_reader( name, more_attribs={} ) + path = name_to_zip_entry_path( name ) + + logger.info "parsing data in zip (national team squad) '#{name}' (#{path})..." + NationalTeamSquadReader.from_zip( @zip_file, path, more_attribs ) + end + + def create_season_reader( name ) + path = name_to_zip_entry_path( name ) + + logger.info "parsing data in zip (season) '#{name}' (#{path})..." + SeasonReader.from_zip( @zip_file, path ) + end + + def create_assoc_reader( name ) + path = name_to_zip_entry_path( name ) + + logger.info "parsing data in zip (assoc) '#{name}' (#{path})..." + AssocReader.from_zip( @zip_file, path ) + end + + def create_ground_reader( name, more_attribs={} ) + path = name_to_zip_entry_path( name ) + + logger.info "parsing data in zip (ground) '#{name}' (#{path})..." + GroundReader.from_zip( @zip_file, path, more_attribs ) + end + + def create_league_reader( name, more_attribs={} ) + path = name_to_zip_entry_path( name ) + + logger.info "parsing data in zip (league) '#{name}' (#{path})..." + LeagueReader.from_zip( @zip_file, path, more_attribs ) + end + + def create_team_reader( name, more_attribs={} ) + path = name_to_zip_entry_path( name ) + + logger.info "parsing data in zip (team) '#{name}' (#{path})..." + TeamReader.from_zip( @zip_file, path, more_attribs ) + end + + def create_event_reader( name, more_attribs={} ) + path = name_to_zip_entry_path( name, '.yml' ) ## NOTE: use .yml extension + + logger.info "parsing data in zip (event) '#{name}' (#{path})..." + EventReader.from_zip( @zip_file, path, more_attribs ) + end + + def create_game_reader( name, more_attribs={} ) + ## NOTE: pass in .yml as path (that is, event config!!!!) + path = name_to_zip_entry_path( name, '.yml' ) ## NOTE: use .yml extension + + logger.info "parsing data in zip (fixture) '#{name}' (#{path})..." + GameReader.from_zip( @zip_file, path, more_attribs ) + end + + + def create_person_reader( name, more_attribs={} ) + ## fix-fix-fix: change to new format e.g. from_file, from_zip etc!!! + ## reader = PersonDb::PersonReader.new( include_path ) + # reader.read( name, country_id: country.id ) + end + +private + + def path_to_real_path( path ) + # map name to name_real_path + # name might include !/ for virtual path (gets cut off) + # e.g. at-austria!/w-wien/beers becomse w-wien/beers + pos = path.index( '!/') + if pos.nil? + path # not found; real path is the same as name + else + # cut off everything until !/ e.g. + # at-austria!/w-wien/beers becomes + # w-wien/beers + path[ (pos+2)..-1 ] + end + end + + def name_to_zip_entry_path( name, extension='.txt' ) + path = "#{name}#{extension}" + + real_path = path_to_real_path( path ) + + # NOTE: add possible zip entry prefix path + # (if present includes trailing slash e.g. /) + entry_path = "#{@zip_prefix}#{real_path}" + entry_path + end end # class ZipReader end # module SportDb