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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 527dfc5568d5e04687a5e77ed4be5a618f63d1f0
4
- data.tar.gz: 511078ee7c3cfbd7d8002faf2b1e35fef9f8da3d
3
+ metadata.gz: 6f07d6a0f3badaba67e890b973573eacb03e8af1
4
+ data.tar.gz: d2f2a3b90df9b526199348811d266b8dbf682b8c
5
5
  SHA512:
6
- metadata.gz: ccc773caf2885c4801dd40b647e97b092830349f43fcea0a125325fa9be308da0faaef6416a01de3675b4d9f36ee6cbcf8718815774a3c1d895950d2b776c1ce
7
- data.tar.gz: cffce0a8438f2016369ad80a839987941e45fccdb5aabc2490dc4499813da0731ad54f37989ceb8f0bac6f9b30dd289074c201516d2a284beccd793308e3e287
6
+ metadata.gz: 5eac91722f01e44514b3c668c16ddc0e36575c545b5658cd58892024ee4a5ceb42af4ef4f4f7d97393941ddf4712aa5201fef901cab7647d69146fe181426cd0
7
+ data.tar.gz: 74d43b2b707b96fcf9d73dc0e65ed4956e07e260e951d7051a9f0b0c7370cb69edcbd1ca0a331f682038514ef88de212249630d5091c17567f36e80c2cac866f
@@ -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
- attr_accessor :number
4
- attr_accessor :predirectional
5
- attr_accessor :street
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
- # How accurage geocod.io deemed this result to be given the original query.
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
- attr_accessor :accuracy
23
+ attr_reader :accuracy
20
24
 
21
25
  def initialize(payload = {})
22
- if payload['address_components']
23
- @number = payload['address_components']['number']
24
- @predirectional = payload['address_components']['predirectional']
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
@@ -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 addresses [Array<String>] one or more String addresses
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(*addresses)
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 coordinates [Array<String>, Array<Hash>] one or more pairs of coordinates
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(*coordinates)
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
- response = get '/geocode', q: address
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', q: pair
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
- response = post '/geocode', {}, body: addresses
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
- response = post '/reverse', {}, body: pairs
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,11 @@
1
+ module Geocodio
2
+ class StateLegislativeDistrict
3
+ attr_accessor :name
4
+ attr_accessor :district_number
5
+
6
+ def initialize(payload = {})
7
+ @name = payload['name']
8
+ @district_number = payload['district_number'].to_i
9
+ end
10
+ end
11
+ 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
@@ -1,7 +1,7 @@
1
1
  module Geocodio
2
2
  class Version
3
- MAJOR = 1
4
- MINOR = 1
3
+ MAJOR = 2
4
+ MINOR = 0
5
5
  PATCH = 0
6
6
 
7
7
  def self.to_s
@@ -12,7 +12,7 @@ describe Geocodio::AddressSet do
12
12
 
13
13
  subject(:address_set) do
14
14
  VCR.use_cassette('batch_geocode') do
15
- geocodio.geocode(*addresses).last
15
+ geocodio.geocode(addresses).last
16
16
  end
17
17
  end
18
18
 
@@ -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
@@ -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
- it 'geocodes a single address' do
23
- VCR.use_cassette('geocode') do
24
- addresses = geocodio.geocode(address)
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
- expect(addresses.size).to eq(2)
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 'uses a hash' do
42
- VCR.use_cassette('reverse') do
43
- lat, lng = coordinates.split(',')
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(3)
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
- it 'geocodes multiple addresses' do
53
- VCR.use_cassette('batch_geocode') do
54
- addresses = [
55
- '1 Infinite Loop Cupertino CA 95014',
56
- '54 West Colorado Boulevard Pasadena CA 91105',
57
- '826 Howard Street San Francisco CA 94103'
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
- addresses = geocodio.geocode(*addresses)
49
+ addresses = geocodio.geocode(addresses)
61
50
 
62
- expect(addresses.size).to eq(3)
63
- addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
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
- context 'reverse geocoding multiple addresses' do
68
- it 'uses strings' do
69
- VCR.use_cassette('batch_reverse') do
70
- coordinate_pairs = [
71
- '37.331669,-122.03074',
72
- '34.145760590909,-118.15204363636',
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.reverse_geocode(*coordinate_pairs)
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
- it 'uses hashes' do
84
- VCR.use_cassette('batch_reverse') do
85
- coordinate_pairs = [
86
- { latitude: 37.331669, longitude: -122.03074 },
87
- { latitude: 34.145760590909, longitude: -118.15204363636 },
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
- addresses = geocodio.reverse_geocode(*coordinate_pairs)
78
+ expect(addresses.size).to eq(3)
79
+ expect(addresses).to be_a(Geocodio::AddressSet)
80
+ end
81
+ end
92
82
 
93
- expect(addresses.size).to eq(3)
94
- addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
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
- it 'uses an arbitrary combination of strings and hashes' do
99
- VCR.use_cassette('batch_reverse') do
100
- coordinate_pairs = [
101
- { latitude: 37.331669, longitude: -122.03074 },
102
- '34.145760590909,-118.15204363636',
103
- { latitude: 37.7815, longitude: -122.404933 }
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
- addresses = geocodio.reverse_geocode(*coordinate_pairs)
113
+ addresses = geocodio.reverse_geocode(coordinate_pairs)
107
114
 
108
- expect(addresses.size).to eq(3)
109
- addresses.each { |address| expect(address).to be_a(Geocodio::AddressSet) }
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: 1.1.0
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-03 00:00:00.000000000 Z
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.0
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: