civic_aide 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +454 -0
- data/Rakefile +7 -0
- data/civic_aide.gemspec +29 -0
- data/lib/civic_aide.rb +34 -0
- data/lib/civic_aide/client.rb +71 -0
- data/lib/civic_aide/elections.rb +22 -0
- data/lib/civic_aide/errors.rb +56 -0
- data/lib/civic_aide/hash.rb +36 -0
- data/lib/civic_aide/representatives.rb +16 -0
- data/lib/civic_aide/string.rb +9 -0
- data/lib/civic_aide/version.rb +3 -0
- data/spec/civic_aide/client_spec.rb +62 -0
- data/spec/civic_aide/elections_spec.rb +130 -0
- data/spec/civic_aide/errors_spec.rb +21 -0
- data/spec/civic_aide/hash_spec.rb +61 -0
- data/spec/civic_aide/representatives_spec.rb +137 -0
- data/spec/civic_aide/string_spec.rb +16 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/vcr/elections/all.yml +63 -0
- data/spec/vcr/elections/single.yml +83 -0
- data/spec/vcr/representatives/single.yml +106 -0
- metadata +178 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e03d0a671bc6b095f5761c2e5f07e660863fef87
|
4
|
+
data.tar.gz: 77148f826be45b90e9fcee16a6087f2b1353853f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a194ab4d66d26d4c71da53752a0a10ae5785de5f832bbb255be965db315f943bef1f52290876999650ba93adc1349b72ddb5cfac6671436c53fa2d51422ac2c6
|
7
|
+
data.tar.gz: bb8c4cfed6cc5923528dedfcf4f004300b26e3bfbfaba7829f137cc62a2a5943de13df2f049dc28a7dfe28919c95129bf439b918f45ea7212e0eac31596183ed
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Tyler Pearson
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,454 @@
|
|
1
|
+
# CivicAide
|
2
|
+
|
3
|
+
A (unofficial) Ruby wrapper to interact with the [Google Civic Information API](https://developers.google.com/civic-information/).
|
4
|
+
|
5
|
+
Currently the API only provides information for the United States.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'civic_aide'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install civic_aide
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
### Setup
|
24
|
+
|
25
|
+
The Google Civic Information API requires an API key, so before you start grab a [server API key](https://developers.google.com/civic-information/docs/using_api) from the [Google Cloud Console](https://cloud.google.com/console#/project).
|
26
|
+
|
27
|
+
The current default API limits for the Google Civic Information API are 1/request/second/user and 25,000 requests/day.
|
28
|
+
|
29
|
+
### Response
|
30
|
+
|
31
|
+
All responses are wrapped in a [hashie](https://github.com/intridea/hashie) object that can be accessed in a number of ways. All methods have been rubyify'ed **but** those matching [Open Civic Data identifiers](https://github.com/opencivicdata/ocd-division-ids) (e.g. `ocd-division/country:us/state:nc/county:durham`).
|
32
|
+
|
33
|
+
Additionally, to avoid clashing with the [Array#zip Ruby method](http://apidock.com/ruby/Array/zip), any `zip` address fields in the API response have been renamed to `zip_code`.
|
34
|
+
|
35
|
+
### Configuration
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
google_api_key = `ABCaSyD5aMsdmaXxHc7aiUyYuVXtCICV-y_PWnf5w`
|
39
|
+
client = CivicAide::Client.new(google_api_key)
|
40
|
+
```
|
41
|
+
|
42
|
+
Alternatively, the API key can be set with global configuration.
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
CivicAide.api_key = "ABCaSyD5aMsdmaXxHc7aiUyYuVXtCICV-y_PWnf5w"
|
46
|
+
client = CivicAide::Client.new
|
47
|
+
```
|
48
|
+
|
49
|
+
## Resources
|
50
|
+
|
51
|
+
### [Elections](https://developers.google.com/civic-information/docs/us_v1/elections)
|
52
|
+
|
53
|
+
#### All elections
|
54
|
+
|
55
|
+
To fetch a list of all available elections and their ids.
|
56
|
+
|
57
|
+
`client.elections.all`
|
58
|
+
|
59
|
+
##### Sample response
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
{"elections"=>
|
63
|
+
[{"id"=>"2000", "name"=>"VIP Test Election", "election_day"=>"2015-06-06"},
|
64
|
+
{"id"=>"4000",
|
65
|
+
"name"=>"U.S. 2012 General Election",
|
66
|
+
"election_day"=>"2012-11-06"},
|
67
|
+
{"id"=>"4001",
|
68
|
+
"name"=>"Los Angeles City Primary",
|
69
|
+
"election_day"=>"2013-03-05"},
|
70
|
+
{"id"=>"4002",
|
71
|
+
"name"=>"California Combined Special Elections",
|
72
|
+
"election_day"=>"2013-03-12"},
|
73
|
+
{"id"=>"4003",
|
74
|
+
"name"=>"South Carolina HD-01 Special Primary",
|
75
|
+
"election_day"=>"2013-03-19"},
|
76
|
+
{"id"=>"4004",
|
77
|
+
"name"=>"California Special Election SD-32",
|
78
|
+
"election_day"=>"2013-05-14"},
|
79
|
+
{"id"=>"4005",
|
80
|
+
"name"=>"Los Angeles City Election",
|
81
|
+
"election_day"=>"2013-05-21"},
|
82
|
+
{"id"=>"4006",
|
83
|
+
"name"=>"South Carolina HD-01",
|
84
|
+
"election_day"=>"2013-05-07"},
|
85
|
+
{"id"=>"4007", "name"=>"New Jersey Primary", "election_day"=>"2013-06-04"},
|
86
|
+
{"id"=>"4008", "name"=>"Virginia Primary", "election_day"=>"2013-06-11"},
|
87
|
+
{"id"=>"4009",
|
88
|
+
"name"=>"Delaware Presidential Primary 2012",
|
89
|
+
"election_day"=>"2013-09-01"},
|
90
|
+
{"id"=>"4010",
|
91
|
+
"name"=>"NYC 2013 Mayoral Primary",
|
92
|
+
"election_day"=>"2013-09-10"},
|
93
|
+
{"id"=>"4011",
|
94
|
+
"name"=>"NYC 2013 Mayoral Primary Runoff",
|
95
|
+
"election_day"=>"2013-10-01"},
|
96
|
+
{"id"=>"4012",
|
97
|
+
"name"=>"NJ 2013 U.S. Senate Special Election",
|
98
|
+
"election_day"=>"2013-10-16"},
|
99
|
+
{"id"=>"4013",
|
100
|
+
"name"=>"NYC 2013 Mayoral Election",
|
101
|
+
"election_day"=>"2013-11-05"},
|
102
|
+
{"id"=>"4014", "name"=>"NJ State Election", "election_day"=>"2013-11-05"},
|
103
|
+
{"id"=>"4015", "name"=>"VA State Election", "election_day"=>"2013-11-05"},
|
104
|
+
{"id"=>"4016",
|
105
|
+
"name"=>"MN 2013 Municipal General",
|
106
|
+
"election_day"=>"2013-11-05"}]}
|
107
|
+
```
|
108
|
+
|
109
|
+
#### Find election info by address
|
110
|
+
|
111
|
+
After finding the id for the election you want, pass the election id and the voter's registered address.
|
112
|
+
|
113
|
+
`client.elections(4015).at('4910 Willet Drive, Annandale, VA 22003')`
|
114
|
+
|
115
|
+
##### Sample Response
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
{"election"=>
|
119
|
+
{"id"=>"4015", "name"=>"VA State Election", "election_day"=>"2013-11-05"},
|
120
|
+
"normalized_input"=>
|
121
|
+
{"line1"=>"4910 willet dr",
|
122
|
+
"city"=>"annandale",
|
123
|
+
"state"=>"VA",
|
124
|
+
"zip_code"=>"22003"},
|
125
|
+
"contests"=>
|
126
|
+
[{"type"=>"general",
|
127
|
+
"special"=>"no",
|
128
|
+
"office"=>"Governor",
|
129
|
+
"district"=>{"name"=>"Statewide", "scope"=>"statewide"},
|
130
|
+
"ballot_placement"=>"4",
|
131
|
+
"candidates"=>
|
132
|
+
[{"name"=>"Ken T. Cuccinelli II",
|
133
|
+
"party"=>"Republican",
|
134
|
+
"candidate_url"=>"http://www.cuccinelli.com",
|
135
|
+
"phone"=>"8047863808",
|
136
|
+
"email"=>"ken@cuccinelli.com"},
|
137
|
+
{"name"=>"Robert C. Sarvis",
|
138
|
+
"party"=>"Libertarian",
|
139
|
+
"candidate_url"=>"http://www.robertsarvis.com",
|
140
|
+
"email"=>"info@robertsarvis.com"},
|
141
|
+
{"name"=>"Terry R. McAuliffe",
|
142
|
+
"party"=>"Democrat",
|
143
|
+
"candidate_url"=>"http://www.terrymcauliffe.com",
|
144
|
+
"phone"=>"7038227604",
|
145
|
+
"email"=>"info@terrymcauliffe.com"}],
|
146
|
+
"sources"=>[{"name"=>"Voting Information Project", "official"=>true}]},
|
147
|
+
{"type"=>"general",
|
148
|
+
"special"=>"no",
|
149
|
+
"office"=>"Attorney General",
|
150
|
+
"district"=>{"name"=>"Statewide", "scope"=>"statewide"},
|
151
|
+
"ballot_placement"=>"6",
|
152
|
+
"candidates"=>
|
153
|
+
[{"name"=>"Mark D. Obenshain",
|
154
|
+
"party"=>"Republican",
|
155
|
+
"candidate_url"=>"http://www.markobenshain.com",
|
156
|
+
"phone"=>"5404371451",
|
157
|
+
"email"=>"campaign@markobenshain.com"},
|
158
|
+
{"name"=>"Mark R. Herring",
|
159
|
+
"party"=>"Democrat",
|
160
|
+
"candidate_url"=>"http://www.herringforag.com",
|
161
|
+
"phone"=>"7036699090",
|
162
|
+
"email"=>"kevin@herringforag.com"}],
|
163
|
+
"sources"=>[{"name"=>"Voting Information Project", "official"=>true}]},
|
164
|
+
{"type"=>"general",
|
165
|
+
"special"=>"no",
|
166
|
+
"office"=>"Sheriff",
|
167
|
+
"district"=>{"name"=>"FAIRFAX COUNTY"},
|
168
|
+
"ballot_placement"=>"11",
|
169
|
+
"candidates"=>
|
170
|
+
[{"name"=>"Stacey Ann Kincaid",
|
171
|
+
"party"=>"Democrat",
|
172
|
+
"candidate_url"=>"http://staceykincaid.com",
|
173
|
+
"phone"=>"7039381658",
|
174
|
+
"email"=>"Kincaidforsheriff@gmail.com"},
|
175
|
+
{"name"=>"Christopher F. DeCarlo",
|
176
|
+
"party"=>"Independent",
|
177
|
+
"candidate_url"=>"http://www.honestyandethics.com",
|
178
|
+
"phone"=>"7035736160",
|
179
|
+
"email"=>"cdecarlo@fairfaxpropane.com"},
|
180
|
+
{"name"=>"Bryan A. /B. A./ Wolfe",
|
181
|
+
"party"=>"Republican",
|
182
|
+
"candidate_url"=>"http://www.wolfeforsheriff.com",
|
183
|
+
"phone"=>"7035436360",
|
184
|
+
"email"=>"fairfaxwolfe@yahoo.com"},
|
185
|
+
{"name"=>"Robert A. Rivera",
|
186
|
+
"party"=>"Independent",
|
187
|
+
"phone"=>"7039783034",
|
188
|
+
"email"=>"riveraforsheriff@gmail.com"}],
|
189
|
+
"sources"=>[{"name"=>"Voting Information Project", "official"=>true}]},
|
190
|
+
{"type"=>"Referendum",
|
191
|
+
"special"=>"no",
|
192
|
+
"office"=>"School Bonds",
|
193
|
+
"district"=>{"name"=>"FAIRFAX COUNTY", "id"=>"59"},
|
194
|
+
"ballot_placement"=>"9999",
|
195
|
+
"sources"=>[{"name"=>"Voting Information Project", "official"=>true}]}],
|
196
|
+
"state"=>
|
197
|
+
[{"name"=>"Virginia",
|
198
|
+
"election_administration_body"=>
|
199
|
+
{"name"=>"State Board of Elections",
|
200
|
+
"election_info_url"=>"http://www.sbe.virginia.gov/",
|
201
|
+
"election_registration_url"=>"https://www.vote.virginia.gov/",
|
202
|
+
"election_registration_confirmation_url"=>
|
203
|
+
"https://www.vote.virginia.gov/",
|
204
|
+
"absentee_voting_info_url"=>
|
205
|
+
"http://www.sbe.virginia.gov/absenteevoting.html",
|
206
|
+
"voting_location_finder_url"=>"https://www.vote.virginia.gov/",
|
207
|
+
"ballot_info_url"=>"https://www.vote.virginia.gov/",
|
208
|
+
"election_rules_url"=>"http://www.sbe.virginia.gov/",
|
209
|
+
"physical_address"=>
|
210
|
+
{"location_name"=>"State Board of Elections",
|
211
|
+
"line1"=>"Washington Building First Floor",
|
212
|
+
"line2"=>"1100 Bank Street",
|
213
|
+
"city"=>"Richmond",
|
214
|
+
"state"=>"VA",
|
215
|
+
"zip_code"=>"23219"}},
|
216
|
+
"local_jurisdiction"=>
|
217
|
+
{"name"=>"FAIRFAX COUNTY",
|
218
|
+
"election_administration_body"=>
|
219
|
+
{"name"=>"FAIRFAX COUNTY",
|
220
|
+
"election_info_url"=>"http://www.fairfaxcounty.gov/elections",
|
221
|
+
"election_registration_url"=>"http://www.vote.virginia.gov",
|
222
|
+
"election_registration_confirmation_url"=>
|
223
|
+
"http://www.vote.virginia.gov",
|
224
|
+
"absentee_voting_info_url"=>"http://www.vote.virginia.gov",
|
225
|
+
"voting_location_finder_url"=>"http://www.vote.virginia.gov",
|
226
|
+
"ballot_info_url"=>"http://www.vote.virginia.gov",
|
227
|
+
"election_rules_url"=>"http://www.vote.virginia.gov",
|
228
|
+
"hours_of_operation"=>
|
229
|
+
"8:00 a.m. to 4:30 p.m Monday-Wednesday and Friday and 8:00 a.m. to 7:00 p.m. Thursday",
|
230
|
+
"physical_address"=>
|
231
|
+
{"location_name"=>"FAIRFAX COUNTY",
|
232
|
+
"line1"=>"OFFICE OF ELECTIONS",
|
233
|
+
"line2"=>"12000 GOVERNMENT CENTER PKWY",
|
234
|
+
"line3"=>"SUITE 323",
|
235
|
+
"city"=>"FAIRFAX",
|
236
|
+
"state"=>"VA",
|
237
|
+
"zip_code"=>"22035-0081"},
|
238
|
+
"election_officials"=>
|
239
|
+
[{"name"=>"CAMERON P. QUINN",
|
240
|
+
"title"=>"General Registrar Physical",
|
241
|
+
"office_phone_number"=>"7033244715",
|
242
|
+
"email_address"=>"cameronquinn@fairfaxcounty.gov"}]},
|
243
|
+
"sources"=>[{"name"=>"Voting Information Project", "official"=>true}]},
|
244
|
+
"sources"=>[{"name"=>"Voting Information Project", "official"=>true}]}]}
|
245
|
+
```
|
246
|
+
|
247
|
+
### [Representatives](https://developers.google.com/civic-information/docs/us_v1/representatives/representativeInfoQuery)
|
248
|
+
|
249
|
+
Retrieve political geography and representative information based on an address.
|
250
|
+
|
251
|
+
`client.representatives.at('118 E. Main St. Carrboro, NC 27510')`
|
252
|
+
|
253
|
+
##### Response (shortened some to save space)
|
254
|
+
|
255
|
+
```ruby
|
256
|
+
{"normalized_input"=>
|
257
|
+
{"line1"=>"118 e main st",
|
258
|
+
"city"=>"carrboro",
|
259
|
+
"state"=>"NC",
|
260
|
+
"zip_code"=>"27510"},
|
261
|
+
"divisions"=>
|
262
|
+
{"ocd-division/country:us/state:nc/cd:4"=>
|
263
|
+
{"name"=>"North Carolina's 4th congressional district",
|
264
|
+
"scope"=>"congressional",
|
265
|
+
"office_ids"=>["O0"]},
|
266
|
+
"ocd-division/country:us/state:nc"=>
|
267
|
+
{"name"=>"North Carolina",
|
268
|
+
"scope"=>"statewide",
|
269
|
+
"office_ids"=>
|
270
|
+
["O1", "O2", "O3", "O4", "O5", "O6", "O7", "O8", "O9", "Oa", "Ob"]},
|
271
|
+
"ocd-division/country:us/state:nc/place:carrboro"=>
|
272
|
+
{"name"=>"Carrboro town", "scope"=>"citywide"},
|
273
|
+
"ocd-division/country:us"=>
|
274
|
+
{"name"=>"United States", "scope"=>"national", "office_ids"=>["Oc", "Od"]},
|
275
|
+
"ocd-division/country:us/state:nc/county:orange"=>
|
276
|
+
{"name"=>"Orange County",
|
277
|
+
"scope"=>"countywide",
|
278
|
+
"office_ids"=>["Oe", "Of", "O10", "O11", "O12"]}},
|
279
|
+
"offices"=>
|
280
|
+
{"o0"=>
|
281
|
+
{"name"=>"United States House of Representatives NC-04",
|
282
|
+
"level"=>"federal",
|
283
|
+
"official_ids"=>["P0"]},
|
284
|
+
"o1"=>{"name"=>"Governor", "level"=>"state", "official_ids"=>["P1"]},
|
285
|
+
"o2"=>{"name"=>"State Auditor", "level"=>"state", "official_ids"=>["P2"]},
|
286
|
+
"o3"=>{"name"=>"State Treasurer", "level"=>"state", "official_ids"=>["P3"]},
|
287
|
+
"o4"=>
|
288
|
+
{"name"=>"Attorney General", "level"=>"state", "official_ids"=>["P4"]},
|
289
|
+
"o5"=>
|
290
|
+
{"name"=>"Secretary of State", "level"=>"state", "official_ids"=>["P5"]},
|
291
|
+
"o6"=>
|
292
|
+
{"name"=>"Lieutenant Governor", "level"=>"state", "official_ids"=>["P6"]},
|
293
|
+
"o7"=>
|
294
|
+
{"name"=>"United States Senate",
|
295
|
+
"level"=>"federal",
|
296
|
+
"official_ids"=>["P7", "P8"]},
|
297
|
+
"officials"=>
|
298
|
+
{"p4"=>
|
299
|
+
{"name"=>"Roy Cooper",
|
300
|
+
"address"=>
|
301
|
+
[{"line1"=>"9001 Mail Service Center",
|
302
|
+
"city"=>"raleigh",
|
303
|
+
"state"=>"NC",
|
304
|
+
"zip_code"=>"27699"}],
|
305
|
+
"phones"=>["(919) 716-6400"],
|
306
|
+
"urls"=>["http://www.ncdoj.gov/"],
|
307
|
+
"channels"=>
|
308
|
+
[{"type"=>"Facebook", "id"=>"157759274279900"},
|
309
|
+
{"type"=>"Twitter", "id"=>"NCAGO"}]},
|
310
|
+
"p5"=>
|
311
|
+
{"name"=>"Elaine Marshall",
|
312
|
+
"address"=>
|
313
|
+
[{"line1"=>"NC Secretary of State PO Box 29622",
|
314
|
+
"city"=>"raleigh",
|
315
|
+
"state"=>"NC",
|
316
|
+
"zip_code"=>"27626"}],
|
317
|
+
"phones"=>["(919) 807-2000"],
|
318
|
+
"urls"=>["http://www.sosnc.com/"]},
|
319
|
+
"p6"=>
|
320
|
+
{"name"=>"Dan Forest",
|
321
|
+
"address"=>
|
322
|
+
[{"line1"=>"20401 Mail Service Center",
|
323
|
+
"city"=>"raleigh",
|
324
|
+
"state"=>"NC",
|
325
|
+
"zip_code"=>"27699"}],
|
326
|
+
"party"=>"Republican",
|
327
|
+
"phones"=>["(919) 733-7350"],
|
328
|
+
"urls"=>["http://www.ltgov.state.nc.us/"],
|
329
|
+
"emails"=>["lt.gov@nc.gov"],
|
330
|
+
"channels"=>
|
331
|
+
[{"type"=>"Facebook", "id"=>"DanForestNC"},
|
332
|
+
{"type"=>"Twitter", "id"=>"DanForestNC"}]},
|
333
|
+
"p7"=>
|
334
|
+
{"name"=>"Kay R. Hagan",
|
335
|
+
"address"=>
|
336
|
+
[{"line1"=>"521 Dirksen Senate Office Building",
|
337
|
+
"city"=>"washington",
|
338
|
+
"state"=>"DC",
|
339
|
+
"zip_code"=>"20510"}],
|
340
|
+
"party"=>"Democratic",
|
341
|
+
"phones"=>["(202) 224-6342"],
|
342
|
+
"urls"=>["http://www.hagan.senate.gov/"],
|
343
|
+
"photo_url"=>
|
344
|
+
"http://www.senate.gov/general/resources/graphic/medium/Hagan_200.jpg",
|
345
|
+
"emails"=>["Senator_Hagan@hagan.senate.gov"],
|
346
|
+
"channels"=>
|
347
|
+
[{"type"=>"Facebook", "id"=>"SenatorHagan"},
|
348
|
+
{"type"=>"Twitter", "id"=>"SenatorHagan"},
|
349
|
+
{"type"=>"YouTube", "id"=>"SenatorHagan"}]},
|
350
|
+
"p8"=>
|
351
|
+
{"name"=>"Richard Burr",
|
352
|
+
"address"=>
|
353
|
+
[{"line1"=>"217 Russell Senate Office Building",
|
354
|
+
"city"=>"washington",
|
355
|
+
"state"=>"DC",
|
356
|
+
"zip_code"=>"20510"}],
|
357
|
+
"party"=>"Republican",
|
358
|
+
"phones"=>["(202) 224-3154"],
|
359
|
+
"urls"=>["http://www.burr.senate.gov/public/"],
|
360
|
+
"photo_url"=>"http://bioguide.congress.gov/bioguide/photo/B/B001135.jpg",
|
361
|
+
"channels"=>
|
362
|
+
[{"type"=>"Facebook", "id"=>"SenatorRichardBurr"},
|
363
|
+
{"type"=>"Twitter", "id"=>"senatorburr"},
|
364
|
+
{"type"=>"YouTube", "id"=>"SenatorRichardBurr"}]},
|
365
|
+
"p9"=>
|
366
|
+
{"name"=>"Cherie Berry",
|
367
|
+
"address"=>
|
368
|
+
[{"line1"=>"NC Department of Labor 1101 Mail Service Center",
|
369
|
+
"city"=>"raleigh",
|
370
|
+
"state"=>"NC",
|
371
|
+
"zip_code"=>"27699"}],
|
372
|
+
"phones"=>["(919) 807-2796"],
|
373
|
+
"urls"=>["http://www.nclabor.com/"],
|
374
|
+
"emails"=>["Commissioners.Office@labor.nc.gov"]},
|
375
|
+
"p10"=>
|
376
|
+
{"name"=>"Wayne Goodwin",
|
377
|
+
"urls"=>["http://www.ncdoi.com/"],
|
378
|
+
"emails"=>["Commissioner@ncdoi.gov"],
|
379
|
+
"channels"=>
|
380
|
+
[{"type"=>"Facebook", "id"=>"ncdoi"},
|
381
|
+
{"type"=>"Twitter", "id"=>"NCInsuranceDept"}]},
|
382
|
+
"p11"=>
|
383
|
+
{"name"=>"Steve Troxler",
|
384
|
+
"address"=>
|
385
|
+
[{"line1"=>"1001 Mail Service Center",
|
386
|
+
"city"=>"raleigh",
|
387
|
+
"state"=>"NC",
|
388
|
+
"zip_code"=>"27699"}],
|
389
|
+
"phones"=>["(919) 707-3021"],
|
390
|
+
"urls"=>["http://www.ncagr.gov/"]},
|
391
|
+
"p12"=>
|
392
|
+
{"name"=>"June Atkinson",
|
393
|
+
"address"=>
|
394
|
+
[{"line1"=>
|
395
|
+
"Office of the State Superintendent NC Education Building 6301 Mail Service Center",
|
396
|
+
"city"=>"raleigh",
|
397
|
+
"state"=>"NC",
|
398
|
+
"zip_code"=>"27699"}],
|
399
|
+
"phones"=>["(919) 807-3430"],
|
400
|
+
"urls"=>["http://www.ncpublicschools.org/statesuperintendent/"],
|
401
|
+
"emails"=>["june.atkinson@dpi.nc.gov"]},
|
402
|
+
"p13"=>
|
403
|
+
{"name"=>"Barack Hussein Obama II",
|
404
|
+
"address"=>
|
405
|
+
[{"line1"=>"The White House",
|
406
|
+
"line2"=>"1600 Pennsylvania Avenue NW",
|
407
|
+
"line3"=>"",
|
408
|
+
"city"=>"Washington",
|
409
|
+
"state"=>"DC",
|
410
|
+
"zip_code"=>"20500"}],
|
411
|
+
"party"=>"Democrat",
|
412
|
+
"phones"=>["(202) 456-1111", "(202) 456-1414"],
|
413
|
+
"urls"=>
|
414
|
+
["http://www.whitehouse.gov/administration/president_obama/",
|
415
|
+
"http://www.barackobama.com/index.php"],
|
416
|
+
"photo_url"=>
|
417
|
+
"http://www.whitehouse.gov/sites/default/files/imagecache/admin_official_lowres/administration-official/ao_image/president_official_portrait_hires.jpg",
|
418
|
+
"channels"=>
|
419
|
+
[{"type"=>"GooglePlus", "id"=>"110031535020051778989"},
|
420
|
+
{"type"=>"YouTube", "id"=>"barackobama"},
|
421
|
+
{"type"=>"Twitter", "id"=>"barackobama"},
|
422
|
+
{"type"=>"Facebook", "id"=>"barackobama"}]},
|
423
|
+
"p14"=>
|
424
|
+
{"name"=>"Joseph (Joe) Robinette Biden Jr.",
|
425
|
+
"address"=>
|
426
|
+
[{"line1"=>"The White House",
|
427
|
+
"line2"=>"1600 Pennsylvania Avenue NW",
|
428
|
+
"line3"=>"",
|
429
|
+
"city"=>"Washington",
|
430
|
+
"state"=>"DC",
|
431
|
+
"zip_code"=>"20500"}],
|
432
|
+
"party"=>"Democrat",
|
433
|
+
"urls"=>["http://www.whitehouse.gov/administration/vice-president-biden"],
|
434
|
+
"photo_url"=>
|
435
|
+
"http://www.whitehouse.gov/sites/default/files/imagecache/admin_official_lowres/administration-official/ao_image/vp_portrait.jpeg",
|
436
|
+
"channels"=>
|
437
|
+
[{"type"=>"Twitter", "id"=>"JoeBiden"},
|
438
|
+
{"type"=>"Facebook", "id"=>"joebiden"},
|
439
|
+
{"type"=>"Twitter", "id"=>"VP"}]}}
|
440
|
+
```
|
441
|
+
|
442
|
+
## Improvements
|
443
|
+
|
444
|
+
If you find an error with the data, please [let Google know](https://docs.google.com/forms/d/1bEqKzq5y9mnVBaReJP_o7fH6xkc4T484UdEbvJNxZ9c/viewform).
|
445
|
+
|
446
|
+
If you find an error with the gem, please add an issue. Feedback is appreciated!
|
447
|
+
|
448
|
+
## Contributing
|
449
|
+
|
450
|
+
1. Fork it
|
451
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
452
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
453
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
454
|
+
5. Create new Pull Request
|