govkit 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/.travis.yml +2 -0
  2. data/Gemfile +11 -5
  3. data/README.md +1 -1
  4. data/Rakefile +29 -13
  5. data/VERSION +1 -1
  6. data/govkit.gemspec +25 -36
  7. data/lib/gov_kit.rb +16 -5
  8. data/lib/gov_kit/configuration.rb +5 -5
  9. data/lib/gov_kit/follow_the_money.rb +5 -2
  10. data/lib/gov_kit/open_congress.rb +3 -11
  11. data/lib/gov_kit/open_congress/bill.rb +32 -29
  12. data/lib/gov_kit/open_congress/person.rb +21 -20
  13. data/lib/gov_kit/open_states.rb +10 -15
  14. data/lib/gov_kit/railtie.rb +0 -2
  15. data/lib/gov_kit/resource.rb +0 -1
  16. data/lib/gov_kit/transparency_data.rb +1 -1
  17. data/lib/gov_kit/vote_smart.rb +81 -6
  18. data/{init.rb → rails/init.rb} +0 -0
  19. data/spec/fixtures/open_states/401.response +9 -9
  20. data/spec/fixtures/open_states/404.response +9 -9
  21. data/spec/fixtures/open_states/bill.response +9 -240
  22. data/spec/fixtures/open_states/bill_find.response +9 -0
  23. data/spec/fixtures/open_states/bill_query.response +9 -1990
  24. data/spec/fixtures/open_states/committee_find.response +9 -53
  25. data/spec/fixtures/open_states/committee_query.response +9 -190
  26. data/spec/fixtures/open_states/legislator_find.response +9 -0
  27. data/spec/fixtures/open_states/legislator_query.response +9 -144
  28. data/spec/fixtures/open_states/state.response +9 -60
  29. data/spec/follow_the_money_spec.rb +20 -16
  30. data/spec/open_congress_spec.rb +23 -35
  31. data/spec/open_states_spec.rb +63 -78
  32. data/spec/search_engines_spec.rb +10 -13
  33. data/spec/spec_helper.rb +16 -8
  34. data/spec/transparency_data_spec.rb +19 -35
  35. metadata +140 -145
  36. data/spec/fixtures/open_states/410.response +0 -6
  37. data/spec/fixtures/open_states/legislator.response +0 -34
@@ -3,11 +3,6 @@ module GovKit
3
3
  # Parent class for OpenStates resources
4
4
  # See http://openstates.sunlightlabs.com/api/
5
5
  class OpenStatesResource < Resource
6
-
7
- # Uses default_params from the HTTParty gem.
8
- # See HTTParty::ClassMethods:
9
- # http://rubydoc.info/gems/httparty/0.7.4/HTTParty/ClassMethods#default_params-instance_method
10
- default_params :output => 'json', :apikey => GovKit::configuration.sunlight_apikey
11
6
  base_uri GovKit::configuration.openstates_base_url
12
7
 
13
8
  # Do a GET query, with optional parameters.
@@ -18,13 +13,14 @@ module GovKit
18
13
  # So, if a query result is a resource not found error,
19
14
  # we return an empty set.
20
15
  def self.get_uri(uri, options={})
16
+ options[:query] ||= {}
17
+ options[:query][:apikey] = GovKit::configuration.sunlight_apikey
18
+
21
19
  begin
22
- response = get(uri, options)
23
- result = parse(response)
20
+ parse(get(URI.encode(uri), options))
24
21
  rescue ResourceNotFound
25
- return []
22
+ []
26
23
  end
27
- result
28
24
  end
29
25
 
30
26
  end
@@ -49,6 +45,8 @@ module GovKit
49
45
  # http://openstates.sunlightlabs.com/api/metadata/,
50
46
  #
51
47
  class State < OpenStatesResource
48
+ format :json
49
+
52
50
  def self.find_by_abbreviation(abbreviation)
53
51
  get_uri("/metadata/#{abbreviation}/")
54
52
  end
@@ -62,10 +60,7 @@ module GovKit
62
60
  class Bill < OpenStatesResource
63
61
  # http://openstates.sunlightlabs.com/api/v1/bills/ca/20092010/AB 667/
64
62
  def self.find(state_abbrev, session, bill_id, chamber = '')
65
- escaped_bill_id = bill_id.gsub(/ /, '%20')
66
- escaped_session = session.gsub(/ /, '%20')
67
-
68
- get_uri("/bills/#{state_abbrev.downcase}/#{escaped_session}/#{chamber.blank? ? '' : chamber + '/'}#{escaped_bill_id}/")
63
+ get_uri("/bills/#{state_abbrev.downcase}/#{session}/#{chamber.blank? ? '' : chamber + '/'}#{bill_id}/")
69
64
  end
70
65
 
71
66
  def self.search(query, options = {})
@@ -74,8 +69,8 @@ module GovKit
74
69
  end
75
70
 
76
71
  def self.latest(updated_since, ops = {})
77
- response = get('/bills/', :query => {:updated_since => updated_since.to_s}.merge(ops))
78
- parse(response)
72
+ result = get_uri('/bills/', :query => {:updated_since => updated_since.to_s}.merge(ops))
73
+ return Array(result)
79
74
  end
80
75
  end
81
76
 
