transparency_data 0.0.1

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.
@@ -0,0 +1,71 @@
1
+ # TransparencyData.com Ruby Wrapper
2
+
3
+ By Wynn Netherland, Jeremy Hinegardner, and Luigi Montanez
4
+
5
+ Before using this library, please read the official [TransparencyData.com API documentation](http://transparencydata.com/api/). Query parameters and return formats are described there.
6
+
7
+ ## Setup
8
+
9
+ Get an API key from [Sunlight Labs](http://services.sunlightlabs.com/).
10
+
11
+ Required gems:
12
+
13
+ * monster_mash
14
+ * hashie
15
+
16
+ After a `gem install transparency_data`, you can do:
17
+
18
+ require 'transparency_data'
19
+ TransparencyData.api_key = 'YOUR_KEY_HERE'
20
+
21
+ Within a Rails app, create a `config/initializers/transparency_data.rb` and stick this in:
22
+
23
+ TransparencyData.configure do |config|
24
+ config.api_key = 'YOUR_KEY_HERE'
25
+ end
26
+
27
+ ## Usage
28
+
29
+ See the official [API docs](http://transparencydata.com/api/) for all parameters you can send in, and the [schema docs](http://transparencydata.com/docs/) for what you get back:
30
+
31
+ contributions = TransparencyData::Client.contributions(:contributor_ft => 'steve jobs')
32
+ contributions.each do |contribution|
33
+ puts "Amount: #{contribution.amount}"
34
+ puts "Date: #{contribution.date}"
35
+ end
36
+
37
+ lobbyings = TransparencyData::Client.lobbying(:client_ft => "apple inc")
38
+ lobbyings.each do |lobbying|
39
+ puts "Amount: #{lobbying.amount}"
40
+ puts "Year: #{lobbying.year}"
41
+ end
42
+
43
+ As described in the API docs, the TransparencyData.com API supports a special syntax as the parameter value for specifying ranges and sets on amount, cycle, year, and date. You can either pass in strings, or use a more Rubyish approach:
44
+
45
+ # contributions with an amount greater than or equal to $1000
46
+ TransparencyData::Client.contributions(:contributor_ft => 'steve jobs', :amount => {:gte => 1000})
47
+
48
+ # contributions with an amount less than or equal to $500
49
+ TransparencyData::Client.contributions(:contributor_ft => 'bill gates', :amount => {:lte => 500})
50
+
51
+ # contributions in the 2006 or 2008 cycle
52
+ TransparencyData::Client.contributions(:contributor_ft => 'eric schmidt', :cycle => [2006,2008]})
53
+
54
+ # contributions to Obama made between in Q1 2008
55
+ TransparencyData::Client.contributions(:recipient_ft => 'barack obama',
56
+ :date => {:between => ['2008-01-01','2008-03-31']})
57
+
58
+ ## Contributing
59
+
60
+ Required gems for running tests:
61
+
62
+ * mg
63
+ * shoulda
64
+ * jnunemaker-matchy
65
+ * mocha
66
+ * fakeweb
67
+ * vcr
68
+
69
+ Run the test suite:
70
+
71
+ rake test
@@ -0,0 +1,52 @@
1
+ require 'hashie'
2
+ require 'json'
3
+ require 'monster_mash'
4
+
5
+ Hash.send :include, Hashie::HashExtensions
6
+
7
+
8
+
9
+ module TransparencyData
10
+
11
+ VERSION = "0.0.1".freeze
12
+
13
+ # config/initializers/transparency_data.rb (for instance)
14
+ #
15
+ # TransparencyData.configure do |config|
16
+ # config.api_key = 'api_key'
17
+ # end
18
+ #
19
+ def self.configure
20
+ yield self
21
+ true
22
+ end
23
+
24
+ def self.api_url(endpoint, version = self.api_version)
25
+ "http://transparencydata.com/api/#{version}#{endpoint}.json"
26
+ end
27
+
28
+ # class << self
29
+ # attr_accessor :api_key
30
+ # attr_accessor :api_version
31
+ # end
32
+
33
+ def self.api_version
34
+ @api_version || "1.0"
35
+ end
36
+
37
+ def self.api_version=(value)
38
+ @api_version = value
39
+ end
40
+
41
+ def self.api_key
42
+ @api_key
43
+ end
44
+
45
+ def self.api_key=(value)
46
+ @api_key = value
47
+ end
48
+
49
+
50
+ end
51
+
52
+ require 'lib/transparency_data/client'
@@ -0,0 +1,50 @@
1
+ module TransparencyData
2
+ class Client < MonsterMash::Base
3
+
4
+ defaults do
5
+ params :apikey => TransparencyData.api_key
6
+ end
7
+
8
+ get(:contributions) do |api_params|
9
+ uri TransparencyData.api_url("/contributions")
10
+ params TransparencyData::Client.prepare_params(api_params)
11
+ handler do |response|
12
+ TransparencyData::Client.handle_response(response)
13
+ end
14
+ end
15
+
16
+ get(:lobbying) do |api_params|
17
+ uri TransparencyData.api_url("/lobbying")
18
+ params TransparencyData::Client.prepare_params(api_params)
19
+ handler do |response|
20
+ TransparencyData::Client.handle_response(response)
21
+ end
22
+ end
23
+
24
+ def self.prepare_params(params)
25
+ params.each do |key, value|
26
+ if value.is_a?(Hash)
27
+
28
+ case value.keys.first
29
+ when :gte
30
+ params[key] = ">|#{value.values.first}"
31
+ when :lte
32
+ params[key] = "<|#{value.values.first}"
33
+ when :between
34
+ params[key] = "><|#{value.values.first.join('|')}"
35
+ end
36
+
37
+ elsif value.is_a?(Array)
38
+ params[key] = value.join("|")
39
+ end
40
+ end
41
+ params
42
+ end
43
+
44
+ def self.handle_response(response)
45
+ # TODO: raise_errors
46
+ JSON.parse(response.body).map {|c| Hashie::Mash.new(c)}
47
+ end
48
+
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: transparency_data
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Wynn Netherland
13
+ - Jeremy Hinegardner
14
+ - Luigi Montanez
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2010-05-06 00:00:00 -05:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: rake
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: monster_mash
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 1
44
+ - 0
45
+ version: 0.1.0
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: hashie
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 2
58
+ - 0
59
+ version: 0.2.0
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: yard
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ type: :development
73
+ version_requirements: *id004
74
+ - !ruby/object:Gem::Dependency
75
+ name: shoulda
76
+ prerelease: false
77
+ requirement: &id005 !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 2
83
+ - 10
84
+ - 1
85
+ version: 2.10.1
86
+ type: :development
87
+ version_requirements: *id005
88
+ - !ruby/object:Gem::Dependency
89
+ name: jnunemaker-matchy
90
+ prerelease: false
91
+ requirement: &id006 !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "="
94
+ - !ruby/object:Gem::Version
95
+ segments:
96
+ - 0
97
+ - 4
98
+ - 0
99
+ version: 0.4.0
100
+ type: :development
101
+ version_requirements: *id006
102
+ - !ruby/object:Gem::Dependency
103
+ name: fakeweb
104
+ prerelease: false
105
+ requirement: &id007 !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ segments:
110
+ - 1
111
+ - 2
112
+ - 5
113
+ version: 1.2.5
114
+ type: :development
115
+ version_requirements: *id007
116
+ - !ruby/object:Gem::Dependency
117
+ name: vcr
118
+ prerelease: false
119
+ requirement: &id008 !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ segments:
124
+ - 0
125
+ - 4
126
+ - 1
127
+ version: 0.4.1
128
+ type: :development
129
+ version_requirements: *id008
130
+ - !ruby/object:Gem::Dependency
131
+ name: mg
132
+ prerelease: false
133
+ requirement: &id009 !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ segments:
138
+ - 0
139
+ - 0
140
+ - 8
141
+ version: 0.0.8
142
+ type: :development
143
+ version_requirements: *id009
144
+ - !ruby/object:Gem::Dependency
145
+ name: mocha
146
+ prerelease: false
147
+ requirement: &id010 !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ segments:
152
+ - 0
153
+ - 9
154
+ - 8
155
+ version: 0.9.8
156
+ type: :development
157
+ version_requirements: *id010
158
+ description: Wrapper for the Sunlight Transparency data API
159
+ email:
160
+ - wynn.netherland@gmail.com
161
+ - jeremy@hinegardner.org
162
+ - luigi.montanez@gmail.com
163
+ executables: []
164
+
165
+ extensions: []
166
+
167
+ extra_rdoc_files: []
168
+
169
+ files:
170
+ - README.md
171
+ - lib/transparency_data.rb
172
+ - lib/transparency_data/client.rb
173
+ has_rdoc: false
174
+ homepage: http://github.com/pengwynn/transparency_data
175
+ licenses: []
176
+
177
+ post_install_message:
178
+ rdoc_options: []
179
+
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ segments:
187
+ - 0
188
+ version: "0"
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ segments:
194
+ - 0
195
+ version: "0"
196
+ requirements: []
197
+
198
+ rubyforge_project:
199
+ rubygems_version: 1.3.6
200
+ signing_key:
201
+ specification_version: 3
202
+ summary: Wrapper for the Sunlight Transparency data API
203
+ test_files: []
204
+