lib/ffaker/address_au.rb



# => author: wiseleyb
# => email: wiseleyb@gmail.com
module Faker
  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