campaign_cash 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -188,6 +188,33 @@ There's also the option to retrieve the 20 most recent IEs for the presidential
188
188
 
189
189
  The IE responses also accept an optional offset argument, using multiples of 20.
190
190
 
191
+ == Individual Contributions
192
+
193
+ IndividualContribution objects are line items from committees' receipt filings. You can get them in three ways, by an FEC committee ID, a filing ID or an FEC candidate ID in groups of 20. These will be returned from newest to oldest. Note: in IndividualContribution responses, <tt>pac_name</tt> refers to any institutional donation, not just donations from other PACs.
194
+
195
+ IndividualContribution.committee("C00490045") # Restore Our Future
196
+ #=> [#<CampaignCash::IndividualContribution:0x102fd3948 @display_name=nil, @fec_form_type=nil, @aggregate_amount=100000.0, @zip="94129", @zip5="94129", @state="CA", @middle_name=nil, @conduit_state=nil, @conduit_address_one=nil, @conduit_name=nil, @memo_code=nil, @last_name=nil, @candidate_id=nil, @back_ref_sched_name=nil, @conduit_zip=nil, @committee_id=133, @suffix=nil, @donor_cmte_id=nil, @flag_orgind="ORG", @back_ref_tran_id=nil, @city="San Francisco", @amended_cd=nil, @donor_district=nil, @id=4571002, @exclude=nil, @donor_candidate=nil, @prigen=nil, @donor_cand_id=nil, @donor_office=nil, @occupation=nil, @tran_id="SA11AI.4427", @lng=nil, @prefix=nil, @memo_text=nil, @lat=nil, @employer=nil, @pac_name="Wendt Family Trust", @amount=100000.0, @increased_limit=nil, @transaction_description=nil, @donor_state=nil, @date="2011-12-31", @filing_id=764828, @system_code=nil, @first_name=nil, @address_one="1 Muir Loop", @transaction_type=nil, @conduit_city=nil, @linenumber="SA11AI", @full_name=nil, @address_two=nil, @conduit_address_two=nil>, ...]
197
+
198
+ IndividualContribution.candidate("P80003338") # Barack Obama
199
+ IndividualContribution.filing(762683) # Obama for America's 2011 year-end filing
200
+
201
+ If you're just interested in grabbing the contributions from a certain filing or date-range, but don't know that filing ID, get it via <tt>Committee#filings</tt>. Here's how to find the 2011 year-end filing ID for Restore Our Future, which you can then pass to IndividualContributions.
202
+
203
+ Committee.find("C00490045", 2012).filings.select do |q|
204
+ q.date_coverage_to == "2011-12-31".to_date && q.report_title == "YEAR-END"
205
+ end
206
+
207
+ == Electioneering Communications
208
+
209
+ Electioneering Communications are broadcast ads funded by third party groups that mention one or more candidates, but don't specifically support or oppose one. <tt>ElectioneeringCommunication</tt> objects are available newest first, or by committee ID or date (all in groups of 20). Within each object is an array of <tt>electioneering_communication_candidates</tt> mentioned in the ad.
210
+
211
+ ElectioneeringCommunication.latest
212
+ #=> [#<CampaignCash::ElectioneeringCommunication:0x10370a180 @payee_suffix=nil, @cycle=2012, @communication_date="2012-02-06", @committee_name="Crossroads Grassroots Policy Strategies", @purpose="TV/Media Production (Every Level)", @payee_address_2=nil, @electioneering_communication_candidates=[{"candidate_state"=>"HI", "electioneering_communication_id"=>847, "filing_id"=>764901, "transaction_id"=>"C.", "amended_from"=>nil, "back_reference_tran_id_number"=>"E.1", "candidate_name"=>"OBAMA, BARACK", "fec_candidate_id"=>"P80003338", "candidate_district"=>nil}], @back_reference_tran_id_number=nil, @unique_id="1116aadc5d5b7c793f0d0adfebb503709da1029f", @payee_middle_name=nil, @amended_from=nil, @back_reference_sched_name=nil, @payee_organization="Upgrade Films", @payee_state="DC", @transaction_id="E.1", @election_code="P2012", @payee_city="Washington", @payee_address_1="3299 K Street NW, Ste 200", @amount=65, @entity_type="ORG", @payee_first_name=nil, @filing_id=764901, @filed_date="2012-02-07", @payee_last_name=nil, @fec_committee_id="C30001655", @expenditure_date="2012-01-30", @payee_zip="20007">, ...]
213
+
214
+ ElectioneeringCommunication.committee("C30001655") # Crossroads GPS
215
+ ElectioneeringCommunication.date("02/06/2012") # EC's from February 6, 2012
216
+
217
+
191
218
  == Note on Patches/Pull Requests
