Class: WorldDb::ZipReader

Inherits:
ReaderBase show all
Defined in:
lib/worlddb/reader_zip.rb

Instance Method Summary collapse

Methods inherited from ReaderBase

#load, #load_codes, #load_continent_defs, #load_continent_refs, #load_regions_xxx, #load_setup, #skip_tags?, #strict?

Methods included from Matcher

#match_cities_for_country, #match_countries_for_continent, #match_regions_abbr_for_country, #match_regions_for_country, #match_regions_iso_for_country, #match_regions_nuts_for_country, #match_xxx_for_country, #match_xxx_for_country_n_region

Constructor Details

#initialize(name, include_path, opts = {}) ⇒ ZipReader

Returns a new instance of ZipReader.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/worlddb/reader_zip.rb', line 8

def initialize( name, include_path, opts = {} )
  super( 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

Instance Method Details

#closeObject



30
31
32
33
# File 'lib/worlddb/reader_zip.rb', line 30

def close
  ## todo/check: add a close method - why? why not ???
  @zip_file.close
end

#create_city_reader(name, more_attribs = {}) ⇒ Object



95
96
97
98
99
100
# File 'lib/worlddb/reader_zip.rb', line 95

def create_city_reader( name, more_attribs={} )
  path = name_to_zip_entry_path( name )
  logger.info "parsing data (city) in zip '#{name}' (#{path})..."

  CityReader.from_zip( @zip_file, path, more_attribs )
end

#create_country_reader(name, more_attribs = {}) ⇒ Object



81
82
83
84
85
86
# File 'lib/worlddb/reader_zip.rb', line 81

def create_country_reader( name, more_attribs={} )
  path = name_to_zip_entry_path( name )
  logger.info "parsing data (country) in zip '#{name}' (#{path})..."

  CountryReader.from_zip( @zip_file, path, more_attribs )
end

#create_fixture_reader(name) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/worlddb/reader_zip.rb', line 37

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 (setup) in zip '#{name}' (#{path})..."

  FixtureReader.from_zip( @zip_file, path )
end

#create_hash_reader(name) ⇒ Object



103
104
105
106
107
108
# File 'lib/worlddb/reader_zip.rb', line 103

def create_hash_reader( name )
  path = name_to_zip_entry_path( name, '.yml' )  ## hash reader - use .yml??
  logger.info "parsing data (hash) in zip '#{name}' (#{path})..."

  HashReader.from_zip( @zip_file, path )
end

#create_lang_reader(name) ⇒ Object



66
67
68
69
70
71
# File 'lib/worlddb/reader_zip.rb', line 66

def create_lang_reader( name )
  path = name_to_zip_entry_path( name, '.yml' )  ## hash reader - use .yml??
  logger.info "parsing data (lang) in zip '#{name}' (#{path})..."

  LangReader.from_zip( @zip_file, path )
end

#create_line_reader(name) ⇒ Object



117
118
119
120
121
122
# File 'lib/worlddb/reader_zip.rb', line 117

def create_line_reader( name )
  path = name_to_zip_entry_path( name )
  logger.info "parsing data (line) in zip '#{name}' (#{path})..."

  LineReader.from_zip( @zip_file, path )
end

#create_region_reader(name, more_attribs = {}) ⇒ Object



88
89
90
91
92
93
# File 'lib/worlddb/reader_zip.rb', line 88

def create_region_reader( name, more_attribs={} )
  path = name_to_zip_entry_path( name )
  logger.info "parsing data (region) in zip '#{name}' (#{path})..."

  RegionReader.from_zip( @zip_file, path, more_attribs )
end

#create_usage_reader(name) ⇒ Object



73
74
75
76
77
78
# File 'lib/worlddb/reader_zip.rb', line 73

def create_usage_reader( name )
  path = name_to_zip_entry_path( name, '.yml' )  ## hash reader - use .yml??
  logger.info "parsing data (usage) in zip '#{name}' (#{path})..."

  UsageReader.from_zip( @zip_file, path )
end

#create_values_reader(name, more_attribs = {}) ⇒ Object



110
111
112
113
114
115
# File 'lib/worlddb/reader_zip.rb', line 110

def create_values_reader( name, more_attribs={} )
  path = name_to_zip_entry_path( name )
  logger.info "parsing data (values) in zip '#{name}' (#{path})..."

  ValuesReader.from_zip( @zip_file, path, more_attribs )
end