class DataMaker::CN::Address::GenerateAddress
Attributes
city[RW]
district[RW]
locale[RW]
options[RW]
province[RW]
street_address[RW]
Public Class Methods
new(*args)
click to toggle source
# File lib/data_maker/cn/address.rb, line 36 def initialize(*args) self.options = (args.last.is_a?(::Hash) ? args.last : {}).delete_if { |k, v| v.nil? } self.district = options[:district] self.city = options[:city] self.province = options[:province] self.locale = options[:locale] || :zh unless options.empty? validate end end
Public Instance Methods
address_string()
click to toggle source
# File lib/data_maker/cn/address.rb, line 70 def address_string generate build_address end
address_struct()
click to toggle source
# File lib/data_maker/cn/address.rb, line 75 def address_struct generate OpenStruct.new(street_address: street_address, city: translate('city', city), district: (translate('district', district) unless district.nil?), province: translate('province', province), postal_code: postal_code ) end
generate()
click to toggle source
# File lib/data_maker/cn/address.rb, line 47 def generate if options.empty? # Generate a random address from a province self.province = provinces.sample self.city = province_cities.sample self.district = city_districts.nil? ? nil : city_districts.sample end if options[:province] && options[:city].nil? && options[:district].nil? self.city = province_cities.sample self.district = city_districts.nil? ? nil : city_districts.sample end if options[:province].nil? && options[:city] && options[:district].nil? self.province = city_province self.district = city_districts.nil? ? nil : city_districts.sample end end
postal_code()
click to toggle source
# File lib/data_maker/cn/address.rb, line 85 def postal_code postal_code = nil province_postal_codes = DataMaker::CN::Address::PROVINCE_POSTAL_CODES province_postal_codes.to_set.select do |province_postal_code| p, pc = province_postal_code.split(",") p == province ? postal_code = pc : nil end postal_code end
Private Instance Methods
build_address()
click to toggle source
# File lib/data_maker/cn/address.rb, line 150 def build_address address = [] address << street_address address << translate('city', city) address << translate('district', district) unless district.nil? address << translate('province', province) address << postal_code address.compact.join(", ") end
cities()
click to toggle source
# File lib/data_maker/cn/address.rb, line 142 def cities DataMaker::CN::Address::CITIES end
city_districts()
click to toggle source
# File lib/data_maker/cn/address.rb, line 173 def city_districts raise ArgumentError, "Please pass a city!" if city.nil? d = DataMaker::CN::Address.const_get("#{city}_districts".upcase) d.empty? ? nil : d end
city_exists?()
click to toggle source
# File lib/data_maker/cn/address.rb, line 198 def city_exists? cities.to_set.include?(city) end
city_has_district?()
click to toggle source
# File lib/data_maker/cn/address.rb, line 210 def city_has_district? city_districts.to_set.include?(district) end
city_province()
click to toggle source
# File lib/data_maker/cn/address.rb, line 179 def city_province province = nil city_provinces = DataMaker::CN::Address::CITY_PROVINCES city_provinces.to_set.select do |city_province| c, p = city_province.split(",") c == city ? province = p : nil end province end
district_exists?()
click to toggle source
# File lib/data_maker/cn/address.rb, line 202 def district_exists? districts.to_set.include?(district) end
districts()
click to toggle source
# File lib/data_maker/cn/address.rb, line 146 def districts DataMaker::CN::Address::DISTRICTS end
province_cities()
click to toggle source
# File lib/data_maker/cn/address.rb, line 189 def province_cities raise ArgumentError, "Please pass a province!" if province.nil? DataMaker::CN::Address.const_get("#{province}_cities".upcase) end
province_exists?()
click to toggle source
# File lib/data_maker/cn/address.rb, line 194 def province_exists? provinces.to_set.include?(province) end
province_has_city?()
click to toggle source
# File lib/data_maker/cn/address.rb, line 206 def province_has_city? province_cities.to_set.include?(city) end
provinces()
click to toggle source
# File lib/data_maker/cn/address.rb, line 138 def provinces DataMaker::CN::Address::PROVINCES end
street_name()
click to toggle source
# File lib/data_maker/cn/address.rb, line 160 def street_name DataMaker::CN::Name::LAST_NAMES.sample end
street_suffix()
click to toggle source
# File lib/data_maker/cn/address.rb, line 164 def street_suffix DataMaker::CN::Address::STREET_SUFFIXES.sample end
translate(prefix, value)
click to toggle source
# File lib/data_maker/cn/address.rb, line 97 def translate(prefix, value) DataMaker::Config.locale = locale DataMaker.translate(['data_maker', 'address', prefix, value].join(".")) end
unit_no()
click to toggle source
# File lib/data_maker/cn/address.rb, line 168 def unit_no masks = "#" * rand(1..2) DataMaker.numerify(masks) end
validate()
click to toggle source
# File lib/data_maker/cn/address.rb, line 102 def validate if province unless province_exists? raise ArgumentError, "The province #{province} does not exist!" end end if city unless city_exists? raise ArgumentError, "The city #{city} does not exist!" end end if district unless district_exists? raise ArgumentError, "The district #{district} does not exist!" end end if city.nil? && district raise ArgumentError, "You must always pass a city with a district!" end if province && city unless province_has_city? raise ArgumentError, "The province #{province} does not have the city #{city}" end end if city && district unless city_has_district? raise ArgumentError, "The city #{city} does not have the district #{district}" end end end