Skip to content

Commit

Permalink
Allow flexible formats for city names.
Browse files Browse the repository at this point in the history
  • Loading branch information
kytrinyx committed Sep 6, 2011
1 parent acae26f commit 94e3cf6
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 11 deletions.
15 changes: 5 additions & 10 deletions lib/faker/address.rb
Expand Up @@ -4,22 +4,13 @@ class Address < Base

class << self
def city
[
'%s %s%s' % [city_prefix, Name.first_name, city_suffix],
'%s %s' % [city_prefix, Name.first_name],
'%s%s' % [Name.first_name, city_suffix],
'%s%s' % [Name.last_name, city_suffix],
].sample
fetch('address.city_formats').collect {|meth| self.send(meth) }.join
end

def street_name
fetch('address.street_name_formats').collect {|meth| self.send(meth) }.join
end

def default_street_root
[Name.first_name, Name.last_name].sample
end

def street_address(include_secondary = false)
address = fetch('address.street_address_formats').collect {|meth| self.send(meth) }.join(' ')
address << " " << secondary_address if include_secondary
Expand Down Expand Up @@ -51,6 +42,10 @@ def longitude
((rand * 360) - 180).to_s
end

def default_root
[Name.first_name, Name.last_name].sample
end

def space
" "
end
Expand Down
15 changes: 14 additions & 1 deletion lib/locales/en.yml
Expand Up @@ -3,10 +3,23 @@ en:
address:
city_prefix: [North, East, West, South, New, Lake, Port]
city_suffix: [town, ton, land, ville, berg, burgh, borough, bury, view, port, mouth, stad, furt, chester, mouth, fort, haven, side, shire]
city_formats:
-
- :city_prefix
- :space
- :default_root
- :city_suffix
-
- :city_prefix
- :space
- :default_root
-
- :default_root
- :city_suffix
country: [Afghanistan, Albania, Algeria, American Samoa, Andorra, Angola, Anguilla, Antarctica (the territory South of 60 deg S), Antigua and Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados, Belarus, Belgium, Belize, Benin, Bermuda, Bhutan, Bolivia, Bosnia and Herzegovina, Botswana, Bouvet Island (Bouvetoya), Brazil, British Indian Ocean Territory (Chagos Archipelago), British Virgin Islands, Brunei Darussalam, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Cayman Islands, Central African Republic, Chad, Chile, China, Christmas Island, Cocos (Keeling) Islands, Colombia, Comoros, Congo, Congo, Cook Islands, Costa Rica, Cote d'Ivoire, Croatia, Cuba, Cyprus, Czech Republic, Denmark, Djibouti, Dominica, Dominican Republic, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Ethiopia, Faroe Islands, Falkland Islands (Malvinas), Fiji, Finland, France, French Guiana, French Polynesia, French Southern Territories, Gabon, Gambia, Georgia, Germany, Ghana, Gibraltar, Greece, Greenland, Grenada, Guadeloupe, Guam, Guatemala, Guernsey, Guinea, Guinea-Bissau, Guyana, Haiti, Heard Island and McDonald Islands, Holy See (Vatican City State), Honduras, Hong Kong, Hungary, Iceland, India, Indonesia, Iran, Iraq, Ireland, Isle of Man, Israel, Italy, Jamaica, Japan, Jersey, Jordan, Kazakhstan, Kenya, Kiribati, Korea, Korea, Kuwait, Kyrgyz Republic, Lao People's Democratic Republic, Latvia, Lebanon, Lesotho, Liberia, Libyan Arab Jamahiriya, Liechtenstein, Lithuania, Luxembourg, Macao, Macedonia, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Martinique, Mauritania, Mauritius, Mayotte, Mexico, Micronesia, Moldova, Monaco, Mongolia, Montenegro, Montserrat, Morocco, Mozambique, Myanmar, Namibia, Nauru, Nepal, Netherlands Antilles, Netherlands, New Caledonia, New Zealand, Nicaragua, Niger, Nigeria, Niue, Norfolk Island, Northern Mariana Islands, Norway, Oman, Pakistan, Palau, Palestinian Territory, Panama, Papua New Guinea, Paraguay, Peru, Philippines, Pitcairn Islands, Poland, Portugal, Puerto Rico, Qatar, Reunion, Romania, Russian Federation, Rwanda, Saint Barthelemy, Saint Helena, Saint Kitts and Nevis, Saint Lucia, Saint Martin, Saint Pierre and Miquelon, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia (Slovak Republic), Slovenia, Solomon Islands, Somalia, South Africa, South Georgia and the South Sandwich Islands, Spain, Sri Lanka, Sudan, Suriname, Svalbard & Jan Mayen Islands, Swaziland, Sweden, Switzerland, Syrian Arab Republic, Taiwan, Tajikistan, Tanzania, Thailand, Timor-Leste, Togo, Tokelau, Tonga, Trinidad and Tobago, Tunisia, Turkey, Turkmenistan, Turks and Caicos Islands, Tuvalu, Uganda, Ukraine, United Arab Emirates, United Kingdom, United States of America, United States Minor Outlying Islands, United States Virgin Islands, Uruguay, Uzbekistan, Vanuatu, Venezuela, Vietnam, Wallis and Futuna, Western Sahara, Yemen, Zambia, Zimbabwe]
street_name_formats:
-
- :default_street_root
- :default_root
- :space
- :street_suffix
street_address_formats:
Expand Down
54 changes: 54 additions & 0 deletions test/test_faker_city.rb
@@ -0,0 +1,54 @@
require File.dirname(__FILE__) + '/test_helper.rb'

class TestFakerCity < Test::Unit::TestCase
def setup
xx = {
:faker => {
:name => {:first_name => [:alice], :last_name => [:smith]},
:address => {:city_prefix => [:west], :city_suffix => [:burg]}
}
}
I18n.backend.store_translations(:xx, xx)

xy = {
:faker => {
:address => {
:city_prefix => [:big],
:city_root => [:rock],
:city_root_suffix => [:ing],
:city_suffix => [:town],
:city_formats => [[:city_prefix, :space, :city_root, :city_root_suffix, :space, :city_suffix]]
}
}
}
I18n.backend.store_translations(:xy, xy)
end

def test_default_city_root_is_first_name_or_last_name
I18n.with_locale(:xx) do
100.times do
root = Faker::Address.default_root
assert [:alice, :smith].include?(root), "Expected 'alice' or 'smith', but got #{root}"
end
end
end

def test_default_city_formats
I18n.with_locale(:xx) do
100.times do
cities = ["west alice", "west smith", "west aliceburg", "west smithburg", "aliceburg", "smithburg"]
city = Faker::Address.city
assert cities.include?(city), "Expected <#{cities.join(' / ')}>, but got #{city}"
end
end
end

def test_city_formats_are_flexible
I18n.with_locale(:xy) do
cities = ['big rocking town']
city = Faker::Address.city
assert cities.include?(city), "Expected <#{cities.join(' / ')}>, but got #{city}"
end
end

end

0 comments on commit 94e3cf6

Please sign in to comment.