lib/ffaker/address_au.rb



# encoding: utf-8

require 'ffaker/address'

module Faker
  # Author wiseleyb<wiseleyb@gmail.com>
  module AddressAU
    include Faker::Address

    extend ModuleUtils
    extend self

    def postcode(st_abbr = nil)
      st_abbr ||= state_abbr
      POSTCODE[st_abbr][rand(POSTCODE[st_abbr].size)]
    end

    def state
      STATE.rand
    end

    def state_abbr
      STATE_ABBR.rand
    end

    def suburb(st_abbr = nil, p_code = nil)
      st_abbr ||= state_abbr
      p_code  ||= postcode(st_abbr)
      SUBURB[st_abbr][p_code]
    end

    def full_address(st_abbr = nil)
      st_abbr ||= state_abbr
      "#{Faker::Address.street_address}, #{suburb(st_abbr)} #{st_abbr} #{postcode}"
    end

    # based on areas labeled state (+act) here: http://en.wikipedia.org/wiki/States_and_territories_of_Australia
    STATE = k [
      'Australian Capital Territory', 'New South Wales', 'Queensland',
      'South Australia', 'Tasmania', 'Victoria', 'Western Australia'
    ]

    STATE_ABBR = k %w(ACT NSW NT QLD SA TAS VIC WA)

    # based on http://en.wikipedia.org/wiki/List_of_cities_in_Australia
    SUBURB = {
      "ACT"=>{
        "2600" => "Canberra", "2601"=>"Canberra", "2602"=>"O'Connor", "2612"=>"Braddon"},
        "NT" => {"0800"=>"Darwin", "0830"=>"Palmerston"},
        "SA" => {
          "5000"=>"Adelaide", "5015"=>"Port Adelaide", "5211"=>"Victor Harbor",
          "5251"=>"Mount Barker", "5253"=>"Murray Bridge", "5254"=>"Murray Bridge",
          "5290"=>"Mount Gambier", "5291"=>"Mount Gambier", "5540"=>"Port Pirie",
          "5600"=>"Whyalla", "5606"=>"Port Lincoln", "5607"=>"Port Lincoln",
          "5700"=>"Port Augusta", "5710"=>"Port Augusta"
        },
        "WA" => { 
          "6000"=>"Perth", "6008"=>"Subiaco", "6009"=>"Nedlands",
          "6021"=>"Stirling", "6027"=>"Joondalup", "6053"=>"Bayswater",
          "6065"=>"Wanneroo", "6110"=>"Gosnells", "6112"=>"Armadale",
          "6151"=>"South Perth", "6156"=>"Melville", "6160"=>"Fremantle",
          "6168"=>"Rockingham", "6210"=>"Mandurah", "6230"=>"Bunbury",
          "6330"=>"Albany", "6430"=>"Kalgoorlie", "6530"=>"Geraldton"
        },
        "NSW" => {
          "2000"=>"Sydney", "2031"=>"Randwick", "2046"=>"Canada Bay",
          "2068"=>"Willoughby", "2112"=>"Ryde", "2142"=>"Holroyd",
          "2148"=>"Blacktown", "2150"=>"Parramatta", "2165"=>"Fairfield",
          "2170"=>"Liverpool", "2193"=>"Canterbury", "2200"=>"Bankstown",
          "2216"=>"Rockdale", "2220"=>"Hurstville", "2250"=>"Gosford",
          "2300"=>"Newcastle", "2320"=>"Maitland", "2325"=>"Cessnock",
          "2340"=>"Tamworth", "2350"=>"Armidale", "2450"=>"Coffs Harbour",
          "2460"=>"Grafton", "2480"=>"Lismore", "2500"=>"Wollongong",
          "2529"=>"Shellharbour", "2560"=>"Campbelltown", "2580"=>"Goulburn",
          "2620"=>"Queanbeyan", "2640"=>"Albury", "2650"=>"Wagga Wagga",
          "2680"=>"Griffith", "2750"=>"Penrith", "2790"=>"Lithgow",
          "2795"=>"Bathurst", "2800"=>"Orange", "2830"=>"Dubbo",
          "2880"=>"Broken Hill"
        },
        "QLD" => {
          "4000"=>"Brisbane", "4217"=>"Surfers Paradise", "4305"=>"Ipswich",
          "4350"=>"Toowoomba", "4370"=>"Warwick", "4551"=>"Caloundra",
          "4570"=>"Gympie", "4650"=>"Maryborough", "4655"=>"Hervey Bay",
          "4670"=>"Bundaberg", "4680"=>"Gladstone", "4700"=>"Rockhampton",
          "4740"=>"Mackay", "4810"=>"Townsville", "4820"=>"Charters Towers",
          "4825"=>"Mount Isa", "4870"=>"Cairns"
        },
        "VIC" => {
          "3000"=>"Melbourne", "3175"=>"Dandenong", "3199"=>"Frankston",
          "3220"=>"Geelong", "3280"=>"Warrnambool", "3300"=>"Hamilton",
          "3337"=>"Melton", "3350"=>"Ballarat", "3377"=>"Ararat",
          "3400"=>"Horsham", "3500"=>"Mildura", "3550"=>"Bendigo",
          "3585"=>"Swan Hill", "3630"=>"Shepparton", "3672"=>"Benalla",
          "3677"=>"Wangaratta", "3690"=>"Wodonga", "3825"=>"Moe",
          "3840"=>"Morwell", "3844"=>"Traralgon", "3850"=>"Sale",
          "3875"=>"Bairnsdale"
        },
        "TAS" => {
          "7000"=>"Hobart", "7010"=>"Glenorchy", "7250"=>"Launceston",
          "7310"=>"Devonport", "7320"=>"Burnie"
        }
    }

    POSTCODE = SUBURB.inject({}) { |h, (s_abbr, postcode_suburb_map)| h.update(s_abbr => postcode_suburb_map.keys) }
  end
end