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/.autotest +1 -0
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +28 -0
- data/README.md +52 -0
- data/Rakefile +27 -0
- data/ausburbs.gemspec +21 -0
- data/data/.DS_Store +0 -0
- data/data/suburbs.yml +80403 -0
- data/lib/.DS_Store +0 -0
- data/lib/ausburbs.rb +38 -0
- data/lib/ausburbs/state.rb +19 -0
- data/lib/ausburbs/suburb.rb +17 -0
- data/lib/ausburbs/version.rb +3 -0
- data/spec/ausburbs_spec.rb +86 -0
- data/spec/spec_helper.rb +8 -0
- metadata +85 -0
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,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
|
data/spec/spec_helper.rb
ADDED
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
|