class Urbans::City

Attributes

__id__[RW]
country_id[RW]
id[RW]
names[RW]
province_id[RW]

Public Class Methods

all!(_country_id, _province_id, _locale=Urbans.locale) click to toggle source
# File lib/urbans/foundations/city.rb, line 11
def self.all! _country_id, _province_id, _locale=Urbans.locale
  cities = []

  country_id = _country_id.to_s.downcase.to_sym
  province_id = _province_id.to_s.downcase.to_sym
  locale = _locale.to_s.downcase.to_sym

  Urbans::CITIES[country_id] ||= {}

  from_file(country_id, locale).each do |_current_province_id, province_cities|
    current_province_id = _current_province_id.to_s.downcase.to_sym
    Urbans::CITIES[country_id][current_province_id] ||= {}

    province_cities.each do |_city_id, city_name|
      city_id = _city_id.to_s.downcase.to_sym

      city = Urbans::CITIES[country_id][current_province_id][city_id]
      unless city
        city = Urbans::City.new
        city.__id__ = _city_id
        city.id = "#{country_id}.#{current_province_id}.#{city_id}"
        city.country_id = country_id
        city.province_id = current_province_id
        Urbans::CITIES[country_id][current_province_id][city_id] = city
      end
      city.names[locale] = city_name

      cities << city if current_province_id == province_id
    end
  end
  cities
end
from_file(_country_id, _locale) click to toggle source
# File lib/urbans/foundations/city.rb, line 95
def self.from_file _country_id, _locale
  locale = _locale.to_s.downcase
  country_id = _country_id.to_s.downcase
  from_file = YAML.load_file(Urbans::URBAN_PATH + "urbans/data/#{locale}.#{country_id}.cities.yml")
  from_file[locale]["cities"][country_id]
end
get(arg) click to toggle source
# File lib/urbans/foundations/city.rb, line 44
def self.get arg
  _country_id = _province_id = _city_id = nil

  if arg.is_a?(Hash)
    _country_id, _province_id, _city_id = arg.fetch(:country), arg.fetch(:province), arg[:city]
  elsif arg.is_a?(String)
    _arg = arg.split(".")
    _country_id, _province_id, _city_id = _arg[0], _arg[1], _arg[2]
  end

  if _city_id.nil?
    return all! _country_id, _province_id
  end

  country_id = _country_id.to_s.downcase.to_sym
  province_id = _province_id.to_s.downcase.to_sym
  city_id = _city_id.to_s.downcase.to_sym

  if Urbans::CITIES[country_id].nil? || Urbans::CITIES[country_id][province_id].nil? ||
      Urbans::CITIES[country_id][province_id][city_id].nil?
    all! country_id, province_id, Urbans.locale
  end

  city = Urbans::CITIES[country_id][province_id][city_id]
  city
end
new() click to toggle source
# File lib/urbans/foundations/city.rb, line 7
def initialize
  self.names = {}
end

Public Instance Methods

<=>(another) click to toggle source
# File lib/urbans/foundations/city.rb, line 91
def <=> another
  self.name <=> another.name
end
country() click to toggle source
# File lib/urbans/foundations/city.rb, line 83
def country
  Urbans.country.get country_id
end
name(_locale=Urbans.locale) click to toggle source
# File lib/urbans/foundations/city.rb, line 71
def name _locale=Urbans.locale
  locale = _locale.to_s.downcase.to_sym

  if names[locale].nil?
    cities_by_province = self.class.from_file(country_id, locale)[province_id.to_s.downcase]
    city_local_name = cities_by_province[__id__]
    names[locale] = city_local_name
  end

  names[locale]
end
province() click to toggle source
# File lib/urbans/foundations/city.rb, line 87
def province
  Urbans.province.get country: country_id, province: province_id
end