192
219
 
193
220
  * Fork the project.
@@ -0,0 +1,34 @@
1
+ module CampaignCash
2
+ class ElectioneeringCommunication < Base
3
+ attr_reader :payee_zip, :committee_name, :entity_type, :filing_id, :payee_organization, :electioneering_communication_candidates, :amount, :fec_committee_id, :payee_city, :transaction_id, :amended_from, :communication_date, :payee_first_name, :payee_state, :back_reference_tran_id_number, :expenditure_date, :cycle, :payee_address_1, :back_reference_sched_name, :payee_address_2, :payee_last_name, :election_code, :payee_middle_name, :payee_suffix, :purpose, :unique_id, :filed_date
4
+
5
+ def initialize(params={})
6
+ params.each_pair do |k,v|
7
+ instance_variable_set("@#{k}", v)
8
+ end
9
+ end
10
+
11
+ def self.create(params={})
12
+ self.new(params)
13
+ end
14
+
15
+ def self.latest(offset = nil)
16
+ cycle = CURRENT_CYCLE
17
+ results = invoke("#{cycle}/electioneering_communications", {:offset => offset})['results']
18
+ results.map {|obj| ElectioneeringCommunication.create(obj["electioneering_communication"])}
19
+ end
20
+
21
+ def self.committee(committee_id, offset = nil)
22
+ cycle = CURRENT_CYCLE
23
+ results = invoke("#{cycle}/committees/#{committee_id}/electioneering_communications", {:offset => offset})['results']
24
+ results.map {|obj| ElectioneeringCommunication.create(obj["electioneering_communication"])}
25
+ end
26
+
27
+ def self.date(date, offset = nil)
28
+ cycle = CURRENT_CYCLE
29
+ d = Date.strptime(date, '%m/%d/%Y')
30
+ results = invoke("#{cycle}/electioneering_communications/#{d.year}/#{d.month}/#{d.day}", {:offset => offset})['results']
31
+ results.map {|obj| ElectioneeringCommunication.create(obj["electioneering_communication"])}
32
+ end
33
+ end
34
+ end
@@ -1,7 +1,7 @@
1
1
  module CampaignCash
2
2
  class FilingSummary < Base
3
3
 
