ausburbs 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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