ausburbs 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/.DS_Store ADDED
Binary file
data/lib/ausburbs.rb ADDED
@@ -0,0 +1,38 @@
1
+ module Ausburbs
2
+ autoload :State, 'ausburbs/state'
3
+ autoload :Suburb, 'ausburbs/suburb'
4
+
5
+ @data_path = File.join(File.dirname(__FILE__), '..', 'data')
6
+
7
+ class << self
8
+ def state_names
9
+ @@states.keys.sort
10
+ end
11
+
12
+ def state(state_name)
13
+ load_data
14
+ @@states[state_name.to_s.upcase]
15
+ end
16
+
17
+ def states
18
+ load_data
19
+ @@states.values.sort{ |s1, s2| s1.name <=> s2.name }
20
+ end
21
+
22
+ def suburbs(state_name)
23
+ load_data
24
+ Ausburbs.states[state.to_s.upcase].suburbs
25
+ end
26
+
27
+ private
28
+ def load_data
29
+ @@states ||= {}
30
+ if @@states.empty?
31
+ data = YAML.load_file( File.join(@data_path, 'suburbs.yml') )
32
+ data.each do |state_name, suburbs|
33
+ @@states[state_name] = State.new(state_name, suburbs)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,19 @@
1
+ module Ausburbs
2
+ class State
3
+ attr_accessor :name, :suburbs
4
+
5
+ def initialize(*args)
6
+ self.name = args[0]
7
+ load_suburb_data!(args[1])
8
+ end
9
+
10
+ private
11
+ def load_suburb_data!(data)
12
+ self.suburbs = []
13
+ data.each do |suburb_data|
14
+ self.suburbs << Suburb.new(suburb_data)
15
+ end
16
+ self.suburbs.sort{ |s1, s2| s1.postcode <=> s2.postcode }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module Ausburbs
2
+ class Suburb
3
+ attr_accessor :name, :postcode, :state, :latitude, :longitude
4
+ def initialize(data = nil)
5
+ parse!(data) if data
6
+ end
7
+
8
+ private
9
+ def parse!(data)
10
+ self.name = data[:name].to_s
11
+ self.postcode = data[:postcode].to_s.rjust(4, '0')
12
+ self.state = data[:state].to_s
13
+ self.latitude = data[:latitude].to_f
14
+ self.longitude = data[:longitude].to_f
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module Ausburbs
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ausburbs do
4
+ before :each do
5
+
6
+ end
7
+
8
+ it "should return a list of states, in alphabetical order" do
9
+ Ausburbs.states.should be_a(Array)
10
+ last_state = nil
11
+ Ausburbs.states.each do |state|
12
+ state.should be_a(Ausburbs::State)
13
+ (state.name > last_state.name).should be_true if last_state
14
+ last_state = state
15
+ end
16
+ end
17
+
18
+ it "should return an list of suburbs for a given state, in postcode order" do
19
+ Ausburbs.states.each do |state|
20
+ state.suburbs.should be_a(Array)
21
+ last_suburb = nil
22
+ state.suburbs.each do |suburb|
23
+ suburb.should be_a(Ausburbs::Suburb)
24
+ (suburb.postcode >= last_suburb.postcode).should be_true if last_suburb
25
+ last_suburb = suburb
26
+ end
27
+ end
28
+ end
29
+
30
+ it "should return the list of state names, in alphabetical order" do
31
+ Ausburbs.state_names.should be_a(Array)
32
+ last_state_name = nil
33
+ Ausburbs.state_names.each do |state_name|
34
+ (state_name.should >= last_state_name).should be_true if last_state_name
35
+ last_state_name = state_name
36
+ end
37
+ end
38
+
39
+ it "should return a state for a given state name" do
40
+ Ausburbs.state_names.each do |state_name|
41
+ Ausburbs.state(state_name).should be_a(Ausburbs::State)
42
+ Ausburbs.state(state_name).name.should == state_name
43
+ end
44
+ end
45
+ end
46
+
47
+ describe Ausburbs::State do
48
+ before :each do
49
+ @state = Ausburbs.states.first
50
+ end
51
+
52
+ it "should have a name" do
53
+ @state.respond_to?(:name).should be_true
54
+ @state.name.should be_a(String)
55
+ end
56
+
57
+ it "should return a list of suburbs" do
58
+ @state.suburbs.should be_an(Array)
59
+ end
60
+ end
61
+
62
+ describe Ausburbs::Suburb do
63
+ before :each do
64
+ @suburb = Ausburbs.states.first.suburbs.first
65
+ end
66
+
67
+ it "should have a name" do
68
+ @suburb.respond_to?(:name).should be_true
69
+ @suburb.name.should be_a(String)
70
+ end
71
+
72
+ it "should have a postcode" do
73
+ @suburb.respond_to?(:postcode).should be_true
74
+ @suburb.postcode.should be_a(String)
75
+ end
76
+
77
+ it "should have a latitude"do
78
+ @suburb.respond_to?(:latitude).should be_true
79
+ @suburb.latitude.should be_a(Float)
80
+ end
81
+
82
+ it "should have a longitude" do
83
+ @suburb.respond_to?(:longitude).should be_true
84
+ @suburb.longitude.should be_a(Float)
85
+ end
86
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'ausburbs'
5
+
6
+ RSpec.configure do |config|
7
+
8
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ausburbs
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
+ platform: ruby
12
+ authors:
13
+ - Nicholas Bruning
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-18 00:00:00 +10:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: A simple gem for accesssing basic data about suburbs across Australia, including latitudes and longitudes
23
+ email:
24
+ - nicholas@bruning.com.au
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - .autotest
33
+ - .gitignore
34
+ - .rspec
35
+ - Gemfile
36
+ - Gemfile.lock
37
+ - README.md
38
+ - Rakefile
39
+ - ausburbs.gemspec
40
+ - data/.DS_Store
41
+ - data/suburbs.yml
42
+ - lib/.DS_Store
43
+ - lib/ausburbs.rb
44
+ - lib/ausburbs/state.rb
45
+ - lib/ausburbs/suburb.rb
46
+ - lib/ausburbs/version.rb
47
+ - spec/ausburbs_spec.rb
48
+ - spec/spec_helper.rb
49
+ has_rdoc: true
50
+ homepage: https://github.com/thetron/ausburbs
51
+ licenses: []
52
+
53
+ post_install_message:
54
+ rdoc_options: []
55
+
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ hash: 3
64
+ segments:
65
+ - 0
66
+ version: "0"
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ requirements: []
77
+
78
+ rubyforge_project: ausburbs
79
+ rubygems_version: 1.3.7
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Provides Australian suburbs data including latitudes and longitudes.
83
+ test_files:
84
+ - spec/ausburbs_spec.rb
85
+ - spec/spec_helper.rb