campaign_cash 1.2 → 1.3
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.
- data/campaign_cash.gemspec +6 -4
- data/lib/campaign_cash/base.rb +1 -0
- data/lib/campaign_cash/committee.rb +11 -5
- data/lib/campaign_cash/contribution.rb +27 -13
- data/lib/campaign_cash/version.rb +1 -1
- data/lib/campaign_cash.rb +3 -15
- data/test/campaign_cash/test_candidate.rb +1 -1
- data/test/campaign_cash/test_committee.rb +23 -18
- data/test/campaign_cash/test_filing.rb +1 -1
- data/test/campaign_cash/test_form.rb +1 -1
- data/test/test_helper.rb +6 -13
- metadata +10 -6
data/campaign_cash.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "campaign_cash/version"
|
3
4
|
|
4
5
|
Gem::Specification.new do |s|
|
5
6
|
s.name = "campaign_cash"
|
@@ -17,7 +18,8 @@ Gem::Specification.new do |s|
|
|
17
18
|
|
18
19
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
19
20
|
|
20
|
-
s.files
|
21
|
-
s.
|
22
|
-
s.
|
21
|
+
s.files = `git ls-files`.split("\n")
|
22
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.require_paths = ["lib"]
|
23
25
|
end
|
data/lib/campaign_cash/base.rb
CHANGED
@@ -6,7 +6,7 @@ module CampaignCash
|
|
6
6
|
:total_receipts, :total_contributions, :total_from_individuals,
|
7
7
|
:total_from_pacs, :candidate_loans, :total_disbursements,
|
8
8
|
:total_refunds, :debts_owed, :begin_cash, :end_cash,
|
9
|
-
:date_coverage_to, :date_coverage_from
|
9
|
+
:date_coverage_to, :date_coverage_from, :other_cycles
|
10
10
|
|
11
11
|
def initialize(params={})
|
12
12
|
params.each_pair do |k,v|
|
@@ -35,7 +35,8 @@ module CampaignCash
|
|
35
35
|
:end_cash => params['end_cash'],
|
36
36
|
:date_coverage_from => params['date_coverage_from'],
|
37
37
|
:date_coverage_to => params['date_coverage_to'],
|
38
|
-
:candidate => params['candidate']
|
38
|
+
:candidate => params['candidate'],
|
39
|
+
:other_cycles => params['other_cycles'].map{|cycle| cycle['cycle']['fec_committee']['cycle']}
|
39
40
|
end
|
40
41
|
|
41
42
|
def self.create_from_search_results(params={})
|
@@ -55,19 +56,24 @@ module CampaignCash
|
|
55
56
|
def self.find(fecid, cycle=CURRENT_CYCLE)
|
56
57
|
reply = invoke("#{cycle}/committees/#{fecid}")
|
57
58
|
result = reply['results']
|
58
|
-
|
59
|
+
create(result.first) if result.first
|
59
60
|
end
|
60
61
|
|
61
62
|
def self.search(name, cycle=CURRENT_CYCLE)
|
62
63
|
reply = invoke("#{cycle}/committees/search", {:query => name})
|
63
64
|
results = reply['results']
|
64
|
-
results.map{|c|
|
65
|
+
results.map{|c| create_from_search_results(c)}
|
65
66
|
end
|
66
67
|
|
67
68
|
def self.new_committees(cycle=CURRENT_CYCLE)
|
68
69
|
reply = invoke("#{cycle}/committees/new",{})
|
69
70
|
results = reply['results']
|
70
|
-
results.map{|c|
|
71
|
+
results.map{|c| create(c)}
|
72
|
+
end
|
73
|
+
|
74
|
+
def contributions
|
75
|
+
reply = invoke("#{cycle}/committees/#{id}/contributions")
|
76
|
+
|
71
77
|
end
|
72
78
|
|
73
79
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module CampaignCash
|
2
2
|
class Contribution < Base
|
3
3
|
|
4
|
-
attr_reader :date, :candidate_uri, :primary_general, :amount, :state, :name, :image_uri, :party, :district
|
4
|
+
attr_reader :date, :candidate_uri, :primary_general, :amount, :state, :name, :image_uri, :party, :district, :committee_uri, :results, :total_results, :total_amount, :cycle
|
5
5
|
|
6
6
|
def initialize(params={})
|
7
7
|
params.each_pair do |k,v|
|
@@ -9,18 +9,32 @@ module CampaignCash
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.create(
|
13
|
-
self.new :
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
12
|
+
def self.create(params={})
|
13
|
+
self.new :committee_uri => params['committee'],
|
14
|
+
:total_results => params['total_results'],
|
15
|
+
:cycle => params['cycle'],
|
16
|
+
:total_amount => params['total_amount'],
|
17
|
+
:results => params['results'].map{|c| OpenStruct.new({
|
18
|
+
:date => date_parser(c['date']),
|
19
|
+
:candidate_uri => c['candidate_uri'],
|
20
|
+
:primary_general => c['primary_general'],
|
21
|
+
:amount => c['amount'],
|
22
|
+
:state => c['state'],
|
23
|
+
:name => c['name'],
|
24
|
+
:image_uri => c['image_uri'],
|
25
|
+
:party => c['party'],
|
26
|
+
:district => c['district']})}
|
27
|
+
|
24
28
|
end
|
29
|
+
|
30
|
+
def self.find(fecid, cycle=CURRENT_CYCLE, candidate=nil)
|
31
|
+
if candidate
|
32
|
+
reply = invoke("#{cycle}/committees/#{fecid}/contributions/candidates/#{candidate}")
|
33
|
+
else
|
34
|
+
reply = invoke("#{cycle}/committees/#{fecid}/contributions")
|
35
|
+
end
|
36
|
+
create(reply)
|
37
|
+
end
|
38
|
+
|
25
39
|
end
|
26
40
|
end
|
data/lib/campaign_cash.rb
CHANGED
@@ -1,15 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
5
|
-
|
6
|
-
require "campaign_cash/base"
|
7
|
-
# [Candidate methods](candidate.html)
|
8
|
-
require "campaign_cash/candidate"
|
9
|
-
# [Committee methods](committee.html)
|
10
|
-
require "campaign_cash/committee"
|
11
|
-
# [Filing methods](filing.html)
|
12
|
-
require "campaign_cash/filing"
|
13
|
-
require "campaign_cash/contribution"
|
14
|
-
require "campaign_cash/form"
|
15
|
-
require "campaign_cash/version"
|
1
|
+
%w(base candidate committee contribution filing form).each do |f|
|
2
|
+
require File.join(File.dirname(__FILE__), '../lib/campaign_cash', f)
|
3
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class TestCampaignCash::TestCommittee < Test::Unit::TestCase
|
4
4
|
include CampaignCash
|
@@ -56,40 +56,45 @@ class TestCampaignCash::TestCommittee < Test::Unit::TestCase
|
|
56
56
|
@filings = results.map{|f| Filing.create_from_filings(f)}
|
57
57
|
end
|
58
58
|
|
59
|
-
should "return
|
60
|
-
assert_equal @filings.size,
|
59
|
+
should "return 11 filings" do
|
60
|
+
assert_equal @filings.size, 11
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "committee detail" do
|
65
|
+
setup do
|
66
|
+
@committee = Committee.find('C00084475', 2012)
|
67
|
+
end
|
68
|
+
|
69
|
+
should "return 16 other cycles" do
|
70
|
+
assert_equal @committee.other_cycles.size, 16
|
61
71
|
end
|
62
72
|
end
|
63
73
|
|
64
74
|
context "committee contributions" do
|
65
75
|
setup do
|
66
|
-
|
67
|
-
results = reply['results']
|
68
|
-
@committee = reply['committee']
|
69
|
-
@num_records = reply['total_results']
|
70
|
-
@total_amount = reply['total_amount']
|
71
|
-
@contributions = results.map{|c| Contribution.create(@committee, c)}
|
76
|
+
@contribution = Contribution.find('C00458588', 2010)
|
72
77
|
end
|
73
78
|
|
74
79
|
should "return 125 total results" do
|
75
|
-
assert_equal @
|
80
|
+
assert_equal @contribution.total_results, 125
|
81
|
+
end
|
82
|
+
|
83
|
+
should "return a $5,000 contribution to Renee Ellmers" do
|
84
|
+
assert_equal @contribution.results.detect{|c| c.candidate_uri == "/candidates/H0NC02059.json"}.amount, 5000
|
76
85
|
end
|
86
|
+
|
77
87
|
end
|
78
88
|
|
79
89
|
context "committee contributions to a candidate" do
|
80
90
|
setup do
|
81
91
|
reply = Base.invoke('2010/committees/C00458588/contributions/candidates/H0NC02059', {})
|
82
|
-
|
83
|
-
@cycle = reply['cycle']
|
84
|
-
@committee = reply['committee']
|
85
|
-
@candidate = reply['candidate']
|
86
|
-
@total_amount = reply['total_amount']
|
87
|
-
@contributions = results.map{|c| Contribution.create(@cycle, @committee, c, @candidate)}
|
92
|
+
@contribution = Contribution.create(reply)
|
88
93
|
end
|
89
94
|
|
90
95
|
should "return 2 results totaling $10,000" do
|
91
|
-
assert_equal @
|
92
|
-
assert_equal @total_amount, 10000
|
96
|
+
assert_equal @contribution.results.size, 2
|
97
|
+
assert_equal @contribution.total_amount, 10000
|
93
98
|
end
|
94
99
|
end
|
95
100
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,25 +1,18 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'rubygems'
|
3
3
|
require 'shoulda'
|
4
|
-
require 'mocha'
|
5
4
|
require 'json'
|
5
|
+
require 'ostruct'
|
6
6
|
|
7
|
-
|
8
|
-
require File.dirname(__FILE__)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
require File.dirname(__FILE__) + '/../lib/campaign_cash/filing'
|
13
|
-
require File.dirname(__FILE__) + '/../lib/campaign_cash/form'
|
7
|
+
%w(base candidate committee contribution filing form).each do |f|
|
8
|
+
require File.join(File.dirname(__FILE__), '../lib/campaign_cash', f)
|
9
|
+
end
|
10
|
+
|
11
|
+
include CampaignCash
|
14
12
|
|
15
13
|
# set your NYT Campaign Finance API key as an environment variable to run the tests
|
16
14
|
API_KEY = ENV['NYT_CAMPFIN_API_KEY']
|
17
15
|
CampaignCash::Base.api_key = API_KEY
|
18
16
|
|
19
|
-
def api_url_for(path, params = {})
|
20
|
-
full_params = params.merge 'api-key' => API_KEY
|
21
|
-
CampaignCash::Base.build_request_url(path, full_params).to_s
|
22
|
-
end
|
23
|
-
|
24
17
|
module TestCampaignCash
|
25
18
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: campaign_cash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: "1.
|
8
|
+
- 3
|
9
|
+
version: "1.3"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Derek Willis
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-07-03 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -111,5 +111,9 @@ rubygems_version: 1.4.2
|
|
111
111
|
signing_key:
|
112
112
|
specification_version: 3
|
113
113
|
summary: Following the money.
|
114
|
-
test_files:
|
115
|
-
|
114
|
+
test_files:
|
115
|
+
- test/campaign_cash/test_candidate.rb
|
116
|
+
- test/campaign_cash/test_committee.rb
|
117
|
+
- test/campaign_cash/test_filing.rb
|
118
|
+
- test/campaign_cash/test_form.rb
|
119
|
+
- test/test_helper.rb
|