4
- attr_reader :pac_contributions_period, :contributions_2300, :party_contributions_cycle, :fundraising_offsets_period, :primary_general, :pac_refunds_cycle, :created_at, :party_refunds_cycle, :fundraising_expenses_period, :net_party_contributions, :num_contributions_200_499, :individual_refunds_cycle, :candidate_contributions_period, :legal_offsets_cycle, :num_contributions_500_1499, :net_operating_expenses, :total_debts_owed, :refunds_200_499, :refunds_1500_2299, :transfers_out_period, :net_primary, :liquidate_period, :contributions_200_499, :operating_offsets_cycle, :num_contributions_1500_2299, :candidate_loan_repayments_period, :committee_uri, :federal_funds_cycle, :net_candidate_contributions, :candidate_loans_period, :filing_id, :net_pac_contributions, :num_refunds_200_499, :candidate_loan_repayments_cycle, :total_offsets_cycle, :party_contributions_period, :net_individual_contributions, :num_refunds_1500_2299, :net_general, :total_receipts_cycle, :federal_funds_period, :transfers_out_cycle, :cycle, :other_loan_repayments_period, :contributions_500_1499, :legal_offsets_period, :date_coverage_from, :contributions_less_than_200, :fec_form_type, :candidate_contributions_cycle, :cash_on_hand_beginning, :individual_refunds_period, :updated_at, :fundraising_expenses_cycle, :num_refunds_500_1499, :cash_on_hand_close, :num_contributions_less_than_200, :total_loans_cycle, :candidate_uri, :contributions_1500_2299, :refunds_2300, :flag_most_current_report, :total_loan_repayments_period, :other_loans_period, :operating_expenditures_cycle, :other_disbursements_period, :total_loans_period, :transfers_in_period, :transfers_in_cycle, :report, :legal_expenses_period, :candidate_loans_cycle, :individual_contributions_period, :other_disbursements_cycle, :total_disbursements_period, :other_loans_cycle, :net_transfers_in, :net_disbursements, :operating_expenditures_period, :fundraising_offsets_cycle, :date_coverage_to, :total_loan_repayments_cycle, :total_disbursements_cycle, :party_refunds_period, :individual_contributions_cycle, :net_total_contributions, :other_loan_repayments_cycle, :total_refunds_cycle, :total_receipts_period, :total_offsets_period, :total_contributions_period, :total_contributions_cycle, :refunds_500_1499, :pac_refunds_period, :flag_valid_report, :legal_expenses_cycle, :num_refunds_less_than_200, :refunds_less_than_200, :pac_contributions_cycle, :net_legal_expenses, :net_fundraising_expenses, :num_contributions_2300, :total_refunds_period, :operating_offsets_period, :num_refunds_2300
4
+ attr_reader :pac_contributions_period, :contributions_2500, :party_contributions_cycle, :fundraising_offsets_period, :primary_general, :pac_refunds_cycle, :party_refunds_cycle, :fundraising_expenses_period, :net_party_contributions, :num_contributions_200_499, :individual_refunds_cycle, :candidate_contributions_period, :legal_offsets_cycle, :num_contributions_500_1499, :net_operating_expenses, :total_debts_owed, :refunds_200_499, :refunds_1500_2499, :transfers_out_period, :net_primary, :liquidate_period, :contributions_200_499, :operating_offsets_cycle, :num_contributions_1500_2499, :candidate_loan_repayments_period, :committee_uri, :federal_funds_cycle, :net_candidate_contributions, :candidate_loans_period, :filing_id, :net_pac_contributions, :num_refunds_200_499, :candidate_loan_repayments_cycle, :total_offsets_cycle, :party_contributions_period, :net_individual_contributions, :num_refunds_1500_2499, :net_general, :total_receipts_cycle, :federal_funds_period, :transfers_out_cycle, :cycle, :other_loan_repayments_period, :contributions_500_1499, :legal_offsets_period, :date_coverage_from, :contributions_less_than_200, :fec_form_type, :candidate_contributions_cycle, :cash_on_hand_beginning, :individual_refunds_period, :fundraising_expenses_cycle, :num_refunds_500_1499, :cash_on_hand_close, :num_contributions_less_than_200, :total_loans_cycle, :candidate_uri, :contributions_1500_2499, :refunds_2500, :flag_most_current_report, :total_loan_repayments_period, :other_loans_period, :operating_expenditures_cycle, :other_disbursements_period, :total_loans_period, :transfers_in_period, :transfers_in_cycle, :report, :legal_expenses_period, :candidate_loans_cycle, :individual_contributions_period, :other_disbursements_cycle, :total_disbursements_period, :other_loans_cycle, :net_transfers_in, :net_disbursements, :operating_expenditures_period, :fundraising_offsets_cycle, :date_coverage_to, :total_loan_repayments_cycle, :total_disbursements_cycle, :party_refunds_period, :individual_contributions_cycle, :net_total_contributions, :other_loan_repayments_cycle, :total_refunds_cycle, :total_receipts_period, :total_offsets_period, :total_contributions_period, :total_contributions_cycle, :refunds_500_1499, :pac_refunds_period, :flag_valid_report, :legal_expenses_cycle, :num_refunds_less_than_200, :refunds_less_than_200, :pac_contributions_cycle, :net_legal_expenses, :net_fundraising_expenses, :num_contributions_2500, :total_refunds_period, :operating_offsets_period, :num_refunds_2500
5
5
 
6
6
  def initialize(params={})
7
7
  params.each_pair do |k,v|
@@ -1,7 +1,7 @@
1
1
  module CampaignCash
2
2
  class IndependentExpenditure < Base
3
3
 