@@ -1,5 +1,3 @@
1
- require 'govkit'
2
-
3
1
  module GovKit
4
2
  if defined? Rails::Railtie
5
3
  require 'rails'
@@ -19,7 +19,6 @@ module GovKit
19
19
  # Includes {http://rdoc.info/github/jnunemaker/httparty/master/HTTParty/ClassMethods HTTParty}, which provides convenience methods like get().
20
20
  class Resource
21
21
  include HTTParty
22
- format :json
23
22
 
24
23
  # The attributes data returned by the service.
25
24
  attr_reader :attributes
@@ -82,7 +82,7 @@ module GovKit
82
82
  #
83
83
  # Example query:
84
84
  # entities = GovKit::TransparencyData::Entity.search('nancy+pelosi')
85
- def self.search(search_string = '')
85
+ def self.search(search_string)
86
86
  search_for("/entities.json", { :search => search_string } )
87
87
  end
88
88
  end
@@ -5,6 +5,66 @@ module GovKit
5
5
  end
6
6
 
7
7
  module VoteSmart
8
+ class State < VoteSmartResource
9
+ def self.find_all
10
+ response = get("/State.getStateIDs")
11
+ parse(response['stateList']['list']['state'])
12
+ end
13
+
14
+ def self.find_counties(stateId)
15
+ response = get("/Local.getCounties", :query => {"stateId" => stateId})
16
+ return [] if !response['counties']
17
+
18
+ if response['counties']['county'].instance_of?(Array)
19
+ parse(response['counties']['county'])
20
+ else
21
+ [ parse(response['counties']['county']) ]
22
+ end
23
+ end
24
+
25
+ def self.find_cities(stateId)
26
+ response = get("/Local.getCities", :query => {"stateId" => stateId})
27
+ return [] if !response['cities']
28
+
29
+ if response['cities']['city'].instance_of?(Array)
30
+ parse(response['cities']['city'])
31
+ else
32
+ [ parse(response['cities']['city']) ]
33
+ end
34
+ end
35
+ end
36
+
37
+ class Official < VoteSmartResource
38
+ def self.find_all(stateOrLocalId)
39
+ if stateOrLocalId.match(/[A-Za-z]/) # We're looking for state officals
40
+ response = get("/Officials.getStatewide", :query => {"stateId" => stateOrLocalId})
41
+ else # We're looking for local officials
42
+ response = get("/Local.getOfficials", :query => {"localId" => stateOrLocalId})
43
+ end
44
+
45
+ return [] if !response['candidateList']
46
+
47
+ if response['candidateList']['candidate'].instance_of?(Array)
48
+ parse(response['candidateList']['candidate'])
49
+ else
50
+ [ parse(response['candidateList']['candidate']) ]
51
+ end
52
+ end
53
+
54
+ def self.find_by_office_state(officeId, stateId = 'NA')
55
+ response = get("/Officials.getByOfficeState", :query => { "officeId" => officeId,
56
+ "stateId" => stateId })
57
+
58
+ return [] if !response['candidateList']
59
+
60
+ if response['candidateList']['candidate'].instance_of?(Array)
61
+ parse(response['candidateList']['candidate'])
62
+ else
63
+ [ parse(response['candidateList']['candidate']) ]
64
+ end
65
+ end
66
+ end
67
+
8
68
  class Address < VoteSmartResource
9
69
  def self.find(candidate_id)
10
70
  response = get("/Address.getOffice", :query => {"candidateId" => candidate_id})
@@ -15,24 +75,39 @@ module GovKit
15
75
  class WebAddress < VoteSmartResource
16
76
  def self.find(candidate_id)
17
77
  response = get("/Address.getOfficeWebAddress", :query => {"candidateId" => candidate_id})
18
- parse(response['webaddress'])
78
+
79
+ return [] if !response['webaddress']
80
+
81
+ if response['webaddress']['address'].instance_of?(Array)
82
+ parse(response['webaddress']['address'])
83
+ else
84
+ [ parse(response['webaddress']['address']) ]
85
+ end
19
86
  end
20
87
  end
21
88
 
22
89
  class Bio < VoteSmartResource
23
- def self.find(candidate_id)
90
+ def self.find(candidate_id, include_office = false)
24
91
  response = get("/CandidateBio.getBio", :query => {"candidateId" => candidate_id})
25
92
 
26
- # Sometimes VoteSmart returns nil if no one is found!
27
- raise(ResourceNotFound, 'Could not find bio for candidate') if response.blank? || response['error']
28
-
29
- parse(response['bio']['candidate'])
93
+ return false if response.blank? || response['error']
94
+
95
+ # Previous versions ommitted "office" data from response.
96
+ # include_office is optional so to not break backwards compatibility.
97
+ if include_office
98
+ parse(response['bio'])
99
+ else
100
+ parse(response['bio']['candidate'])
101
+ end
30
102
  end
31
103
  end
32
104
 
33
105
  class Category < VoteSmartResource
34
106
  def self.list(state_id)
35
107
  response = get("/Rating.getCategories", :query => {"stateId" => state_id})
108
+
109
+ raise(ResourceNotFound, response['error']['errorMessage']) if response['error']
110
+
36
111
  parse(response['categories']['category'])
37
112
  end
38
113
  end
