govkit 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 0.6.0
data/govkit.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{govkit}
8
- s.version = "0.5.1"
8
+ s.version = "0.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Participatory Politics Foundation", "Srinivas Aki", "Carl Tashian"]
12
- s.date = %q{2010-12-21}
12
+ s.date = %q{2011-02-01}
13
13
  s.description = %q{Govkit lets you quickly get encapsulated Ruby objects for common open government APIs. We're starting with Sunlight's Open States API and the Project Vote Smart API.}
14
14
  s.email = %q{develop@opencongress.org}
15
15
  s.extra_rdoc_files = [
@@ -21,7 +21,7 @@ module GovKit
21
21
  @wikipedia_base_url = 'en.wikipedia.org'
22
22
 
23
23
  # Permant home for contribution category mappings
24
- @transparency_data_categories_url = 'assets.transparencydata.org.s3.amazonaws.com/docs/catcodes.csv'
24
+ @transparency_data_categories_url = 'http://assets.transparencydata.org.s3.amazonaws.com/docs/catcodes.csv'
25
25
  end
26
26
  end
27
27
 
@@ -18,9 +18,11 @@ module GovKit
18
18
  end
19
19
 
20
20
  class Bill < OpenStatesResource
21
- # http://openstates.sunlightlabs.com/api/v1/bills/ca/20092010/AB667/
21
+ # http://openstates.sunlightlabs.com/api/v1/bills/ca/20092010/AB 667/
22
22
  def self.find(state_abbrev, session, bill_id, chamber = '')
23
- response = get("/bills/#{state_abbrev}/#{session}/#{chamber.blank? ? '' : chamber + '/'}#{bill_id}/")
23
+ escaped_bill_id = bill_id.gsub(/ /, '%20')
24
+ escaped_session = session.gsub(/ /, '%20')
25
+ response = get("/bills/#{state_abbrev.downcase}/#{escaped_session}/#{chamber.blank? ? '' : chamber + '/'}#{escaped_bill_id}/")
24
26
  parse(response)
25
27
  end
26
28
 
@@ -25,6 +25,10 @@ module GovKit
25
25
  raise ResourceNotFound, "404 Not Found"
26
26
  when Net::HTTPUnauthorized
27
27
  raise NotAuthorized, "401 Not Authorized; have you set up your API key?"
28
+ when Net::HTTPServerError
29
+ raise ServerError, '5xx server error'
30
+ when Net::HTTPClientError
31
+ raise ClientError, '4xx client error'
28
32
  end
29
33
  end
30
34
 
@@ -86,7 +90,7 @@ module GovKit
86
90
  end
87
91
 
88
92
  def find_or_create_resource_for(name)
89
- resource_name = name.to_s.gsub(/^[_+]/,'').gsub(/^(\-?\d)/, "n#{$1}").gsub(/\s/, '').camelize
93
+ resource_name = name.to_s.gsub(/^[_\-+]/,'').gsub(/^(\-?\d)/, "n#{$1}").gsub(/(\s|-)/, '').camelize
90
94
  if self.class.parents.size > 1
91
95
  find_resource_in_modules(resource_name, self.class.parents)
92
96
  else
@@ -1,5 +1,3 @@
1
- require 'fastercsv'
2
-
3
1
  module GovKit
4
2
  class TransparencyDataResource < Resource
5
3
  default_params :apikey => GovKit::configuration.sunlight_apikey
@@ -25,14 +23,19 @@ module GovKit
25
23
 
26
24
  class Categories
27
25
  # Contribution category code mapping table, in CSV format
28
- # Returns an array of hashes.
26
+ # Returns an array of hashes, each with the following keys:
27
+ # :source, :code, :name, :industry, :order
29
28
  def self.all
29
+ # This provides Ruby 1.8 & 1.9 CSV compatibility
30
+ if CSV.const_defined? :Reader
31
+ csv = FasterCSV
32
+ else
33
+ csv = CSV
34
+ end
30
35
  categories = []
31
36
  open(GovKit::configuration.transparency_data_categories_url) do |f|
32
- f.each_line do |line|
33
- FasterCSV.parse(line) do |row|
34
- categories << row.fields
35
- end
37
+ csv.parse(f.read, :headers => true, :header_converters => :symbol) do |row|
38
+ categories << row.to_hash
36
39
  end
37
40
  end
38
41
  categories
data/lib/gov_kit.rb CHANGED
@@ -7,6 +7,11 @@ require 'httparty'
7
7
  require 'open-uri'
8
8
  require 'json'
9
9
  require 'gov_kit/configuration'
10
+ require 'csv'
11
+
12
+ if VERSION[0,3] == "1.8"
13
+ require 'fastercsv'
14
+ end
10
15
 
11
16
  module GovKit
12
17
  autoload :Resource, 'gov_kit/resource'
@@ -30,4 +35,8 @@ module GovKit
30
35
  class InvalidRequest < GovKitError; end
31
36
 
32
37
  class ResourceNotFound < GovKitError; end
38
+
39
+ class ServerError < GovKitError; end
40
+
41
+ class ClientError < GovKitError; end
33
42
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govkit
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 5
9
- - 1
10
- version: 0.5.1
8
+ - 6
9
+ - 0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Participatory Politics Foundation
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-12-21 00:00:00 -08:00
20
+ date: 2011-02-01 00:00:00 -08:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency