campaign_cash 2.3.2 → 2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.rdoc +12 -1
- data/lib/campaign_cash/base.rb +100 -100
- data/lib/campaign_cash/candidate.rb +103 -103
- data/lib/campaign_cash/committee.rb +102 -99
- data/lib/campaign_cash/contribution.rb +46 -36
- data/lib/campaign_cash/electioneering_communication.rb +4 -4
- data/lib/campaign_cash/filing.rb +59 -60
- data/lib/campaign_cash/filing_summary.rb +8 -8
- data/lib/campaign_cash/form.rb +7 -7
- data/lib/campaign_cash/independent_expenditure.rb +37 -35
- data/lib/campaign_cash/individual_contribution.rb +11 -11
- data/lib/campaign_cash/late_contribution.rb +37 -0
- data/lib/campaign_cash/president.rb +49 -49
- data/lib/campaign_cash/version.rb +1 -1
- data/lib/campaign_cash.rb +1 -1
- data/test/campaign_cash/test_candidate.rb +1 -1
- data/test/campaign_cash/test_committee.rb +2 -2
- data/test/campaign_cash/test_independent_expenditure.rb +1 -1
- data/test/campaign_cash/test_late_contribution.rb +24 -0
- data/test/test_helper.rb +1 -1
- metadata +87 -49
@@ -1,57 +1,59 @@
|
|
1
1
|
module CampaignCash
|
2
2
|
class IndependentExpenditure < Base
|
3
|
-
|
4
|
-
attr_reader :committee, :district, :state, :committee_name, :purpose, :candidate, :candidate_name,
|
5
|
-
|
3
|
+
|
4
|
+
attr_reader :committee, :district, :state, :committee_name, :purpose, :candidate, :candidate_name,
|
5
|
+
:support_or_oppose, :date, :amount, :office, :amendment, :date_received, :payee, :fec_uri,
|
6
|
+
:transaction_id, :unique_id, :filing_id, :amended_from
|
7
|
+
|
6
8
|
def initialize(params={})
|
7
9
|
params.each_pair do |k,v|
|
8
10
|
instance_variable_set("@#{k}", v)
|
9
11
|
end
|
10
12
|
end
|
11
|
-
|
13
|
+
|
12
14
|
def self.create(params={})
|
13
15
|
self.new :committee => parse_committee(params['fec_committee']),
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
16
|
+
:committee_name => params['fec_committee_name'],
|
17
|
+
:candidate => parse_candidate(params['fec_candidate']),
|
18
|
+
:office => params['office'],
|
19
|
+
:state => params['state'] ? params['state'].strip : nil,
|
20
|
+
:district => params['district'],
|
21
|
+
:date => date_parser(params['date']),
|
22
|
+
:support_or_oppose => params['support_or_oppose'],
|
23
|
+
:payee => params['payee'],
|
24
|
+
:purpose => params['purpose'],
|
25
|
+
:amount => params['amount'].to_f,
|
26
|
+
:fec_uri => params['fec_uri'],
|
27
|
+
:date_received => date_parser(params['date_received']),
|
28
|
+
:amendment => params['amendment'],
|
29
|
+
:transaction_id => params['transaction_id'],
|
30
|
+
:candidate_name => params['candidate_name'],
|
31
|
+
:filing_id => params['filing_id'].to_i,
|
32
|
+
:amended_from => params['amended_from'], # <= original filing ID will be nil if amendment is false
|
33
|
+
# unique_id is a SHA1 of filing_id and transaction_id
|
34
|
+
# If the expenditure is amended, the unique_id will be amended_from + transaction_id
|
35
|
+
# so it can be used as an overrideable unique key
|
36
|
+
:unique_id => params['unique_id']
|
35
37
|
end
|
36
|
-
|
38
|
+
|
37
39
|
def self.latest(offset=nil)
|
38
40
|
reply = Base.invoke("#{Base::CURRENT_CYCLE}/independent_expenditures",{:offset => offset})
|
39
41
|
results = reply['results']
|
40
42
|
results.map{|c| IndependentExpenditure.create(c)}
|
41
43
|
end
|
42
|
-
|
44
|
+
|
43
45
|
def self.date(date,offset=nil)
|
44
46
|
d = Date.strptime(date, '%m/%d/%Y')
|
45
47
|
cycle = cycle_from_date(d)
|
46
48
|
reply = Base.invoke("#{cycle}/independent_expenditures/#{d.year}/#{d.month}/#{d.day}", {:offset => offset})
|
47
|
-
|
49
|
+
results = reply['results']
|
48
50
|
results.map{|c| IndependentExpenditure.create(c)}
|
49
51
|
end
|
50
|
-
|
52
|
+
|
51
53
|
def self.committee(id, cycle, offset=nil)
|
52
54
|
independent_expenditures = []
|
53
55
|
reply = Base.invoke("#{cycle}/committees/#{id}/independent_expenditures",{:offset => offset})
|
54
|
-
|
56
|
+
results = reply['results']
|
55
57
|
comm = reply['fec_committee']
|
56
58
|
results.each do |result|
|
57
59
|
result['fec_committee'] = comm
|
@@ -59,11 +61,11 @@ module CampaignCash
|
|
59
61
|
end
|
60
62
|
independent_expenditures
|
61
63
|
end
|
62
|
-
|
64
|
+
|
63
65
|
def self.candidate(id, cycle, offset=nil)
|
64
66
|
independent_expenditures = []
|
65
67
|
reply = Base.invoke("#{cycle}/candidates/#{id}/independent_expenditures",{:offset => offset})
|
66
|
-
|
68
|
+
results = reply['results']
|
67
69
|
cand = reply['fec_candidate']
|
68
70
|
results.each do |result|
|
69
71
|
result['fec_candidate'] = cand
|
@@ -71,12 +73,12 @@ module CampaignCash
|
|
71
73
|
end
|
72
74
|
independent_expenditures
|
73
75
|
end
|
74
|
-
|
76
|
+
|
75
77
|
def self.president(cycle=CURRENT_CYCLE,offset=nil)
|
76
78
|
reply = Base.invoke("#{cycle}/president/independent_expenditures",{:offset => offset})
|
77
79
|
results = reply['results']
|
78
80
|
results.map{|c| IndependentExpenditure.create(c)}
|
79
81
|
end
|
80
|
-
|
82
|
+
|
81
83
|
end
|
82
|
-
end
|
84
|
+
end
|
@@ -1,35 +1,35 @@
|
|
1
1
|
module CampaignCash
|
2
2
|
class IndividualContribution < Base
|
3
|
-
|
3
|
+
|
4
4
|
attr_reader :zip5, :system_code, :occupation, :conduit_zip, :conduit_address_two, :city, :zip, :increased_limit, :donor_candidate, :conduit_name, :conduit_city, :prefix, :memo_text, :back_ref_tran_id, :aggregate_amount, :filing_id, :donor_office, :back_ref_sched_name, :address_two, :pac_name, :exclude, :conduit_address_one, :amount, :transaction_type, :lng, :flag_orgind, :date, :fec_form_type, :donor_state, :donor_cand_id, :last_name, :full_name, :employer, :donor_district, :conduit_state, :address_one, :tran_id, :suffix, :donor_cmte_id, :display_name, :transaction_description, :prigen, :memo_code, :linenumber, :lat, :amended_cd, :state, :middle_name, :first_name
|
5
|
-
|
5
|
+
|
6
6
|
def initialize(params={})
|
7
7
|
params.each_pair do |k,v|
|
8
8
|
instance_variable_set("@#{k}", v)
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def self.create(params={})
|
13
13
|
self.new(params)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def self.committee(fecid, offset=nil)
|
17
17
|
cycle = CURRENT_CYCLE
|
18
18
|
results = invoke("#{cycle}/contributions/committee/#{fecid}", {:offset => offset})['results']
|
19
|
-
|
19
|
+
results.map{|c| IndividualContribution.create(c) }
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def self.filing(form_id, offset=nil)
|
23
23
|
cycle = CURRENT_CYCLE
|
24
24
|
results = invoke("#{cycle}/contributions/filing/#{form_id}", {:offset => offset})['results']
|
25
|
-
|
25
|
+
results.map{|c| IndividualContribution.create(c) }
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def self.candidate(fecid, offset=nil)
|
29
29
|
cycle = CURRENT_CYCLE
|
30
30
|
results = invoke("#{cycle}/contributions/candidate/#{fecid}", {:offset => offset})['results']
|
31
|
-
|
31
|
+
results.map{|c| IndividualContribution.create(c) }
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
end
|
35
|
-
end
|
35
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module CampaignCash
|
2
|
+
class LateContribution < Base
|
3
|
+
|
4
|
+
attr_reader :contribution_date, :contributor_prefix, :contributor_zip, :contributor_suffix, :contributor_state,
|
5
|
+
:entity_type, :contributor_employer, :contributor_occupation, :fec_committee_id, :transaction_id, :contributor_last_name,
|
6
|
+
:office_state, :contributor_fec_id, :contribution_amount, :contributor_street_1, :contributor_street_2, :contributor_city,
|
7
|
+
:contributor_middle_name, :cycle, :fec_filing_id, :fec_candidate_id, :contributor_first_name, :contributor_organization_name
|
8
|
+
|
9
|
+
def initialize(params={})
|
10
|
+
params.each_pair do |k,v|
|
11
|
+
instance_variable_set("@#{k}", v)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.create(params={})
|
16
|
+
self.new(params)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.latest(offset = nil)
|
20
|
+
cycle = CURRENT_CYCLE
|
21
|
+
results = invoke("#{cycle}/contributions/48hour", {:offset => offset})['results']
|
22
|
+
results.map {|obj| create(obj)}
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.candidate(candidate_id, offset = nil)
|
26
|
+
cycle = CURRENT_CYCLE
|
27
|
+
results = invoke("#{cycle}/candidates/#{candidate_id}/48hour", {:offset => offset})['results']
|
28
|
+
results.map {|obj| create(obj)}
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.committee(committee_id, offset = nil)
|
32
|
+
cycle = CURRENT_CYCLE
|
33
|
+
results = invoke("#{cycle}/committees/#{committee_id}/48hour", {:offset => offset})['results']
|
34
|
+
results.map {|obj| create(obj)}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -2,10 +2,10 @@ module CampaignCash
|
|
2
2
|
class President < Base
|
3
3
|
|
4
4
|
attr_reader :committee_id, :name, :id, :party, :office, :date_coverage_from, :date_coverage_to, :total_receipts, :total_disbursements,
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
:end_cash, :total_refunds, :total_contributions, :net_individual_contributions, :net_pac_contributions, :transfers_in,
|
6
|
+
:net_party_contributions, :net_candidate_contributions, :net_primary_contributions, :net_general_contributions,
|
7
|
+
:federal_funds, :contributions_less_than_200, :contributions_200_499, :contributions_500_1499, :contributions_1500_2499,
|
8
|
+
:contributions_max
|
9
9
|
|
10
10
|
def initialize(params={})
|
11
11
|
params.each_pair do |k,v|
|
@@ -14,47 +14,47 @@ module CampaignCash
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# Creates a new president summary object from a JSON API presidential response.
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
17
|
+
def self.create_summary(params={})
|
18
|
+
self.new :name => params['name'],
|
19
|
+
:id => params['candidate_id'],
|
20
|
+
:party => get_party(params['party']),
|
21
|
+
:office => 'president',
|
22
|
+
:committee_id => params['committee_id'],
|
23
|
+
:total_receipts => params['total_receipts'],
|
24
|
+
:total_disbursements => params['total_disbursements'],
|
25
|
+
:end_cash => params['cash_on_hand'],
|
26
|
+
:date_coverage_from => params['date_coverage_from'],
|
27
|
+
:date_coverage_to => params['date_coverage_to']
|
28
|
+
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
30
|
+
# Creates a detailed president object
|
31
|
+
def self.create_detail(params={})
|
32
|
+
self.new :name => params['candidate_name'],
|
33
|
+
:id => params['candidate_id'],
|
34
|
+
:party => get_party(params['party']),
|
35
|
+
:office => 'president',
|
36
|
+
:committee_id => params['committee_id'],
|
37
|
+
:total_receipts => params['total_receipts'],
|
38
|
+
:total_contributions => params['total_contributions'],
|
39
|
+
:total_disbursements => params['total_disbursements'],
|
40
|
+
:end_cash => params['cash_on_hand'],
|
41
|
+
:date_coverage_from => params['date_coverage_from'],
|
42
|
+
:date_coverage_to => params['date_coverage_to'],
|
43
|
+
:total_refunds => params['total_refunds'],
|
44
|
+
:net_individual_contributions => params['net_individual_contributions'],
|
45
|
+
:net_pac_contributions => params['net_pac_contributions'],
|
46
|
+
:net_party_contributions => params['net_party_contributions'],
|
47
|
+
:net_candidate_contributions => params['net_candidate_contributions'],
|
48
|
+
:net_primary_contributions => params['net_primary_contributions'],
|
49
|
+
:net_general_contributions => params['net_general_contributions'],
|
50
|
+
:federal_funds => params['federal_funds'],
|
51
|
+
:transfers_in => params['transfers_in'],
|
52
|
+
:contributions_less_than_200 => params['total_contributions_less_than_200'],
|
53
|
+
:contributions_200_499 => params['contributions_200_499'],
|
54
|
+
:contributions_500_1499 => params['contributions_500_1499'],
|
55
|
+
:contributions_1500_2499 => params['contributions_1500_2499'],
|
56
|
+
:contributions_max => params['total_contributions_max']
|
57
|
+
end
|
58
58
|
|
59
59
|
# Returns an array of presidential candidates for a given cycle, defaults to the current cycle.
|
60
60
|
# Only returns candidates that The New York Times is tracking for financial activity.
|
@@ -68,16 +68,16 @@ module CampaignCash
|
|
68
68
|
# Only returns candidates tracked by The New York Times.
|
69
69
|
def self.detail(id, cycle=CURRENT_CYCLE)
|
70
70
|
reply = invoke("#{cycle}/president/candidates/#{id}", {})
|
71
|
-
|
71
|
+
results = reply['results'].first
|
72
72
|
create_detail(results)
|
73
73
|
end
|
74
74
|
|
75
75
|
private
|
76
76
|
|
77
77
|
def self.get_party party_identifier
|
78
|
-
|
79
|
-
|
80
|
-
|
78
|
+
return "DEM" if party_identifier == "D"
|
79
|
+
return "REP" if party_identifier == "R"
|
80
|
+
party_identifier
|
81
81
|
end
|
82
82
|
end
|
83
|
-
end
|
83
|
+
end
|
data/lib/campaign_cash.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
%w(base candidate committee contribution individual_contribution filing filing_summary form independent_expenditure president electioneering_communication).each do |f|
|
1
|
+
%w(base candidate committee contribution individual_contribution filing filing_summary form independent_expenditure president electioneering_communication late_contribution).each do |f|
|
2
2
|
require File.join(File.dirname(__FILE__), '../lib/campaign_cash', f)
|
3
3
|
end
|
@@ -61,7 +61,7 @@ class TestCampaignCash::TestCandidate < Test::Unit::TestCase
|
|
61
61
|
|
62
62
|
context "candidate leaders" do
|
63
63
|
setup do
|
64
|
-
reply = Base.invoke('
|
64
|
+
reply = Base.invoke('2012/candidates/leaders/end-cash', {})
|
65
65
|
results = reply['results']
|
66
66
|
@candidates = results.map{|c| Candidate.create(c)}
|
67
67
|
end
|
@@ -88,8 +88,8 @@ class TestCampaignCash::TestCommittee < Test::Unit::TestCase
|
|
88
88
|
@contribution = Contribution.find('C00458588', 2010)
|
89
89
|
end
|
90
90
|
|
91
|
-
should "return
|
92
|
-
assert_equal @contribution.total_results,
|
91
|
+
should "return 141 total results" do
|
92
|
+
assert_equal @contribution.total_results, 141
|
93
93
|
end
|
94
94
|
|
95
95
|
should "return a $5,000 contribution to Renee Ellmers" do
|
@@ -19,7 +19,7 @@ class TestCampaignCash::TestIndependentExpenditure < Test::Unit::TestCase
|
|
19
19
|
end
|
20
20
|
|
21
21
|
should "return at least one independent expenditure against Barack Obama" do
|
22
|
-
assert_equal("P80003338", @independent_expenditures.first.candidate)
|
22
|
+
assert_equal("P80003338", @independent_expenditures.select{|ie| ie.candidate == 'P80003338'}.first.candidate)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestCampaignCash::TestLateContribution < Test::Unit::TestCase
|
4
|
+
include CampaignCash
|
5
|
+
|
6
|
+
context "get late contributions" do
|
7
|
+
objs_collection = []
|
8
|
+
objs_collection << LateContribution.committee("C00505255")
|
9
|
+
objs_collection << LateContribution.latest
|
10
|
+
objs_collection << LateContribution.candidate("H2NC09092")
|
11
|
+
|
12
|
+
objs_collection.each do |objs|
|
13
|
+
should "return a list of objects of the IndividualContribution type or an empty list" do
|
14
|
+
if objs.size > 0
|
15
|
+
objs.each do |obj|
|
16
|
+
assert_kind_of(LateContribution, obj)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
assert_equal([], objs)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -4,7 +4,7 @@ require 'shoulda'
|
|
4
4
|
require 'json'
|
5
5
|
require 'ostruct'
|
6
6
|
|
7
|
-
%w(base candidate committee contribution individual_contribution filing filing_summary form independent_expenditure president electioneering_communication).each do |f|
|
7
|
+
%w(base candidate committee contribution individual_contribution filing filing_summary form independent_expenditure president electioneering_communication late_contribution).each do |f|
|
8
8
|
require File.join(File.dirname(__FILE__), '../lib/campaign_cash', f)
|
9
9
|
end
|
10
10
|
|
metadata
CHANGED
@@ -1,67 +1,91 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: campaign_cash
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 4
|
9
|
+
version: "2.4"
|
6
10
|
platform: ruby
|
7
|
-
authors:
|
11
|
+
authors:
|
8
12
|
- Derek Willis
|
9
13
|
autorequire:
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
|
17
|
+
date: 2012-07-19 00:00:00 Z
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
15
20
|
name: json
|
16
|
-
|
21
|
+
prerelease: false
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
23
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 3
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
22
31
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
26
34
|
name: rake
|
27
|
-
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
37
|
none: false
|
29
|
-
requirements:
|
30
|
-
- - =
|
31
|
-
- !ruby/object:Gem::Version
|
38
|
+
requirements:
|
39
|
+
- - "="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
hash: 49
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
- 8
|
45
|
+
- 7
|
32
46
|
version: 0.8.7
|
33
47
|
type: :development
|
34
|
-
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
37
50
|
name: bundler
|
38
|
-
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
53
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 23
|
58
|
+
segments:
|
59
|
+
- 1
|
60
|
+
- 0
|
61
|
+
- 0
|
43
62
|
version: 1.0.0
|
44
63
|
type: :development
|
45
|
-
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
48
66
|
name: shoulda
|
49
|
-
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
69
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
55
77
|
type: :development
|
56
|
-
|
57
|
-
version_requirements: *2153721920
|
78
|
+
version_requirements: *id004
|
58
79
|
description: A client for The New York Times Campaign Finance API
|
59
|
-
email:
|
80
|
+
email:
|
60
81
|
- dwillis@nytimes.com
|
61
82
|
executables: []
|
83
|
+
|
62
84
|
extensions: []
|
85
|
+
|
63
86
|
extra_rdoc_files: []
|
64
|
-
|
87
|
+
|
88
|
+
files:
|
65
89
|
- .gitignore
|
66
90
|
- Gemfile
|
67
91
|
- Gemfile.lock
|
@@ -80,6 +104,7 @@ files:
|
|
80
104
|
- lib/campaign_cash/form.rb
|
81
105
|
- lib/campaign_cash/independent_expenditure.rb
|
82
106
|
- lib/campaign_cash/individual_contribution.rb
|
107
|
+
- lib/campaign_cash/late_contribution.rb
|
83
108
|
- lib/campaign_cash/president.rb
|
84
109
|
- lib/campaign_cash/version.rb
|
85
110
|
- test/campaign_cash/test_candidate.rb
|
@@ -90,33 +115,45 @@ files:
|
|
90
115
|
- test/campaign_cash/test_form.rb
|
91
116
|
- test/campaign_cash/test_independent_expenditure.rb
|
92
117
|
- test/campaign_cash/test_individual_contribution.rb
|
118
|
+
- test/campaign_cash/test_late_contribution.rb
|
93
119
|
- test/campaign_cash/test_president.rb
|
94
120
|
- test/test_helper.rb
|
95
121
|
homepage: http://rubygems.org/gems/campaign_cash
|
96
122
|
licenses: []
|
123
|
+
|
97
124
|
post_install_message:
|
98
125
|
rdoc_options: []
|
99
|
-
|
126
|
+
|
127
|
+
require_paths:
|
100
128
|
- lib
|
101
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
130
|
none: false
|
103
|
-
requirements:
|
104
|
-
- -
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
hash: 3
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
version: "0"
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
139
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
hash: 23
|
144
|
+
segments:
|
145
|
+
- 1
|
146
|
+
- 3
|
147
|
+
- 6
|
112
148
|
version: 1.3.6
|
113
149
|
requirements: []
|
150
|
+
|
114
151
|
rubyforge_project: campaign_cash
|
115
152
|
rubygems_version: 1.8.17
|
116
153
|
signing_key:
|
117
154
|
specification_version: 3
|
118
155
|
summary: Following the money.
|
119
|
-
test_files:
|
156
|
+
test_files:
|
120
157
|
- test/campaign_cash/test_candidate.rb
|
121
158
|
- test/campaign_cash/test_committee.rb
|
122
159
|
- test/campaign_cash/test_electioneering_communication.rb
|
@@ -125,5 +162,6 @@ test_files:
|
|
125
162
|
- test/campaign_cash/test_form.rb
|
126
163
|
- test/campaign_cash/test_independent_expenditure.rb
|
127
164
|
- test/campaign_cash/test_individual_contribution.rb
|
165
|
+
- test/campaign_cash/test_late_contribution.rb
|
128
166
|
- test/campaign_cash/test_president.rb
|
129
167
|
- test/test_helper.rb
|