geocodio 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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: