class ZipGeoJp::Record

Attributes

block[R]
city[R]
latitude[R]
longitude[R]
prefecture[R]
zip_code[R]

Public Class Methods

[](key) click to toggle source
# File lib/zip_geo_jp/record.rb, line 13
def [] (key)
  row = db.execute('SELECT * FROM zip_codes WHERE zip_code = ? LIMIT 1', key).first
  row ? from_row(row) : nil
end
[]=(key, values) click to toggle source
# File lib/zip_geo_jp/record.rb, line 18
def []= (key, values)
  values[:zip_code] = key
  db.execute(
      'REPLACE INTO zip_codes(zip_code, prefecture, city, block, latitude, longitude) VALUES(:zip_code, :prefecture, :city, :block, :latitude, :longitude)',
      values
  )
  values
end
from_row(row) click to toggle source
# File lib/zip_geo_jp/record.rb, line 31
def from_row(row)
  new(row.values)
end
new(values) click to toggle source
# File lib/zip_geo_jp/record.rb, line 7
def initialize(values)
  @zip_code                                         = values.shift.gsub(/^(\d{3})(\d{4})$/, '\1-\2')
  @prefecture, @city, @block, @latitude, @longitude = values
end
reset() click to toggle source
# File lib/zip_geo_jp/record.rb, line 27
def reset
  File.delete(file) if File.exists?(file)
end

Private Class Methods

db() click to toggle source
# File lib/zip_geo_jp/record.rb, line 37
      def db
        @@db ||= begin
          db                 = SQLite3::Database.new(file)
          db.results_as_hash = true
          db.execute(<<_EOF_
          CREATE TABLE IF NOT EXISTS zip_codes (
           zip_code   TEXT NOT NULL PRIMARY KEY,
           prefecture TEXT NOT NULL,
           city       TEXT NOT NULL,
           block      TEXT,
           latitude   REAL,
           longitude  REAL
          )
_EOF_
          )
          db
        end
      end
file() click to toggle source
# File lib/zip_geo_jp/record.rb, line 56
def file
  File.join(__dir__, '../../data/zip_geo_jp.sqlite3')
end