4
- attr_reader :committee, :district, :state, :committee_name, :purpose, :candidate, :candidate_name, :support_or_oppose, :date, :amount, :office, :amendment, :date_received, :payee, :fec_uri, :transaction_id
4
+ attr_reader :committee, :district, :state, :committee_name, :purpose, :candidate, :candidate_name, :support_or_oppose, :date, :amount, :office, :amendment, :date_received, :payee, :fec_uri, :transaction_id, :unique_id
5
5
 
6
6
  def initialize(params={})
7
7
  params.each_pair do |k,v|
@@ -26,8 +26,12 @@ module CampaignCash
26
26
  :amendment => params['amendment'],
27
27
  :transaction_id => params['transaction_id'],
28
28
  :candidate_name => params['candidate_name'],
29
- # hash is a SHA1 of committee_id, date and transaction_id
30
- :hash => params['hash']
29
+ :filing_id => params['filing_id'],
30
+ :amended_from => params['amended_from'], # <= original filing ID will be nil if amendment is false
31
+ # unique_id is a SHA1 of filing_id and transaction_id
32
+ # If the expenditure is amended, the unique_id will be amended_from + transaction_id
33
+ # so it can be used as an overrideable unique key
34
+ :unique_id => params['unique_id']
31
35
  end
32
36
 
33
37
  def self.latest(offset=nil)
@@ -1,3 +1,3 @@
1
1
  module CampaignCash
2
- VERSION = "2.1.0"
2
+ VERSION = "2.2.0"
3
3
  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).each do |f|
1
+ %w(base candidate committee contribution individual_contribution filing filing_summary form independent_expenditure president electioneering_communication).each do |f|
2
2
  require File.join(File.dirname(__FILE__), '../lib/campaign_cash', f)
3
3
  end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ class TestCampaignCash::TestElectioneeringCommunication < Test::Unit::TestCase
4
+ include CampaignCash
5
+
6
+ context "get electioneering communications" do
7
+ objs_collection = []
8
+ objs_collection << ElectioneeringCommunication.latest
9
+ objs_collection << ElectioneeringCommunication.committee("C30001655")
10
+ objs_collection << ElectioneeringCommunication.date("02/06/2012")
11
+
12
+ objs_collection.each do |objs|
13
+ should "return a list of objects of the ElectioneeringCommunication type or an empty list" do
14
+ if objs.size > 0
15
+ assert_kind_of(ElectioneeringCommunication, objs.first)
16
+ else
17
+ assert_equal([], objs)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ 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).each do |f|
7
+ %w(base candidate committee contribution individual_contribution filing filing_summary form independent_expenditure president electioneering_communication).each do |f|
8
8
  require File.join(File.dirname(__FILE__), '../lib/campaign_cash', f)
9
9
  end
10
10
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: campaign_cash
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 2.1.0
10
+ version: 2.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Derek Willis
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-08 00:00:00 -05:00
18
+ date: 2012-02-15 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -100,6 +100,7 @@ files:
100
100
  - lib/campaign_cash/candidate.rb
101
101
  - lib/campaign_cash/committee.rb
102
102
  - lib/campaign_cash/contribution.rb
103
+ - lib/campaign_cash/electioneering_communication.rb
103
104
  - lib/campaign_cash/filing.rb
104
105
  - lib/campaign_cash/filing_summary.rb
105
106
  - lib/campaign_cash/form.rb
@@ -109,6 +110,7 @@ files:
109
110
  - lib/campaign_cash/version.rb
110
111
  - test/campaign_cash/test_candidate.rb
111
112
  - test/campaign_cash/test_committee.rb
113
+ - test/campaign_cash/test_electioneering_communication.rb
112
114
  - test/campaign_cash/test_filing.rb
113
115
  - test/campaign_cash/test_filing_summary.rb
114
116
  - test/campaign_cash/test_form.rb
@@ -155,6 +157,7 @@ summary: Following the money.
155
157
  test_files:
156
158
  - test/campaign_cash/test_candidate.rb
157
159
  - test/campaign_cash/test_committee.rb
160
+ - test/campaign_cash/test_electioneering_communication.rb
158
161
  - test/campaign_cash/test_filing.rb
159
162
  - test/campaign_cash/test_filing_summary.rb
160
163
  - test/campaign_cash/test_form.rb