File without changes
@@ -1,10 +1,10 @@
1
- HTTP/1.1 401 UNAUTHORIZED
2
- Server: nginx/0.9.6
3
- Date: Thu, 21 Apr 2011 22:02:36 GMT
4
- Content-Type: text/html; charset=utf-8
5
- Transfer-Encoding: chunked
6
- Connection: close
7
- Vary: Authorization
8
-
1
+ HTTP/1.1 401 UNAUTHORIZED
2
+ Server: nginx/1.2.1
3
+ Date: Fri, 16 Nov 2012 23:40:31 GMT
4
+ Content-Type: text/html; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: keep-alive
7
+ Vary: Authorization
8
+
9
9
  Authorization Required:
10
- obtain a key at http://services.sunlightlabs.com/accounts/register/
10
+ obtain a key at http://services.sunlightlabs.com/accounts/register/
@@ -1,9 +1,9 @@
1
- HTTP/1.1 404 NOT FOUND
2
- Server: nginx/0.9.6
3
- Date: Thu, 21 Apr 2011 21:34:05 GMT
4
- Content-Type: text/html; charset=utf-8
5
- Transfer-Encoding: chunked
6
- Connection: close
7
-
8
- 404 not found
9
-
1
+ HTTP/1.1 200 OK
2
+ Server: nginx/1.2.1
3
+ Date: Fri, 16 Nov 2012 23:40:35 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: keep-alive
7
+ Vary: Authorization
8
+
9
+ []
@@ -1,240 +1,9 @@
1
- HTTP/1.1 200 OK
2
- Server: nginx/0.6.35
3
- Date: Tue, 15 Jun 2010 21:50:08 GMT
4
- Content-Type: application/json; charset=utf-8
5
- Connection: close
6
- Vary: Authorization
7
-
8
- {
9
- "votes": [
10
- {
11
- "other_count": 6,
12
- "sources": [],
13
- "yes_count": 34,
14
- "updated_at": "2010-03-27 21:30:38",
15
- "motion": "Special Consent #12 AB667 Block By Alquist",
16
- "chamber": "upper",
17
- "passed": true,
18
- "date": "2009-07-09 05:50:00",
19
- "vote_id": 13695,
20
- "no_count": 0
21
- },
22
- {
23
- "other_count": 3,
24
- "sources": [],
25
- "yes_count": 77,
26
- "updated_at": "2010-03-27 21:30:38",
27
- "motion": "AB 667 BLOCK Consent Calendar Second Day Regular Session",
28
- "chamber": "lower",
29
- "passed": true,
30
- "date": "2009-05-21 08:07:00",
31
- "vote_id": 13694,
32
- "no_count": 0
33
- },
34
- {
35
- "other_count": 3,
36
- "sources": [],
37
- "yes_count": 10,
38
- "updated_at": "2010-03-27 21:30:38",
39
- "motion": "Do pass and be re-referred to the Committee on Appropriations.",
40
- "chamber": "lower",
41
- "passed": true,
42
- "date": "2009-04-13 20:00:00",
43
- "vote_id": 13693,
44
- "no_count": 0
45
- },
46
- {
47
- "other_count": 0,
48
- "sources": [],
49
- "yes_count": 7,
50
- "updated_at": "2010-03-27 21:30:38",
51
- "motion": "Do pass, to Consent Calendar.",
52
- "chamber": "lower",
53
- "passed": true,
54
- "date": "2009-05-12 20:00:00",
55
- "vote_id": 13692,
56
- "no_count": 0
57
- },
58
- {
59
- "other_count": 0,
60
- "sources": [],
61
- "yes_count": 7,
62
- "updated_at": "2010-03-27 21:30:38",
63
- "motion": "Do pass, but re-refer to the Committee on Appropriations.",
64
- "chamber": "upper",
65
- "passed": true,
66
- "date": "2009-04-27 20:00:00",
67
- "vote_id": 13691,
68
- "no_count": 4
69
- },
70
- {
71
- "other_count": 0,
72
- "sources": [],
73
- "yes_count": 5,
74
- "updated_at": "2010-03-27 21:30:37",
75
- "motion": "Do pass, but re-refer to the Committee on Appropriations.",
76
- "chamber": "upper",
77
- "passed": true,
78
- "date": "2009-06-21 20:00:00",
79
- "vote_id": 13690,
80
- "no_count": 2
81
- }
82
- ],
83
- "last_action": "2009-08-05 20:00:00",
84
- "first_action": "2009-02-24 19:00:00",
85
- "title": "An act to amend Section 1750.1 of the Business and Professions Code, and to amend Section 104830 of, and to add Section 104762 to, the Health and Safety Code, relating to oral health.",
86
- "updated_at": "2010-03-27 21:30:38",
87
- "actions": [
88
- {
89
- "date": "2009-08-05 20:00:00",
90
- "action": "Chaptered by Secretary of State - Chapter 119, Statutes of 2009.",
91
- "updated_at": "2010-03-27 21:30:37",
92
- "actor": "Secretary of State"
93
- },
94
- {
95
- "date": "2009-08-04 20:00:00",
96
- "action": "Approved by the Governor.",
97
- "updated_at": "2010-03-27 21:30:37",
98
- "actor": "Governor"
99
- },
100
- {
101
- "date": "2009-07-29 20:00:00",
102
- "action": "Enrolled and to the Governor at 2:30 p.m.",
103
- "updated_at": "2010-03-27 21:30:37",
104
- "actor": "Governor"
105
- },
106
- {
107
- "date": "2009-07-08 20:00:00",
108
- "action": "In Assembly. To enrollment.",
109
- "updated_at": "2010-03-27 21:30:37",
110
- "actor": "Assembly (E&E Enrollment)"
111
- },
112
- {
113
- "date": "2009-07-08 20:00:00",
114
- "action": "Read third time, passed, and to Assembly. (Ayes 34. Noes 0. Page 1667.)",
115
- "updated_at": "2010-03-27 21:30:37",
116
- "actor": "Senate (Desk)"
117
- },
118
- {
119
- "date": "2009-07-01 20:00:00",
120
- "action": "Ordered to Special Consent Calendar.",
121
- "updated_at": "2010-03-27 21:30:37",
122
- "actor": "Senate (Floor Special Consent)"
123
- },
124
- {
125
- "date": "2009-06-29 20:00:00",
126
- "action": "Read second time. To third reading.",
127
- "updated_at": "2010-03-27 21:30:37",
128
- "actor": "Senate (Floor Third Reading)"
129
- },
130
- {
131
- "date": "2009-06-28 20:00:00",
132
- "action": "From committee: Be placed on second reading file pursuant to Senate Rule 28.8.",
133
- "updated_at": "2010-03-27 21:30:37",
134
- "actor": "Senate (Floor Second Reading)"
135
- },
136
- {
137
- "date": "2009-06-21 20:00:00",
138
- "action": "From committee: Do pass, and re-refer to Com. on APPR. Re-referred. (Ayes 10. Noes 0.) (June 22).",
139
- "updated_at": "2010-03-27 21:30:37",
140
- "actor": "Senate (Committee)"
141
- },
142
- {
143
- "date": "2009-06-03 20:00:00",
144
- "action": "Referred to Com. on B., P. & E.D.",
145
- "updated_at": "2010-03-27 21:30:37",
146
- "actor": "Senate (Committee CS42)"
147
- },
148
- {
149
- "date": "2009-05-20 20:00:00",
150
- "action": "Read third time, passed, and to Senate. (Ayes 77. Noes 0. Page 1628.)",
151
- "updated_at": "2010-03-27 21:30:37",
152
- "actor": "Assembly (E&E Engrossing)"
153
- },
154
- {
155
- "date": "2009-05-20 20:00:00",
156
- "action": "In Senate. Read first time. To Com. on RLS. for assignment.",
157
- "updated_at": "2010-03-27 21:30:37",
158
- "actor": "Senate (Rules)"
159
- },
160
- {
161
- "date": "2009-05-17 20:00:00",
162
- "action": "Read second time. To Consent Calendar.",
163
- "updated_at": "2010-03-27 21:30:37",
164
- "actor": "Assembly (Floor Consent)"
165
- },
166
- {
167
- "date": "2009-05-13 20:00:00",
168
- "action": "From committee: Do pass. To Consent Calendar. (May 13).",
169
- "updated_at": "2010-03-27 21:30:37",
170
- "actor": "Assembly (Floor Second Reading)"
171
- },
172
- {
173
- "date": "2009-05-04 20:00:00",
174
- "action": "Re-referred to Com. on APPR.",
175
- "updated_at": "2010-03-27 21:30:37",
176
- "actor": "Assembly (Committee CX25)"
177
- },
178
- {
179
- "date": "2009-05-03 20:00:00",
180
- "action": "From committee chair, with author's amendments: Amend, and re-refer to Com. on APPR. Read second time and amended.",
181
- "updated_at": "2010-03-27 21:30:37",
182
- "actor": "Assembly (E&E Engrossing)"
183
- },
184
- {
185
- "date": "2009-04-28 20:00:00",
186
- "action": "From committee: Do pass, and re-refer to Com. on APPR. with recommendation: To Consent Calendar. Re-referred. (Ayes 10. Noes 0.) (April 28).",
187
- "updated_at": "2010-03-27 21:30:37",
188
- "actor": "Assembly (Committee)"
189
- },
190
- {
191
- "date": "2009-04-14 20:00:00",
192
- "action": "From committee: Do pass, and re-refer to Com. on B. & P. with recommendation: To Consent Calendar. Re-referred. (Ayes 19. Noes 0.) (April 14).",
193
- "updated_at": "2010-03-27 21:30:37",
194
- "actor": "Assembly (Committee)"
195
- },
196
- {
197
- "date": "2009-04-12 20:00:00",
198
- "action": "Re-referred to Com. on HEALTH.",
199
- "updated_at": "2010-03-27 21:30:37",
200
- "actor": "Assembly (Committee CX08)"
201
- },
202
- {
203
- "date": "2009-04-01 20:00:00",
204
- "action": "From committee chair, with author's amendments: Amend, and re-refer to Com. on HEALTH. Read second time and amended.",
205
- "updated_at": "2010-03-27 21:30:37",
206
- "actor": "Assembly (E&E Engrossing)"
207
- },
208
- {
209
- "date": "2009-03-22 20:00:00",
210
- "action": "Referred to Com. on HEALTH.",
211
- "updated_at": "2010-03-27 21:30:37",
212
- "actor": "Assembly (Committee CX08)"
213
- },
214
- {
215
- "date": "2009-02-25 19:00:00",
216
- "action": "From printer. May be heard in committee March 28.",
217
- "updated_at": "2010-03-27 21:30:37",
218
- "actor": "Assembly (Desk)"
219
- },
220
- {
221
- "date": "2009-02-24 19:00:00",
222
- "action": "Read first time. To print.",
223
- "updated_at": "2010-03-27 21:30:37",
224
- "actor": "Assembly (Desk)"
225
- }
226
- ],
227
- "sponsors": [
228
- {
229
- "leg_id": 2504,
230
- "type": "LEAD_AUTHOR",
231
- "full_name": "Block, Marty"
232
- }
233
- ],
234
- "chamber": "lower",
235
- "state": "ca",
236
- "session": "20092010",
237
- "sources": [],
238
- "versions": [],
239
- "bill_id": "AB667"
240
- }
1
+ HTTP/1.1 200 OK
2
+ Server: nginx/1.2.1
3
+ Date: Fri, 16 Nov 2012 23:40:31 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: keep-alive
7
+ Vary: Authorization
8
+
9
+ {"+short_title": "Topical fluoride application.", "updated_at": "2012-04-06 17:17:37", "actions": [{"date": "2009-02-25 00:00:00", "action": "Read first time. To print.", "type": ["bill:introduced", "bill:reading:1"], "actor": "lower (Desk)"}, {"date": "2009-02-26 00:00:00", "action": "From printer. May be heard in committee March 28.", "type": ["other"], "actor": "lower (Desk)"}, {"date": "2009-03-23 00:00:00", "action": "Referred to Com. on HEALTH.", "type": ["committee:referred"], "actor": "lower (Committee CX08)"}, {"date": "2009-04-02 00:00:00", "action": "From committee chair, with author's amendments: Amend, and re-refer to Com. on HEALTH. Read second time and amended.", "type": ["bill:reading:2"], "actor": "lower (E&E Engrossing)"}, {"date": "2009-04-13 00:00:00", "action": "Re-referred to Com. on HEALTH.", "type": ["committee:referred"], "actor": "lower (Committee CX08)"}, {"date": "2009-04-15 00:00:00", "action": "From committee: Do pass, and re-refer to Com. on B. & P. with recommendation: To Consent Calendar. Re-referred. (Ayes 19. Noes 0.) (April 14).", "type": ["other"], "actor": "lower (Committee)"}, {"date": "2009-04-29 00:00:00", "action": "From committee: Do pass, and re-refer to Com. on APPR. with recommendation: To Consent Calendar. Re-referred. (Ayes 10. Noes 0.) (April 28).", "type": ["other"], "actor": "lower (Committee)"}, {"date": "2009-05-04 00:00:00", "action": "From committee chair, with author's amendments: Amend, and re-refer to Com. on APPR. Read second time and amended.", "type": ["bill:reading:2"], "actor": "lower (E&E Engrossing)"}, {"date": "2009-05-05 00:00:00", "action": "Re-referred to Com. on APPR.", "type": ["committee:referred"], "actor": "lower (Committee CX25)"}, {"date": "2009-05-14 00:00:00", "action": "From committee: Do pass. To Consent Calendar. (May 13).", "type": ["other"], "actor": "lower"}, {"date": "2009-05-18 00:00:00", "action": "Read second time. To Consent Calendar.", "type": ["bill:reading:2"], "actor": "lower"}, {"date": "2009-05-21 00:00:00", "action": "Read third time, passed, and to Senate. (Ayes 77. Noes 0. Page 1628.)", "type": ["other"], "actor": "lower (E&E Engrossing)"}, {"date": "2009-05-21 00:00:00", "action": "In Senate. Read first time. To Com. on RLS. for assignment.", "type": ["bill:reading:1", "committee:referred"], "actor": "upper (Rules)"}, {"date": "2009-06-04 00:00:00", "action": "Referred to Com. on B., P. & E.D.", "type": ["committee:referred"], "actor": "upper (Committee CS42)"}, {"date": "2009-06-22 00:00:00", "action": "From committee: Do pass, and re-refer to Com. on APPR. Re-referred. (Ayes 10. Noes 0.) (June 22).", "type": ["other"], "actor": "upper (Committee)"}, {"date": "2009-06-29 00:00:00", "action": "From committee: Be placed on second reading file pursuant to Senate Rule 28.8.", "type": ["other"], "actor": "upper"}, {"date": "2009-06-30 00:00:00", "action": "Read second time. To third reading.", "type": ["bill:reading:2"], "actor": "upper"}, {"date": "2009-07-02 00:00:00", "action": "Ordered to Special Consent Calendar.", "type": ["other"], "actor": "upper"}, {"date": "2009-07-09 00:00:00", "action": "Read third time, passed, and to Assembly. (Ayes 34. Noes 0. Page 1667.)", "type": ["other"], "actor": "upper (Desk)"}, {"date": "2009-07-09 00:00:00", "action": "In Assembly. To enrollment.", "type": ["other"], "actor": "lower (E&E Enrollment)"}, {"date": "2009-07-30 00:00:00", "action": "Enrolled and to the Governor at 2:30 p.m.", "type": ["other"], "actor": "executive"}, {"date": "2009-08-05 00:00:00", "action": "Approved by the Governor.", "type": ["other"], "actor": "executive"}, {"date": "2009-08-06 00:00:00", "action": "Chaptered by Secretary of State - Chapter 119, Statutes of 2009.", "type": ["other"], "actor": "Secretary of State"}], "sources": [{"url": "http://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?bill_id=200920100AB667"}], "session": "20092010", "id": "CAB00004148", "votes": [{"+threshold": "1/2", "sources": [], "session": "20092010", "committee": "Health", "id": "CAV00009225", "other_count": 0, "committee_id": null, "state": "ca", "passed": true, "type": "other", "no_count": 0, "yes_votes": [{"leg_id": "CAL000119", "name": "Adams"}, {"leg_id": "CAL000104", "name": "Ammiano"}, {"leg_id": "CAL000067", "name": "Audra Strickland"}, {"leg_id": "CAL000044", "name": "Block"}, {"leg_id": "CAL000080", "name": "Bonnie Lowenthal"}, {"leg_id": "CAL000061", "name": "Carter"}, {"leg_id": "CAL000108", "name": "Conway"}, {"leg_id": "CAL000056", "name": "De La Torre"}, {"leg_id": "CAL000057", "name": "De Leon"}, {"leg_id": "CAL000041", "name": "Emmerson"}, {"leg_id": "CAL000082", "name": "Fletcher"}, {"leg_id": "CAL000102", "name": "Gaines"}, {"leg_id": "CAL000112", "name": "Hall"}, {"leg_id": "CAL000117", "name": "Hayashi"}, {"leg_id": "CAL000049", "name": "Hernandez"}, {"leg_id": "CAL000083", "name": "Hill"}, {"leg_id": "CAL000076", "name": "Jones"}, {"leg_id": "CAL000060", "name": "Nava"}, {"leg_id": "CAL000097", "name": "Salas"}], "date": "2009-04-14 07:00:00", "no_votes": [], "other_votes": [], "yes_count": 19, "motion": "Do pass and be re-referred to the Committee on Business and Professions to Consent Calendar.", "chamber": "lower", "vote_id": "CAV00009225", "bill_id": "CAB00004148"}, {"+threshold": "1/2", "sources": [], "session": "20092010", "committee": "Business, Professions and Consumer Protection ", "id": "CAV00009226", "other_count": 1, "committee_id": null, "state": "ca", "passed": true, "type": "other", "no_count": 0, "yes_votes": [{"leg_id": "CAL000108", "name": "Conway"}, {"leg_id": "CAL000041", "name": "Emmerson"}, {"leg_id": "CAL000050", "name": "Eng"}, {"leg_id": "CAL000117", "name": "Hayashi"}, {"leg_id": "CAL000049", "name": "Hernandez"}, {"leg_id": "CAL000089", "name": "John A. Perez"}, {"leg_id": "CAL000060", "name": "Nava"}, {"leg_id": "CAL000053", "name": "Niello"}, {"leg_id": "CAL000079", "name": "Ruskin"}, {"leg_id": "CAL000074", "name": "Smyth"}], "date": "2009-04-28 07:00:00", "no_votes": [], "other_votes": [{"leg_id": "CAL000040", "name": "Price"}], "yes_count": 10, "motion": "Do pass and re-refer to Committee on Appropriations with recommendation: To Consent Calendar.", "chamber": "lower", "vote_id": "CAV00009226", "bill_id": "CAB00004148"}, {"+threshold": "1/2", "sources": [], "session": "20092010", "committee": "Appropriations", "id": "CAV00009227", "other_count": 0, "committee_id": null, "state": "ca", "passed": true, "type": "other", "no_count": 0, "yes_votes": [{"leg_id": "CAL000104", "name": "Ammiano"}, {"leg_id": "CAL000067", "name": "Audra Strickland"}, {"leg_id": null, "name": "Charles Calderon"}, {"leg_id": "CAL000090", "name": "Davis"}, {"leg_id": "CAL000057", "name": "De Leon"}, {"leg_id": "CAL000122", "name": "Duvall"}, {"leg_id": "CAL000112", "name": "Hall"}, {"leg_id": "CAL000045", "name": "Harkey"}, {"leg_id": "CAL000089", "name": "John A. Perez"}, {"leg_id": "CAL000100", "name": "Krekorian"}, {"leg_id": "CAL000095", "name": "Miller"}, {"leg_id": "CAL000103", "name": "Nielsen"}, {"leg_id": "CAL000040", "name": "Price"}, {"leg_id": "CAL000058", "name": "Skinner"}, {"leg_id": "CAL000052", "name": "Solorio"}, {"leg_id": "CAL000048", "name": "Torlakson"}], "date": "2009-05-13 07:00:00", "no_votes": [], "other_votes": [], "yes_count": 16, "motion": "Do pass, to Consent Calendar.", "chamber": "lower", "vote_id": "CAV00009227", "bill_id": "CAB00004148"}, {"other_count": 3, "+threshold": "1/2", "other_votes": [{"leg_id": "CAL000121", "name": "Fuentes"}, {"leg_id": "CAL000060", "name": "Nava"}, {"leg_id": "CAL000115", "name": "Saldana"}], "yes_count": 77, "yes_votes": [{"leg_id": "CAL000119", "name": "Adams"}, {"leg_id": "CAL000104", "name": "Ammiano"}, {"leg_id": "CAL000116", "name": "Anderson"}, {"leg_id": "CAL000086", "name": "Arambula"}, {"leg_id": "CAL000067", "name": "Audra Strickland"}, {"leg_id": "CAL000068", "name": "Bass"}, {"leg_id": "CAL000051", "name": "Beall"}, {"leg_id": "CAL000106", "name": "Bill Berryhill"}, {"leg_id": "CAL000118", "name": "Blakeslee"}, {"leg_id": "CAL000044", "name": "Block"}, {"leg_id": "CAL000088", "name": "Blumenfield"}, {"leg_id": "CAL000080", "name": "Bonnie Lowenthal"}, {"leg_id": "CAL000109", "name": "Brownley"}, {"leg_id": "CAL000059", "name": "Buchanan"}, {"leg_id": "CAL000066", "name": "Caballero"}, {"leg_id": "CAL000061", "name": "Carter"}, {"leg_id": null, "name": "Charles Calderon"}, {"leg_id": "CAL000101", "name": "Chesbro"}, {"leg_id": "CAL000108", "name": "Conway"}, {"leg_id": "CAL000114", "name": "Cook"}, {"leg_id": "CAL000054", "name": "Coto"}, {"leg_id": "CAL000090", "name": "Davis"}, {"leg_id": "CAL000056", "name": "De La Torre"}, {"leg_id": "CAL000057", "name": "De Leon"}, {"leg_id": "CAL000047", "name": "DeVore"}, {"leg_id": "CAL000122", "name": "Duvall"}, {"leg_id": "CAL000041", "name": "Emmerson"}, {"leg_id": "CAL000050", "name": "Eng"}, {"leg_id": "CAL000077", "name": "Evans"}, {"leg_id": "CAL000110", "name": "Feuer"}, {"leg_id": "CAL000082", "name": "Fletcher"}, {"leg_id": "CAL000084", "name": "Fong"}, {"leg_id": "CAL000087", "name": "Fuller"}, {"leg_id": "CAL000073", "name": "Furutani"}, {"leg_id": "CAL000102", "name": "Gaines"}, {"leg_id": "CAL000062", "name": "Galgiani"}, {"leg_id": "CAL000069", "name": "Garrick"}, {"leg_id": "CAL000064", "name": "Gilmore"}, {"leg_id": "CAL000092", "name": "Hagman"}, {"leg_id": "CAL000112", "name": "Hall"}, {"leg_id": "CAL000045", "name": "Harkey"}, {"leg_id": "CAL000117", "name": "Hayashi"}, {"leg_id": "CAL000049", "name": "Hernandez"}, {"leg_id": "CAL000083", "name": "Hill"}, {"leg_id": "CAL000063", "name": "Huber"}, {"leg_id": "CAL000043", "name": "Huffman"}, {"leg_id": "CAL000093", "name": "Jeffries"}, {"leg_id": "CAL000089", "name": "John A. Perez"}, {"leg_id": "CAL000076", "name": "Jones"}, {"leg_id": "CAL000065", "name": "Knight"}, {"leg_id": "CAL000100", "name": "Krekorian"}, {"leg_id": "CAL000072", "name": "Lieu"}, {"leg_id": "CAL000042", "name": "Logue"}, {"leg_id": "CAL000070", "name": "Ma"}, {"leg_id": "CAL000091", "name": "Mendoza"}, {"leg_id": "CAL000095", "name": "Miller"}, {"leg_id": "CAL000107", "name": "Monning"}, {"leg_id": "CAL000081", "name": "Nestande"}, {"leg_id": "CAL000053", "name": "Niello"}, {"leg_id": "CAL000103", "name": "Nielsen"}, {"leg_id": "CAL000071", "name": "Portantino"}, {"leg_id": "CAL000040", "name": "Price"}, {"leg_id": "CAL000079", "name": "Ruskin"}, {"leg_id": "CAL000097", "name": "Salas"}, {"leg_id": "CAL000094", "name": "Silva"}, {"leg_id": "CAL000058", "name": "Skinner"}, {"leg_id": "CAL000074", "name": "Smyth"}, {"leg_id": "CAL000052", "name": "Solorio"}, {"leg_id": "CAL000105", "name": "Swanson"}, {"leg_id": "CAL000085", "name": "Tom Berryhill"}, {"leg_id": "CAL000048", "name": "Torlakson"}, {"leg_id": "CAL000113", "name": "Torres"}, {"leg_id": "CAL000078", "name": "Torrico"}, {"leg_id": "CAL000120", "name": "Tran"}, {"leg_id": "CAL000098", "name": "V. Manuel Perez"}, {"leg_id": "CAL000075", "name": "Villines"}, {"leg_id": "CAL000099", "name": "Yamada"}], "id": "CAV00009228", "motion": "Consent Calendar Second Day ", "chamber": "lower", "state": "ca", "session": "20092010", "sources": [], "passed": true, "date": "2009-05-21 19:07:00", "vote_id": "CAV00009228", "type": "other", "no_count": 0, "bill_id": "CAB00004148", "no_votes": []}, {"+threshold": "1/2", "sources": [], "session": "20092010", "committee": "Business, Professions and Economic Development", "id": "CAV00009229", "other_count": 0, "committee_id": null, "state": "ca", "passed": true, "type": "other", "no_count": 0, "yes_votes": [{"leg_id": "CAL000004", "name": "Aanestad"}, {"leg_id": "CAL000010", "name": "Corbett"}, {"leg_id": "CAL000037", "name": "Correa"}, {"leg_id": "CAL000033", "name": "Florez"}, {"leg_id": null, "name": "Negrete McLeod"}, {"leg_id": "CAL000021", "name": "Oropeza"}, {"leg_id": "CAL000019", "name": "Romero"}, {"leg_id": "CAL000025", "name": "Walters"}, {"leg_id": "CAL000028", "name": "Wyland"}, {"leg_id": "CAL000008", "name": "Yee"}], "date": "2009-06-22 07:00:00", "no_votes": [], "other_votes": [], "yes_count": 10, "motion": "Do pass, but re-refer to the Committee on Appropriations.", "chamber": "upper", "vote_id": "CAV00009229", "bill_id": "CAB00004148"}, {"other_count": 6, "+threshold": "1/2", "other_votes": [{"leg_id": "CAL000014", "name": "Ashburn"}, {"leg_id": "CAL000036", "name": "Calderon"}, {"leg_id": "CAL000010", "name": "Corbett"}, {"leg_id": "CAL000026", "name": "Harman"}, {"leg_id": "CAL000021", "name": "Oropeza"}, {"leg_id": "CAL000005", "name": "Wolk"}], "yes_count": 34, "yes_votes": [{"leg_id": "CAL000004", "name": "Aanestad"}, {"leg_id": "CAL000039", "name": "Alquist"}, {"leg_id": "CAL000029", "name": "Benoit"}, {"leg_id": "CAL000017", "name": "Cedillo"}, {"leg_id": "CAL000011", "name": "Cogdill"}, {"leg_id": "CAL000037", "name": "Correa"}, {"leg_id": "CAL000001", "name": "Cox"}, {"leg_id": "CAL000007", "name": "DeSaulnier"}, {"leg_id": "CAL000032", "name": "Denham"}, {"leg_id": "CAL000038", "name": "Ducheny"}, {"leg_id": "CAL000023", "name": "Dutton"}, {"leg_id": "CAL000033", "name": "Florez"}, {"leg_id": "CAL000009", "name": "Hancock"}, {"leg_id": "CAL000027", "name": "Hollingsworth"}, {"leg_id": "CAL000022", "name": "Huff"}, {"leg_id": "CAL000030", "name": "Kehoe"}, {"leg_id": "CAL000003", "name": "Leno"}, {"leg_id": "CAL000016", "name": "Liu"}, {"leg_id": "CAL000080", "name": "Lowenthal"}, {"leg_id": "CAL000012", "name": "Maldonado"}, {"leg_id": null, "name": "Negrete McLeod"}, {"leg_id": "CAL000034", "name": "Padilla"}, {"leg_id": "CAL000018", "name": "Pavley"}, {"leg_id": "CAL000040", "name": "Price"}, {"leg_id": "CAL000019", "name": "Romero"}, {"leg_id": "CAL000013", "name": "Runner"}, {"leg_id": "CAL000031", "name": "Simitian"}, {"leg_id": "CAL000006", "name": "Steinberg"}, {"leg_id": "CAL000015", "name": "Strickland"}, {"leg_id": "CAL000025", "name": "Walters"}, {"leg_id": "CAL000002", "name": "Wiggins"}, {"leg_id": "CAL000035", "name": "Wright"}, {"leg_id": "CAL000028", "name": "Wyland"}, {"leg_id": "CAL000008", "name": "Yee"}], "id": "CAV00009230", "motion": "Special Consent #12 AB667 Block By Alquist", "chamber": "upper", "state": "ca", "session": "20092010", "sources": [], "passed": true, "date": "2009-07-09 16:50:00", "vote_id": "CAV00009230", "type": "other", "no_count": 0, "bill_id": "CAB00004148", "no_votes": []}], "documents": [], "title": "An act to amend Section 1750.1 of the Business and Professions Code, and to amend Section 104830 of, and to add Section 104762 to, the Health and Safety Code, relating to oral health.", "scraped_subjects": ["Topical fluoride application."], "state": "ca", "subjects": [], "chamber": "lower", "type": ["bill", "fiscal committee"], "sponsors": [{"leg_id": "CAL000044", "type": "primary", "name": "Block"}], "action_dates": {"passed_upper": null, "passed_lower": null, "last": "2009-08-06 00:00:00", "signed": null, "first": "2009-02-25 00:00:00"}, "versions": [{"url": "http://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?bill_id=200920100AB667", "mimetype": "text/html", "+mimetype": "text/html", "doc_id": "CAD00040031", "name": "AB667"}], "country": "us", "created_at": "2010-07-09 17:28:10", "level": "state", "alternate_titles": ["An act to amend Section 104830 of, and to add Section 104762 to, the Health and Safety Code, relating to oral health."], "bill_id": "AB 667"}