geocodio 1.1.0 → 2.0.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.
- checksums.yaml +4 -4
- data/lib/geocodio/address.rb +74 -28
- data/lib/geocodio/client.rb +29 -20
- data/lib/geocodio/congressional_district.rb +19 -0
- data/lib/geocodio/school_district.rb +15 -0
- data/lib/geocodio/state_legislative_district.rb +11 -0
- data/lib/geocodio/timezone.rb +16 -0
- data/lib/geocodio/version.rb +2 -2
- data/spec/address_set_spec.rb +1 -1
- data/spec/address_spec.rb +37 -1
- data/spec/client_spec.rb +113 -60
- data/spec/congressional_district_spec.rb +28 -0
- data/spec/school_district_spec.rb +27 -0
- data/spec/state_legislative_district_spec.rb +19 -0
- data/spec/timezone_spec.rb +23 -0
- data/spec/vcr_cassettes/batch_geocode_with_fields.yml +78 -0
- data/spec/vcr_cassettes/batch_reverse_with_fields.yml +96 -0
- data/spec/vcr_cassettes/geocode_with_fields.yml +53 -0
- data/spec/vcr_cassettes/reverse_with_fields.yml +58 -0
- metadata +24 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6f07d6a0f3badaba67e890b973573eacb03e8af1
|
|
4
|
+
data.tar.gz: d2f2a3b90df9b526199348811d266b8dbf682b8c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5eac91722f01e44514b3c668c16ddc0e36575c545b5658cd58892024ee4a5ceb42af4ef4f4f7d97393941ddf4712aa5201fef901cab7647d69146fe181426cd0
|
|
7
|
+
data.tar.gz: 74d43b2b707b96fcf9d73dc0e65ed4956e07e260e951d7051a9f0b0c7370cb69edcbd1ca0a331f682038514ef88de212249630d5091c17567f36e80c2cac866f
|
data/lib/geocodio/address.rb
CHANGED
|
@@ -1,41 +1,33 @@
|
|
|
1
|
+
require 'geocodio/congressional_district'
|
|
2
|
+
require 'geocodio/school_district'
|
|
3
|
+
require 'geocodio/state_legislative_district'
|
|
4
|
+
require 'geocodio/timezone'
|
|
5
|
+
|
|
1
6
|
module Geocodio
|
|
2
7
|
class Address
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
attr_accessor :suffix
|
|
7
|
-
attr_accessor :city
|
|
8
|
-
attr_accessor :state
|
|
9
|
-
attr_accessor :zip
|
|
10
|
-
|
|
11
|
-
attr_accessor :latitude
|
|
12
|
-
attr_accessor :longitude
|
|
8
|
+
attr_reader :number, :predirectional, :street, :suffix, :city, :state, :zip
|
|
9
|
+
|
|
10
|
+
attr_reader :latitude, :longitude
|
|
13
11
|
alias :lat :latitude
|
|
14
12
|
alias :lng :longitude
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
attr_reader :congressional_district, :house_district, :senate_district,
|
|
15
|
+
:unified_school_district, :elementary_school_district,
|
|
16
|
+
:secondary_school_district
|
|
17
|
+
|
|
18
|
+
attr_reader :timezone
|
|
19
|
+
|
|
20
|
+
# How accurate geocod.io deemed this result to be given the original query.
|
|
17
21
|
#
|
|
18
22
|
# @return [Float] a number between 0 and 1
|
|
19
|
-
|
|
23
|
+
attr_reader :accuracy
|
|
20
24
|
|
|
21
25
|
def initialize(payload = {})
|
|
22
|
-
if payload['address_components']
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@street = payload['address_components']['street']
|
|
26
|
-
@suffix = payload['address_components']['suffix']
|
|
27
|
-
@city = payload['address_components']['city']
|
|
28
|
-
@state = payload['address_components']['state']
|
|
29
|
-
@zip = payload['address_components']['zip']
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
if payload['location']
|
|
33
|
-
@latitude = payload['location']['lat']
|
|
34
|
-
@longitude = payload['location']['lng']
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
@accuracy = payload['accuracy']
|
|
26
|
+
set_attributes(payload['address_components']) if payload['address_components']
|
|
27
|
+
set_coordinates(payload['location']) if payload['location']
|
|
28
|
+
set_additional_fields(payload['fields']) if payload['fields']
|
|
38
29
|
|
|
30
|
+
@accuracy = payload['accuracy']
|
|
39
31
|
@formatted_address = payload['formatted_address']
|
|
40
32
|
end
|
|
41
33
|
|
|
@@ -45,5 +37,59 @@ module Geocodio
|
|
|
45
37
|
def to_s
|
|
46
38
|
@formatted_address
|
|
47
39
|
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def set_attributes(attributes)
|
|
44
|
+
@number = attributes['number']
|
|
45
|
+
@predirectional = attributes['predirectional']
|
|
46
|
+
@street = attributes['street']
|
|
47
|
+
@suffix = attributes['suffix']
|
|
48
|
+
@city = attributes['city']
|
|
49
|
+
@state = attributes['state']
|
|
50
|
+
@zip = attributes['zip']
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def set_coordinates(coordinates)
|
|
54
|
+
@latitude = coordinates['lat']
|
|
55
|
+
@longitude = coordinates['lng']
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def set_additional_fields(fields)
|
|
59
|
+
set_congressional_district(fields['congressional_district']) if fields['congressional_district']
|
|
60
|
+
set_legislative_districts(fields['state_legislative_districts']) if fields['state_legislative_districts']
|
|
61
|
+
set_school_districts(fields['school_districts']) if fields['school_districts']
|
|
62
|
+
set_timezone(fields['timezone']) if fields['timezone']
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def set_congressional_district(district)
|
|
66
|
+
return if district.empty?
|
|
67
|
+
|
|
68
|
+
@congressional_district = CongressionalDistrict.new(district)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def set_legislative_districts(districts)
|
|
72
|
+
return if districts.empty?
|
|
73
|
+
|
|
74
|
+
@house_district = StateLegislativeDistrict.new(districts['house'])
|
|
75
|
+
@senate_district = StateLegislativeDistrict.new(districts['senate'])
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def set_school_districts(schools)
|
|
79
|
+
return if schools.empty?
|
|
80
|
+
|
|
81
|
+
if schools['unified']
|
|
82
|
+
@unified_school_district = SchoolDistrict.new(schools['unified'])
|
|
83
|
+
else
|
|
84
|
+
@elementary_school_district = SchoolDistrict.new(schools['elementary'])
|
|
85
|
+
@secondary_school_district = SchoolDistrict.new(schools['secondary'])
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def set_timezone(timezone)
|
|
90
|
+
return if timezone.empty?
|
|
91
|
+
|
|
92
|
+
@timezone = Timezone.new(timezone)
|
|
93
|
+
end
|
|
48
94
|
end
|
|
49
95
|
end
|
data/lib/geocodio/client.rb
CHANGED
|
@@ -29,17 +29,17 @@ module Geocodio
|
|
|
29
29
|
# is submitted to http://api.geocod.io/v1/geocode. Multiple addresses will
|
|
30
30
|
# instead submit a POST request.
|
|
31
31
|
#
|
|
32
|
-
# @param
|
|
32
|
+
# @param [Array<String>] addresses one or more String addresses
|
|
33
|
+
# @param [Hash] options an options hash
|
|
34
|
+
# @option options [Array] :fields a list of option fields to request (possible: "cd" or "cd113", "stateleg", "school", "timezone")
|
|
33
35
|
# @return [Geocodio::Address, Array<Geocodio::AddressSet>] One or more Address Sets
|
|
34
|
-
def geocode(
|
|
35
|
-
addresses = addresses.first if addresses.first.is_a?(Array)
|
|
36
|
-
|
|
36
|
+
def geocode(addresses, options = {})
|
|
37
37
|
if addresses.size < 1
|
|
38
38
|
raise ArgumentError, 'You must provide at least one address to geocode.'
|
|
39
39
|
elsif addresses.size == 1
|
|
40
|
-
geocode_single(addresses.first)
|
|
40
|
+
geocode_single(addresses.first, options)
|
|
41
41
|
else
|
|
42
|
-
geocode_batch(addresses)
|
|
42
|
+
geocode_batch(addresses, options)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -50,17 +50,17 @@ module Geocodio
|
|
|
50
50
|
# http://api.geocod.io/v1/reverse. Multiple pairs of coordinates will
|
|
51
51
|
# instead submit a POST request.
|
|
52
52
|
#
|
|
53
|
-
# @param
|
|
53
|
+
# @param [Array<String>, Array<Hash>] coordinates one or more pairs of coordinates
|
|
54
|
+
# @param [Hash] options an options hash
|
|
55
|
+
# @option options [Array] :fields a list of option fields to request (possible: "cd" or "cd113", "stateleg", "school", "timezone")
|
|
54
56
|
# @return [Geocodio::Address, Array<Geocodio::AddressSet>] One or more Address Sets
|
|
55
|
-
def reverse_geocode(
|
|
56
|
-
coordinates = coordinates.first if coordinates.first.is_a?(Array)
|
|
57
|
-
|
|
57
|
+
def reverse_geocode(coordinates, options = {})
|
|
58
58
|
if coordinates.size < 1
|
|
59
59
|
raise ArgumentError, 'You must provide coordinates to reverse geocode.'
|
|
60
60
|
elsif coordinates.size == 1
|
|
61
|
-
reverse_geocode_single(coordinates.first)
|
|
61
|
+
reverse_geocode_single(coordinates.first, options)
|
|
62
62
|
else
|
|
63
|
-
reverse_geocode_batch(coordinates)
|
|
63
|
+
reverse_geocode_batch(coordinates, options)
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
alias :reverse :reverse_geocode
|
|
@@ -84,31 +84,40 @@ module Geocodio
|
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
def geocode_single(address)
|
|
88
|
-
|
|
87
|
+
def geocode_single(address, options = {})
|
|
88
|
+
params = { q: address }
|
|
89
|
+
params[:fields] = options[:fields].join(',') if options[:fields]
|
|
90
|
+
|
|
91
|
+
response = get '/geocode', params
|
|
89
92
|
addresses = parse_results(response)
|
|
90
93
|
|
|
91
94
|
AddressSet.new(address, *addresses)
|
|
92
95
|
end
|
|
93
96
|
|
|
94
|
-
def reverse_geocode_single(pair)
|
|
97
|
+
def reverse_geocode_single(pair, options = {})
|
|
95
98
|
pair = normalize_coordinates(pair)
|
|
99
|
+
params = { q: pair }
|
|
100
|
+
params[:fields] = options[:fields].join(',') if options[:fields]
|
|
96
101
|
|
|
97
|
-
response = get '/reverse',
|
|
102
|
+
response = get '/reverse', params
|
|
98
103
|
addresses = parse_results(response)
|
|
99
104
|
|
|
100
105
|
AddressSet.new(pair, *addresses)
|
|
101
106
|
end
|
|
102
107
|
|
|
103
|
-
def geocode_batch(addresses)
|
|
104
|
-
|
|
108
|
+
def geocode_batch(addresses, options = {})
|
|
109
|
+
options[:fields] = options[:fields].join(',') if options[:fields]
|
|
110
|
+
|
|
111
|
+
response = post '/geocode', options, body: addresses
|
|
105
112
|
|
|
106
113
|
parse_nested_results(response)
|
|
107
114
|
end
|
|
108
115
|
|
|
109
|
-
def reverse_geocode_batch(pairs)
|
|
116
|
+
def reverse_geocode_batch(pairs, options = {})
|
|
110
117
|
pairs.map! { |pair| normalize_coordinates(pair) }
|
|
111
|
-
|
|
118
|
+
options[:fields] = options[:fields].join(',') if options[:fields]
|
|
119
|
+
|
|
120
|
+
response = post '/reverse', options, body: pairs
|
|
112
121
|
|
|
113
122
|
parse_nested_results(response)
|
|
114
123
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Geocodio
|
|
2
|
+
class CongressionalDistrict
|
|
3
|
+
attr_reader :name
|
|
4
|
+
attr_reader :district_number
|
|
5
|
+
attr_reader :congress_number
|
|
6
|
+
|
|
7
|
+
def initialize(payload = {})
|
|
8
|
+
@name = payload['name']
|
|
9
|
+
@district_number = payload['district_number'].to_i
|
|
10
|
+
@congress_number = payload['congress_number'].to_i
|
|
11
|
+
@congress_years = payload['congress_years']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def congress_years
|
|
15
|
+
first, last = @congress_years.split('-').map(&:to_i)
|
|
16
|
+
first..last
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Geocodio
|
|
2
|
+
class SchoolDistrict
|
|
3
|
+
attr_reader :name
|
|
4
|
+
attr_reader :lea_code
|
|
5
|
+
attr_reader :grade_low
|
|
6
|
+
attr_reader :grade_high
|
|
7
|
+
|
|
8
|
+
def initialize(payload = {})
|
|
9
|
+
@name = payload['name']
|
|
10
|
+
@lea_code = payload['lea_code']
|
|
11
|
+
@grade_low = payload['grade_low']
|
|
12
|
+
@grade_high = payload['grade_high']
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Geocodio
|
|
2
|
+
class Timezone
|
|
3
|
+
attr_reader :name
|
|
4
|
+
attr_reader :utc_offset
|
|
5
|
+
|
|
6
|
+
def initialize(payload = {})
|
|
7
|
+
@name = payload['name']
|
|
8
|
+
@utc_offset = payload['utc_offset']
|
|
9
|
+
@observes_dst = payload['observes_dst']
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def observes_dst?
|
|
13
|
+
!!@observes_dst
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/lib/geocodio/version.rb
CHANGED
data/spec/address_set_spec.rb
CHANGED
data/spec/address_spec.rb
CHANGED
|
@@ -56,7 +56,7 @@ describe Geocodio::Address do
|
|
|
56
56
|
context 'when geocoded' do
|
|
57
57
|
subject(:address) do
|
|
58
58
|
VCR.use_cassette('geocode') do
|
|
59
|
-
geocodio.geocode('54 West Colorado Boulevard Pasadena CA 91105').best
|
|
59
|
+
geocodio.geocode(['54 West Colorado Boulevard Pasadena CA 91105']).best
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -101,5 +101,41 @@ describe Geocodio::Address do
|
|
|
101
101
|
it 'has an accuracy' do
|
|
102
102
|
expect(address.accuracy).to eq(1)
|
|
103
103
|
end
|
|
104
|
+
|
|
105
|
+
context 'with additional fields' do
|
|
106
|
+
subject(:address) do
|
|
107
|
+
VCR.use_cassette('geocode_with_fields') do
|
|
108
|
+
geocodio.geocode(['54 West Colorado Boulevard Pasadena CA 91105'], fields: %w[cd stateleg school timezone]).best
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it 'has a congressional district' do
|
|
113
|
+
expect(address.congressional_district).to be_a(Geocodio::CongressionalDistrict)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'has a house district' do
|
|
117
|
+
expect(address.house_district).to be_a(Geocodio::StateLegislativeDistrict)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'has a senate district' do
|
|
121
|
+
expect(address.senate_district).to be_a(Geocodio::StateLegislativeDistrict)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it 'has a unified school district' do
|
|
125
|
+
expect(address.unified_school_district).to be_a(Geocodio::SchoolDistrict)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it 'could have an elementary school district' do
|
|
129
|
+
expect(address.elementary_school_district).to be_nil
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it 'could have a secondary school district' do
|
|
133
|
+
expect(address.secondary_school_district).to be_nil
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it 'has a timezone' do
|
|
137
|
+
expect(address.timezone).to be_a(Geocodio::Timezone)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
104
140
|
end
|
|
105
141
|
end
|
data/spec/client_spec.rb
CHANGED
|
@@ -7,7 +7,7 @@ describe Geocodio::Client do
|
|
|
7
7
|
|
|
8
8
|
it 'requires an API key' do
|
|
9
9
|
VCR.use_cassette('invalid_key') do
|
|
10
|
-
expect { geocodio.geocode(address) }.to raise_error(Geocodio::Client::Error)
|
|
10
|
+
expect { geocodio.geocode([address]) }.to raise_error(Geocodio::Client::Error)
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -19,94 +19,147 @@ describe Geocodio::Client do
|
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
describe '#geocode' do
|
|
23
|
+
it 'geocodes a single address' do
|
|
24
|
+
VCR.use_cassette('geocode') do
|
|
25
|
+
addresses = geocodio.geocode([address])
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
expect(addresses).to be_a(Geocodio::AddressSet)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
context 'reverse geocoding a single address' do
|
|
32
|
-
it 'uses a string' do
|
|
33
|
-
VCR.use_cassette('reverse') do
|
|
34
|
-
addresses = geocodio.reverse_geocode(coordinates)
|
|
35
|
-
|
|
36
|
-
expect(addresses.size).to eq(3)
|
|
27
|
+
expect(addresses.size).to eq(2)
|
|
37
28
|
expect(addresses).to be_a(Geocodio::AddressSet)
|
|
38
29
|
end
|
|
39
30
|
end
|
|
40
31
|
|
|
41
|
-
it '
|
|
42
|
-
VCR.use_cassette('
|
|
43
|
-
|
|
44
|
-
addresses = geocodio.reverse_geocode(latitude: lat, longitude: lng)
|
|
32
|
+
it 'geocodes a single address with an options hash' do
|
|
33
|
+
VCR.use_cassette('geocode_with_fields') do
|
|
34
|
+
addresses = geocodio.geocode([address], fields: %w[cd stateleg school timezone])
|
|
45
35
|
|
|
46
|
-
expect(addresses.size).to eq(
|
|
36
|
+
expect(addresses.size).to eq(2)
|
|
47
37
|
expect(addresses).to be_a(Geocodio::AddressSet)
|
|
48
38
|
end
|
|
49
39
|
end
|
|
50
|
-
end
|
|
51
40
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
it 'geocodes multiple addresses' do
|
|
42
|
+
VCR.use_cassette('batch_geocode') do
|
|
43
|
+
addresses = [
|
|
44
|
+
'1 Infinite Loop Cupertino CA 95014',
|
|
45
|
+
'54 West Colorado Boulevard Pasadena CA 91105',
|
|
46
|
+
'826 Howard Street San Francisco CA 94103'
|
|
47
|
+
]
|
|
59
48
|
|
|
60
|
-
|
|
49
|
+
addresses = geocodio.geocode(addresses)
|
|
61
50
|
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
expect(addresses.size).to eq(3)
|
|
52
|
+
addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
|
|
53
|
+
end
|
|
64
54
|
end
|
|
65
|
-
end
|
|
66
55
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
'
|
|
72
|
-
'
|
|
73
|
-
'37.7815,-122.404933'
|
|
56
|
+
it 'geocodes multiple addresses with an options hash' do
|
|
57
|
+
VCR.use_cassette('batch_geocode_with_fields') do
|
|
58
|
+
addresses = [
|
|
59
|
+
'1 Infinite Loop Cupertino CA 95014',
|
|
60
|
+
'54 West Colorado Boulevard Pasadena CA 91105',
|
|
61
|
+
'826 Howard Street San Francisco CA 94103'
|
|
74
62
|
]
|
|
75
63
|
|
|
76
|
-
addresses = geocodio.
|
|
64
|
+
addresses = geocodio.geocode(addresses, fields: %w[cd stateleg school timezone])
|
|
77
65
|
|
|
78
66
|
expect(addresses.size).to eq(3)
|
|
79
67
|
addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
|
|
80
68
|
end
|
|
81
69
|
end
|
|
70
|
+
end
|
|
82
71
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
{ latitude: 37.7815, longitude: -122.404933 }
|
|
89
|
-
]
|
|
72
|
+
describe '#reverse_geocode' do
|
|
73
|
+
context 'with a single address' do
|
|
74
|
+
it 'uses strings' do
|
|
75
|
+
VCR.use_cassette('reverse') do
|
|
76
|
+
addresses = geocodio.reverse_geocode([coordinates])
|
|
90
77
|
|
|
91
|
-
|
|
78
|
+
expect(addresses.size).to eq(3)
|
|
79
|
+
expect(addresses).to be_a(Geocodio::AddressSet)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
92
82
|
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
it 'uses hashes' do
|
|
84
|
+
VCR.use_cassette('reverse') do
|
|
85
|
+
lat, lng = coordinates.split(',')
|
|
86
|
+
addresses = geocodio.reverse_geocode([{ latitude: lat, longitude: lng }])
|
|
87
|
+
|
|
88
|
+
expect(addresses.size).to eq(3)
|
|
89
|
+
expect(addresses).to be_a(Geocodio::AddressSet)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'accepts an options hash' do
|
|
94
|
+
VCR.use_cassette('reverse_with_fields') do
|
|
95
|
+
lat, lng = coordinates.split(',')
|
|
96
|
+
addresses = geocodio.reverse_geocode([{ latitude: lat, longitude: lng} ], fields: %w[cd stateleg school timezone])
|
|
97
|
+
|
|
98
|
+
expect(addresses.size).to eq(3)
|
|
99
|
+
expect(addresses).to be_a(Geocodio::AddressSet)
|
|
100
|
+
end
|
|
95
101
|
end
|
|
96
102
|
end
|
|
97
103
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
context 'reverse geocoding multiple addresses' do
|
|
105
|
+
it 'uses strings' do
|
|
106
|
+
VCR.use_cassette('batch_reverse') do
|
|
107
|
+
coordinate_pairs = [
|
|
108
|
+
'37.331669,-122.03074',
|
|
109
|
+
'34.145760590909,-118.15204363636',
|
|
110
|
+
'37.7815,-122.404933'
|
|
111
|
+
]
|
|
105
112
|
|
|
106
|
-
|
|
113
|
+
addresses = geocodio.reverse_geocode(coordinate_pairs)
|
|
107
114
|
|
|
108
|
-
|
|
109
|
-
|
|
115
|
+
expect(addresses.size).to eq(3)
|
|
116
|
+
addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'uses hashes' do
|
|
121
|
+
VCR.use_cassette('batch_reverse') do
|
|
122
|
+
coordinate_pairs = [
|
|
123
|
+
{ latitude: 37.331669, longitude: -122.03074 },
|
|
124
|
+
{ latitude: 34.145760590909, longitude: -118.15204363636 },
|
|
125
|
+
{ latitude: 37.7815, longitude: -122.404933 }
|
|
126
|
+
]
|
|
127
|
+
|
|
128
|
+
addresses = geocodio.reverse_geocode(coordinate_pairs)
|
|
129
|
+
|
|
130
|
+
expect(addresses.size).to eq(3)
|
|
131
|
+
addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it 'uses an arbitrary combination of strings and hashes' do
|
|
136
|
+
VCR.use_cassette('batch_reverse') do
|
|
137
|
+
coordinate_pairs = [
|
|
138
|
+
{ latitude: 37.331669, longitude: -122.03074 },
|
|
139
|
+
'34.145760590909,-118.15204363636',
|
|
140
|
+
{ latitude: 37.7815, longitude: -122.404933 }
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
addresses = geocodio.reverse_geocode(coordinate_pairs)
|
|
144
|
+
|
|
145
|
+
expect(addresses.size).to eq(3)
|
|
146
|
+
addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it 'accepts an options hash' do
|
|
151
|
+
VCR.use_cassette('batch_reverse_with_fields') do
|
|
152
|
+
coordinate_pairs = [
|
|
153
|
+
{ latitude: 37.331669, longitude: -122.03074 },
|
|
154
|
+
'34.145760590909,-118.15204363636',
|
|
155
|
+
{ latitude: 37.7815, longitude: -122.404933 }
|
|
156
|
+
]
|
|
157
|
+
|
|
158
|
+
addresses = geocodio.reverse_geocode(coordinate_pairs, fields: %w[cd stateleg school timezone])
|
|
159
|
+
|
|
160
|
+
expect(addresses.size).to eq(3)
|
|
161
|
+
addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
|
|
162
|
+
end
|
|
110
163
|
end
|
|
111
164
|
end
|
|
112
165
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Geocodio::CongressionalDistrict do
|
|
4
|
+
let(:geocodio) { Geocodio::Client.new }
|
|
5
|
+
|
|
6
|
+
subject(:district) do
|
|
7
|
+
VCR.use_cassette('geocode_with_fields') do
|
|
8
|
+
geocodio.geocode(['54 West Colorado Boulevard Pasadena CA 91105'], fields: %w[cd stateleg school timezone]).best.congressional_district
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'has a name' do
|
|
13
|
+
expect(district.name).to eq("Congressional District 27")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'has a district_number' do
|
|
17
|
+
expect(district.district_number).to eq(27)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'has a congress_number' do
|
|
21
|
+
expect(district.congress_number).to eq(113)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'has a congress_years' do
|
|
25
|
+
expect(district.congress_years).to eq(2013..2015)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Geocodio::SchoolDistrict do
|
|
4
|
+
let(:geocodio) { Geocodio::Client.new }
|
|
5
|
+
|
|
6
|
+
subject(:district) do
|
|
7
|
+
VCR.use_cassette('geocode_with_fields') do
|
|
8
|
+
geocodio.geocode(['54 West Colorado Boulevard Pasadena CA 91105'], fields: %w[cd stateleg school timezone]).best.unified_school_district
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'has a name' do
|
|
13
|
+
expect(district.name).to eq('Pasadena Unified School District')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'has a lea_code' do
|
|
17
|
+
expect(district.lea_code).to eq('29940')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'has a grade_low' do
|
|
21
|
+
expect(district.grade_low).to eq('KG')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'has a grade_high' do
|
|
25
|
+
expect(district.grade_high).to eq('12')
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Geocodio::StateLegislativeDistrict do
|
|
4
|
+
let(:geocodio) { Geocodio::Client.new }
|
|
5
|
+
|
|
6
|
+
subject(:district) do
|
|
7
|
+
VCR.use_cassette('geocode_with_fields') do
|
|
8
|
+
geocodio.geocode(['54 West Colorado Boulevard Pasadena CA 91105'], fields: %w[cd stateleg school timezone]).best.house_district
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'has a name' do
|
|
13
|
+
expect(district.name).to eq("Assembly District 41")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'has a district_number' do
|
|
17
|
+
expect(district.district_number).to eq(41)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Geocodio::Timezone do
|
|
4
|
+
let(:geocodio) { Geocodio::Client.new }
|
|
5
|
+
|
|
6
|
+
subject(:timezone) do
|
|
7
|
+
VCR.use_cassette('geocode_with_fields') do
|
|
8
|
+
geocodio.geocode(['54 West Colorado Boulevard Pasadena CA 91105'], fields: %w[cd stateleg school timezone]).best.timezone
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'has a name' do
|
|
13
|
+
expect(timezone.name).to eq('PST')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'has a utc_offset' do
|
|
17
|
+
expect(timezone.utc_offset).to eq(-8)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'observes DST' do
|
|
21
|
+
expect(timezone).to be_observes_dst
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: post
|
|
5
|
+
uri: http://api.geocod.io/v1/geocode?api_key=secret_api_key&fields=cd,stateleg,school,timezone
|
|
6
|
+
body:
|
|
7
|
+
encoding: UTF-8
|
|
8
|
+
string: '["1 Infinite Loop Cupertino CA 95014","54 West Colorado Boulevard Pasadena
|
|
9
|
+
CA 91105","826 Howard Street San Francisco CA 94103"]'
|
|
10
|
+
headers:
|
|
11
|
+
Accept:
|
|
12
|
+
- application/json
|
|
13
|
+
Accept-Encoding:
|
|
14
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
15
|
+
User-Agent:
|
|
16
|
+
- Ruby
|
|
17
|
+
Content-Type:
|
|
18
|
+
- application/json
|
|
19
|
+
response:
|
|
20
|
+
status:
|
|
21
|
+
code: 200
|
|
22
|
+
message: OK
|
|
23
|
+
headers:
|
|
24
|
+
Server:
|
|
25
|
+
- nginx/1.2.1
|
|
26
|
+
Content-Type:
|
|
27
|
+
- application/json
|
|
28
|
+
Transfer-Encoding:
|
|
29
|
+
- chunked
|
|
30
|
+
Connection:
|
|
31
|
+
- keep-alive
|
|
32
|
+
Cache-Control:
|
|
33
|
+
- no-cache
|
|
34
|
+
Date:
|
|
35
|
+
- Fri, 28 Mar 2014 16:00:59 GMT
|
|
36
|
+
Access-Control-Allow-Origin:
|
|
37
|
+
- "*"
|
|
38
|
+
body:
|
|
39
|
+
encoding: UTF-8
|
|
40
|
+
string: '{"results":[{"query":"1 Infinite Loop Cupertino CA 95014","response":{"input":{"address_components":{"number":"1","street":"Infinite","suffix":"Loop","city":"Cupertino","state":"CA","zip":"95014"},"formatted_address":"1
|
|
41
|
+
Infinite Loop, Cupertino, CA 95014"},"results":[{"address_components":{"number":"1","street":"Infinite","suffix":"Loop","city":"Cupertino","county":"Santa
|
|
42
|
+
Clara County","state":"CA","zip":"95014"},"formatted_address":"1 Infinite
|
|
43
|
+
Loop, Cupertino, CA 95014","location":{"lat":37.331669,"lng":-122.03074},"accuracy":1,"fields":{"congressional_district":{"name":"Congressional
|
|
44
|
+
District 17","district_number":17,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
45
|
+
Senate District 15","district_number":15},"house":{"name":"Assembly District
|
|
46
|
+
15","district_number":15}},"school_districts":{"secondary":{"name":"Fremont
|
|
47
|
+
Union High School District","lea_code":"14430","grade_low":"09","grade_high":"12"},"elementary":{"name":"Cupertino
|
|
48
|
+
Union Elementary School District","lea_code":"10290","grade_low":"KG","grade_high":"08"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}},{"query":"54
|
|
49
|
+
West Colorado Boulevard Pasadena CA 91105","response":{"input":{"address_components":{"number":"54","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","state":"CA","zip":"91105"},"formatted_address":"54
|
|
50
|
+
W Colorado Blvd, Pasadena, CA 91105"},"results":[{"address_components":{"number":"54","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","county":"Los
|
|
51
|
+
Angeles County","state":"CA","zip":"91105"},"formatted_address":"54 W Colorado
|
|
52
|
+
Blvd, Pasadena, CA 91105","location":{"lat":34.145760590909,"lng":-118.15204363636},"accuracy":1,"fields":{"congressional_district":{"name":"Congressional
|
|
53
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
54
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
55
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
56
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"54","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","county":"Los
|
|
57
|
+
Angeles County","state":"CA","zip":"91105"},"formatted_address":"54 W Colorado
|
|
58
|
+
Blvd, Pasadena, CA 91105","location":{"lat":34.1457634625,"lng":-118.15170725},"accuracy":0.8,"fields":{"congressional_district":{"name":"Congressional
|
|
59
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
60
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
61
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
62
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}},{"query":"826
|
|
63
|
+
Howard Street San Francisco CA 94103","response":{"input":{"address_components":{"number":"826","street":"Howard","suffix":"St","city":"San
|
|
64
|
+
Francisco","state":"CA","zip":"94103"},"formatted_address":"826 Howard St,
|
|
65
|
+
San Francisco, CA 94103"},"results":[{"address_components":{"number":"826","street":"Howard","suffix":"St","city":"San
|
|
66
|
+
Francisco","county":"San Francisco County","state":"CA","zip":"94103"},"formatted_address":"826
|
|
67
|
+
Howard St, San Francisco, CA 94103","location":{"lat":37.7815,"lng":-122.404933},"accuracy":1,"fields":{"congressional_district":{"name":"Congressional
|
|
68
|
+
District 12","district_number":12,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
69
|
+
Senate District 11","district_number":11},"house":{"name":"Assembly District
|
|
70
|
+
11","district_number":11}},"school_districts":[],"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"826","street":"Howard","suffix":"St","city":"San
|
|
71
|
+
Francisco","county":"San Francisco County","state":"CA","zip":"94103"},"formatted_address":"826
|
|
72
|
+
Howard St, San Francisco, CA 94103","location":{"lat":37.781552539474,"lng":-122.40486656579},"accuracy":0.8,"fields":{"congressional_district":{"name":"Congressional
|
|
73
|
+
District 12","district_number":12,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
74
|
+
Senate District 11","district_number":11},"house":{"name":"Assembly District
|
|
75
|
+
11","district_number":11}},"school_districts":[],"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}}]}'
|
|
76
|
+
http_version:
|
|
77
|
+
recorded_at: Fri, 28 Mar 2014 16:00:59 GMT
|
|
78
|
+
recorded_with: VCR 2.8.0
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: post
|
|
5
|
+
uri: http://api.geocod.io/v1/reverse?api_key=secret_api_key&fields=cd,stateleg,school,timezone
|
|
6
|
+
body:
|
|
7
|
+
encoding: UTF-8
|
|
8
|
+
string: '["37.331669,-122.03074","34.145760590909,-118.15204363636","37.7815,-122.404933"]'
|
|
9
|
+
headers:
|
|
10
|
+
Accept:
|
|
11
|
+
- application/json
|
|
12
|
+
Accept-Encoding:
|
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
14
|
+
User-Agent:
|
|
15
|
+
- Ruby
|
|
16
|
+
Content-Type:
|
|
17
|
+
- application/json
|
|
18
|
+
response:
|
|
19
|
+
status:
|
|
20
|
+
code: 200
|
|
21
|
+
message: OK
|
|
22
|
+
headers:
|
|
23
|
+
Server:
|
|
24
|
+
- nginx/1.2.1
|
|
25
|
+
Content-Type:
|
|
26
|
+
- application/json
|
|
27
|
+
Transfer-Encoding:
|
|
28
|
+
- chunked
|
|
29
|
+
Connection:
|
|
30
|
+
- keep-alive
|
|
31
|
+
Cache-Control:
|
|
32
|
+
- no-cache
|
|
33
|
+
Date:
|
|
34
|
+
- Fri, 28 Mar 2014 16:25:49 GMT
|
|
35
|
+
Access-Control-Allow-Origin:
|
|
36
|
+
- "*"
|
|
37
|
+
body:
|
|
38
|
+
encoding: UTF-8
|
|
39
|
+
string: '{"results":[{"query":"37.331669,-122.03074","response":{"results":[{"address_components":{"number":"91","street":"Infinite","suffix":"Loop","city":"Cupertino","county":"Santa
|
|
40
|
+
Clara County","state":"CA","zip":"95014"},"formatted_address":"91 Infinite
|
|
41
|
+
Loop, Cupertino, CA 95014","location":{"lat":37.332709,"lng":-122.03071},"accuracy":1,"fields":{"congressional_district":{"name":"Congressional
|
|
42
|
+
District 17","district_number":17,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
43
|
+
Senate District 15","district_number":15},"house":{"name":"Assembly District
|
|
44
|
+
15","district_number":15}},"school_districts":{"secondary":{"name":"Fremont
|
|
45
|
+
Union High School District","lea_code":"14430","grade_low":"09","grade_high":"12"},"elementary":{"name":"Cupertino
|
|
46
|
+
Union Elementary School District","lea_code":"10290","grade_low":"KG","grade_high":"08"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"19116","street":"Mariani","suffix":"Ave","city":"Cupertino","county":"Santa
|
|
47
|
+
Clara County","state":"CA","zip":"95014"},"formatted_address":"19116 Mariani
|
|
48
|
+
Ave, Cupertino, CA 95014","location":{"lat":37.330407,"lng":-122.030873},"accuracy":0.28,"fields":{"congressional_district":{"name":"Congressional
|
|
49
|
+
District 17","district_number":17,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
50
|
+
Senate District 15","district_number":15},"house":{"name":"Assembly District
|
|
51
|
+
15","district_number":15}},"school_districts":{"secondary":{"name":"Fremont
|
|
52
|
+
Union High School District","lea_code":"14430","grade_low":"09","grade_high":"12"},"elementary":{"name":"Cupertino
|
|
53
|
+
Union Elementary School District","lea_code":"10290","grade_low":"KG","grade_high":"08"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"19118","street":"Mariani","suffix":"Ave","city":"Cupertino","county":"Santa
|
|
54
|
+
Clara County","state":"CA","zip":"95014"},"formatted_address":"19118 Mariani
|
|
55
|
+
Ave, Cupertino, CA 95014","location":{"lat":37.330489,"lng":-122.0305},"accuracy":0.28,"fields":{"congressional_district":{"name":"Congressional
|
|
56
|
+
District 17","district_number":17,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
57
|
+
Senate District 15","district_number":15},"house":{"name":"Assembly District
|
|
58
|
+
15","district_number":15}},"school_districts":{"secondary":{"name":"Fremont
|
|
59
|
+
Union High School District","lea_code":"14430","grade_low":"09","grade_high":"12"},"elementary":{"name":"Cupertino
|
|
60
|
+
Union Elementary School District","lea_code":"10290","grade_low":"KG","grade_high":"08"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}},{"query":"34.145760590909,-118.15204363636","response":{"results":[{"address_components":{"number":"43","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","county":"Los
|
|
61
|
+
Angeles County","state":"CA","zip":"91105"},"formatted_address":"43 W Colorado
|
|
62
|
+
Blvd, Pasadena, CA 91105","location":{"lat":34.145766,"lng":-118.15141},"accuracy":1,"fields":{"congressional_district":{"name":"Congressional
|
|
63
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
64
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
65
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
66
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"1","predirectional":"N","street":"De
|
|
67
|
+
Lacey","suffix":"Ave","city":"Pasadena","county":"Los Angeles County","state":"CA","zip":"91103"},"formatted_address":"1
|
|
68
|
+
N De Lacey Ave, Pasadena, CA 91103","location":{"lat":34.145759,"lng":-118.15223},"accuracy":0,"fields":{"congressional_district":{"name":"Congressional
|
|
69
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
70
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
71
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
72
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"1","predirectional":"S","street":"De
|
|
73
|
+
Lacey","suffix":"Ave","city":"Pasadena","county":"Los Angeles County","state":"CA","zip":"91105"},"formatted_address":"1
|
|
74
|
+
S De Lacey Ave, Pasadena, CA 91105","location":{"lat":34.145759,"lng":-118.15223},"accuracy":0,"fields":{"congressional_district":{"name":"Congressional
|
|
75
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
76
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
77
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
78
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}},{"query":"37.7815,-122.404933","response":{"results":[{"address_components":{"number":"177","street":"5th","suffix":"St","city":"San
|
|
79
|
+
Francisco","county":"San Francisco County","state":"CA","zip":"94102"},"formatted_address":"177
|
|
80
|
+
5th St, San Francisco, CA 94102","location":{"lat":37.781925,"lng":-122.405466},"accuracy":0,"fields":{"congressional_district":{"name":"Congressional
|
|
81
|
+
District 12","district_number":12,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
82
|
+
Senate District 11","district_number":11},"house":{"name":"Assembly District
|
|
83
|
+
11","district_number":11}},"school_districts":[],"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"861","street":"Howard","suffix":"St","city":"San
|
|
84
|
+
Francisco","county":"San Francisco County","state":"CA","zip":"94103"},"formatted_address":"861
|
|
85
|
+
Howard St, San Francisco, CA 94103","location":{"lat":37.782831,"lng":-122.40325},"accuracy":0,"fields":{"congressional_district":{"name":"Congressional
|
|
86
|
+
District 12","district_number":12,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
87
|
+
Senate District 11","district_number":11},"house":{"name":"Assembly District
|
|
88
|
+
11","district_number":11}},"school_districts":[],"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"900","street":"Howard","suffix":"St","city":"San
|
|
89
|
+
Francisco","county":"San Francisco County","state":"CA","zip":"94103"},"formatted_address":"900
|
|
90
|
+
Howard St, San Francisco, CA 94103","location":{"lat":37.7815,"lng":-122.404933},"accuracy":0,"fields":{"congressional_district":{"name":"Congressional
|
|
91
|
+
District 12","district_number":12,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
92
|
+
Senate District 11","district_number":11},"house":{"name":"Assembly District
|
|
93
|
+
11","district_number":11}},"school_districts":[],"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}}]}'
|
|
94
|
+
http_version:
|
|
95
|
+
recorded_at: Fri, 28 Mar 2014 16:25:49 GMT
|
|
96
|
+
recorded_with: VCR 2.8.0
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: get
|
|
5
|
+
uri: http://api.geocod.io/v1/geocode?api_key=secret_api_key&fields=cd,stateleg,school,timezone&q=54%20West%20Colorado%20Boulevard%20Pasadena%20CA%2091105
|
|
6
|
+
body:
|
|
7
|
+
encoding: US-ASCII
|
|
8
|
+
string: ''
|
|
9
|
+
headers:
|
|
10
|
+
Accept:
|
|
11
|
+
- application/json
|
|
12
|
+
Accept-Encoding:
|
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
14
|
+
User-Agent:
|
|
15
|
+
- Ruby
|
|
16
|
+
response:
|
|
17
|
+
status:
|
|
18
|
+
code: 200
|
|
19
|
+
message: OK
|
|
20
|
+
headers:
|
|
21
|
+
Server:
|
|
22
|
+
- nginx/1.2.1
|
|
23
|
+
Content-Type:
|
|
24
|
+
- application/json
|
|
25
|
+
Transfer-Encoding:
|
|
26
|
+
- chunked
|
|
27
|
+
Connection:
|
|
28
|
+
- keep-alive
|
|
29
|
+
Cache-Control:
|
|
30
|
+
- no-cache
|
|
31
|
+
Date:
|
|
32
|
+
- Fri, 28 Mar 2014 16:00:06 GMT
|
|
33
|
+
Access-Control-Allow-Origin:
|
|
34
|
+
- "*"
|
|
35
|
+
body:
|
|
36
|
+
encoding: UTF-8
|
|
37
|
+
string: '{"input":{"address_components":{"number":"54","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","state":"CA","zip":"91105"},"formatted_address":"54
|
|
38
|
+
W Colorado Blvd, Pasadena, CA 91105"},"results":[{"address_components":{"number":"54","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","county":"Los
|
|
39
|
+
Angeles County","state":"CA","zip":"91105"},"formatted_address":"54 W Colorado
|
|
40
|
+
Blvd, Pasadena, CA 91105","location":{"lat":34.145760590909,"lng":-118.15204363636},"accuracy":1,"fields":{"congressional_district":{"name":"Congressional
|
|
41
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
42
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
43
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
44
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"54","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","county":"Los
|
|
45
|
+
Angeles County","state":"CA","zip":"91105"},"formatted_address":"54 W Colorado
|
|
46
|
+
Blvd, Pasadena, CA 91105","location":{"lat":34.1457634625,"lng":-118.15170725},"accuracy":0.8,"fields":{"congressional_district":{"name":"Congressional
|
|
47
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
48
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
49
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
50
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}'
|
|
51
|
+
http_version:
|
|
52
|
+
recorded_at: Fri, 28 Mar 2014 16:00:06 GMT
|
|
53
|
+
recorded_with: VCR 2.8.0
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: get
|
|
5
|
+
uri: http://api.geocod.io/v1/reverse?api_key=secret_api_key&fields=cd,stateleg,school,timezone&q=34.145760590909,-118.15204363636
|
|
6
|
+
body:
|
|
7
|
+
encoding: US-ASCII
|
|
8
|
+
string: ''
|
|
9
|
+
headers:
|
|
10
|
+
Accept:
|
|
11
|
+
- application/json
|
|
12
|
+
Accept-Encoding:
|
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
14
|
+
User-Agent:
|
|
15
|
+
- Ruby
|
|
16
|
+
response:
|
|
17
|
+
status:
|
|
18
|
+
code: 200
|
|
19
|
+
message: OK
|
|
20
|
+
headers:
|
|
21
|
+
Server:
|
|
22
|
+
- nginx/1.2.1
|
|
23
|
+
Content-Type:
|
|
24
|
+
- application/json
|
|
25
|
+
Transfer-Encoding:
|
|
26
|
+
- chunked
|
|
27
|
+
Connection:
|
|
28
|
+
- keep-alive
|
|
29
|
+
Cache-Control:
|
|
30
|
+
- no-cache
|
|
31
|
+
Date:
|
|
32
|
+
- Fri, 28 Mar 2014 16:27:32 GMT
|
|
33
|
+
Access-Control-Allow-Origin:
|
|
34
|
+
- "*"
|
|
35
|
+
body:
|
|
36
|
+
encoding: UTF-8
|
|
37
|
+
string: '{"results":[{"address_components":{"number":"43","predirectional":"W","street":"Colorado","suffix":"Blvd","city":"Pasadena","county":"Los
|
|
38
|
+
Angeles County","state":"CA","zip":"91105"},"formatted_address":"43 W Colorado
|
|
39
|
+
Blvd, Pasadena, CA 91105","location":{"lat":34.145766,"lng":-118.15141},"accuracy":1,"fields":{"congressional_district":{"name":"Congressional
|
|
40
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
41
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
42
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
43
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"1","predirectional":"N","street":"De
|
|
44
|
+
Lacey","suffix":"Ave","city":"Pasadena","county":"Los Angeles County","state":"CA","zip":"91103"},"formatted_address":"1
|
|
45
|
+
N De Lacey Ave, Pasadena, CA 91103","location":{"lat":34.145759,"lng":-118.15223},"accuracy":0,"fields":{"congressional_district":{"name":"Congressional
|
|
46
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
47
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
48
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
49
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}},{"address_components":{"number":"1","predirectional":"S","street":"De
|
|
50
|
+
Lacey","suffix":"Ave","city":"Pasadena","county":"Los Angeles County","state":"CA","zip":"91105"},"formatted_address":"1
|
|
51
|
+
S De Lacey Ave, Pasadena, CA 91105","location":{"lat":34.145759,"lng":-118.15223},"accuracy":0,"fields":{"congressional_district":{"name":"Congressional
|
|
52
|
+
District 27","district_number":27,"congress_number":"113th","congress_years":"2013-2015"},"state_legislative_districts":{"senate":{"name":"State
|
|
53
|
+
Senate District 25","district_number":25},"house":{"name":"Assembly District
|
|
54
|
+
41","district_number":41}},"school_districts":{"unified":{"name":"Pasadena
|
|
55
|
+
Unified School District","lea_code":"29940","grade_low":"KG","grade_high":"12"}},"timezone":{"name":"PST","utc_offset":-8,"observes_dst":true}}}]}'
|
|
56
|
+
http_version:
|
|
57
|
+
recorded_at: Fri, 28 Mar 2014 16:27:32 GMT
|
|
58
|
+
recorded_with: VCR 2.8.0
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: geocodio
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Celis
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-02
|
|
11
|
+
date: 2014-04-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: json
|
|
@@ -95,18 +95,30 @@ files:
|
|
|
95
95
|
- lib/geocodio/client.rb
|
|
96
96
|
- lib/geocodio/client/error.rb
|
|
97
97
|
- lib/geocodio/client/response.rb
|
|
98
|
+
- lib/geocodio/congressional_district.rb
|
|
99
|
+
- lib/geocodio/school_district.rb
|
|
100
|
+
- lib/geocodio/state_legislative_district.rb
|
|
101
|
+
- lib/geocodio/timezone.rb
|
|
98
102
|
- lib/geocodio/utils.rb
|
|
99
103
|
- lib/geocodio/version.rb
|
|
100
104
|
- spec/address_set_spec.rb
|
|
101
105
|
- spec/address_spec.rb
|
|
102
106
|
- spec/client_spec.rb
|
|
107
|
+
- spec/congressional_district_spec.rb
|
|
108
|
+
- spec/school_district_spec.rb
|
|
103
109
|
- spec/spec_helper.rb
|
|
110
|
+
- spec/state_legislative_district_spec.rb
|
|
111
|
+
- spec/timezone_spec.rb
|
|
104
112
|
- spec/vcr_cassettes/batch_geocode.yml
|
|
113
|
+
- spec/vcr_cassettes/batch_geocode_with_fields.yml
|
|
105
114
|
- spec/vcr_cassettes/batch_reverse.yml
|
|
115
|
+
- spec/vcr_cassettes/batch_reverse_with_fields.yml
|
|
106
116
|
- spec/vcr_cassettes/geocode.yml
|
|
117
|
+
- spec/vcr_cassettes/geocode_with_fields.yml
|
|
107
118
|
- spec/vcr_cassettes/invalid_key.yml
|
|
108
119
|
- spec/vcr_cassettes/parse.yml
|
|
109
120
|
- spec/vcr_cassettes/reverse.yml
|
|
121
|
+
- spec/vcr_cassettes/reverse_with_fields.yml
|
|
110
122
|
homepage: https://github.com/davidcelis/geocodio
|
|
111
123
|
licenses:
|
|
112
124
|
- MIT
|
|
@@ -127,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
127
139
|
version: '0'
|
|
128
140
|
requirements: []
|
|
129
141
|
rubyforge_project:
|
|
130
|
-
rubygems_version: 2.2.
|
|
142
|
+
rubygems_version: 2.2.2
|
|
131
143
|
signing_key:
|
|
132
144
|
specification_version: 4
|
|
133
145
|
summary: An unofficial Ruby client library for geocod.io
|
|
@@ -135,10 +147,19 @@ test_files:
|
|
|
135
147
|
- spec/address_set_spec.rb
|
|
136
148
|
- spec/address_spec.rb
|
|
137
149
|
- spec/client_spec.rb
|
|
150
|
+
- spec/congressional_district_spec.rb
|
|
151
|
+
- spec/school_district_spec.rb
|
|
138
152
|
- spec/spec_helper.rb
|
|
153
|
+
- spec/state_legislative_district_spec.rb
|
|
154
|
+
- spec/timezone_spec.rb
|
|
139
155
|
- spec/vcr_cassettes/batch_geocode.yml
|
|
156
|
+
- spec/vcr_cassettes/batch_geocode_with_fields.yml
|
|
140
157
|
- spec/vcr_cassettes/batch_reverse.yml
|
|
158
|
+
- spec/vcr_cassettes/batch_reverse_with_fields.yml
|
|
141
159
|
- spec/vcr_cassettes/geocode.yml
|
|
160
|
+
- spec/vcr_cassettes/geocode_with_fields.yml
|
|
142
161
|
- spec/vcr_cassettes/invalid_key.yml
|
|
143
162
|
- spec/vcr_cassettes/parse.yml
|
|
144
163
|
- spec/vcr_cassettes/reverse.yml
|
|
164
|
+
- spec/vcr_cassettes/reverse_with_fields.yml
|
|
165
|
+
has_rdoc:
|