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