fech 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/.gitignore +7 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +49 -0
  5. data/LICENSE +13 -0
  6. data/README.rdoc +178 -0
  7. data/Rakefile +3 -0
  8. data/autotest/discover.rb +1 -0
  9. data/fech.gemspec +32 -0
  10. data/lib/fech.rb +13 -0
  11. data/lib/fech/default_translations.rb +135 -0
  12. data/lib/fech/fech_utils.rb +41 -0
  13. data/lib/fech/filing.rb +248 -0
  14. data/lib/fech/map_generator.rb +187 -0
  15. data/lib/fech/mapped.rb +38 -0
  16. data/lib/fech/mappings.rb +66 -0
  17. data/lib/fech/translator.rb +138 -0
  18. data/lib/fech/version.rb +3 -0
  19. data/sources/F3P.csv +1 -0
  20. data/sources/F3P31.csv +1 -0
  21. data/sources/F3PS.csv +1 -0
  22. data/sources/F3S.csv +1 -0
  23. data/sources/HDR.csv +1 -0
  24. data/sources/SchA.csv +1 -0
  25. data/sources/SchB.csv +1 -0
  26. data/sources/SchC.csv +1 -0
  27. data/sources/SchC1.csv +1 -0
  28. data/sources/SchC2.csv +1 -0
  29. data/sources/SchD.csv +1 -0
  30. data/sources/SchE.csv +1 -0
  31. data/sources/SchF.csv +1 -0
  32. data/sources/TEXT.csv +1 -0
  33. data/sources/headers/3.csv +1 -0
  34. data/sources/headers/5.0.csv +1 -0
  35. data/sources/headers/5.1.csv +1 -0
  36. data/sources/headers/5.2.csv +1 -0
  37. data/sources/headers/5.3.csv +1 -0
  38. data/sources/headers/6.1.csv +1 -0
  39. data/sources/headers/6.2.csv +1 -0
  40. data/sources/headers/6.3.csv +1 -0
  41. data/sources/headers/6.4.csv +1 -0
  42. data/sources/headers/7.0.csv +1 -0
  43. data/sources/headers/ignore.csv +5 -0
  44. data/spec/data/723604.fec +4 -0
  45. data/spec/data/97405.fec +10 -0
  46. data/spec/default_translations_spec.rb +104 -0
  47. data/spec/fech_utils_spec.rb +29 -0
  48. data/spec/filing_spec.rb +251 -0
  49. data/spec/map_generator_spec.rb +49 -0
  50. data/spec/mapped_spec.rb +44 -0
  51. data/spec/mappings_spec.rb +46 -0
  52. data/spec/sources/F3P.csv +1 -0
  53. data/spec/sources/SchA.csv +1 -0
  54. data/spec/sources/SchB.csv +1 -0
  55. data/spec/sources/SchC.csv +1 -0
  56. data/spec/sources/headers/3.csv +1 -0
  57. data/spec/sources/headers/5.0.csv +1 -0
  58. data/spec/sources/headers/5.1.csv +1 -0
  59. data/spec/sources/headers/5.2.csv +1 -0
  60. data/spec/sources/headers/5.3.csv +1 -0
  61. data/spec/sources/headers/6.1.csv +1 -0
  62. data/spec/sources/headers/6.2.csv +1 -0
  63. data/spec/sources/headers/6.3.csv +1 -0
  64. data/spec/sources/headers/6.4.csv +1 -0
  65. data/spec/sources/headers/7.0.csv +1 -0
  66. data/spec/sources/headers/ignore.csv +5 -0
  67. data/spec/sources/sa.csv +1 -0
  68. data/spec/spec_helper.rb +9 -0
  69. data/spec/translator_spec.rb +195 -0
  70. data/tasks/fech.rake +41 -0
  71. metadata +280 -0
@@ -0,0 +1 @@
1
+ F1,FORM TYPE,FILER COMMITTEE ID NUMBER,CHANGE OF COMMITTEE NAME,COMMITTEE NAME,CHANGE OF ADDRESS,STREET 1,STREET 2,CITY,STATE,ZIP,COMMITTEE EMAIL,COMMITTEE WEB URL,COMMITTEE FAX NUMBER,SUBMISSION DATE,SIGNATURE LAST NAME,SIGNATURE FIRST NAME,SIGNATURE MIDDLE NAME,SIGNATURE PREFIX,SIGNATURE SUFFIX,DATE SIGNED,5. COMMITTEE TYPE,5. CANDIDATE ID NUMBER,5. CANDIDATE LAST NAME,5. CANDIDATE FIRST NAME,5. CANDIDATE MIDDLE NAME,5. CANDIDATE PREFIX,5. CANDIDATE SUFFIX,5. CANDIDATE OFFICE ,5. CANDIDATE STATE,5. CANDIDATE DISTRICT,5. PARTY CODE,5. PARTY TYPE,7. CUSTODIAN LAST NAME,7. CUSTODIAN FIRST NAME,7. CUSTODIAN MIDDLE NAME,7. CUSTODIAN PREFIX,7. CUSTODIAN SUFFIX,7. CUSTODIAN STREET 1,7. CUSTODIAN STREET 2,7. CUSTODIAN CITY,7. CUSTODIAN STATE,7. CUSTODIAN ZIP,7. CUSTODIAN TITLE,7. CUSTODIAN TELEPHONE,8. TREASURER LAST NAME,8. TREASURER FIRST NAME,8. TREASURER MIDDLE NAME,8. TREASURER PREFIX,8. TREASURER SUFFIX,8. TREASURER STREET 1,8. TREASURER STREET 2,8. TREASURER CITY,8. TREASURER STATE,8. TREASURER ZIP,8. TREASURER TITLE,8. TREASURER TELEPHONE,6. AFFILIATED CMTTE ID NUM,6. AFFILIATED CMTTE NAME,6. AFFILIATED STREET 1,6. AFFILIATED STREET 2,6. AFFILIATED CITY,6. AFFILIATED STATE,6. AFFILIATED ZIP,"6. RELATIONSHIP (with Filing
2
  Committe named in field #4)",6. ORGANIZATION TYPE,8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. a) BANK NAME,9. a) BANK STREET 1,9. a) BANK STREET 2,9. a) BANK CITY,9. a) BANK STATE,9. a) BANK ZIP,9. b) BANK NAME,9. b) BANK STREET 1,9. b) BANK STREET 2,9. b) BANK CITY,9. b) BANK STATE,9. b) BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@@ -0,0 +1 @@
1
+ F1,FORM TYPE,FILER COMMITTEE ID NUMBER,CHANGE OF COMMITTEE NAME,COMMITTEE NAME,CHANGE OF ADDRESS,STREET 1,STREET 2,CITY,STATE,ZIP,COMMITTEE EMAIL,COMMITTEE WEB URL,COMMITTEE FAX NUMBER,SUBMISSION DATE,SIGNATURE LAST NAME,SIGNATURE FIRST NAME,SIGNATURE MIDDLE NAME,SIGNATURE PREFIX,SIGNATURE SUFFIX,DATE SIGNED,5. COMMITTEE TYPE,5. CANDIDATE ID NUMBER,5. CANDIDATE LAST NAME,5. CANDIDATE FIRST NAME,5. CANDIDATE MIDDLE NAME,5. CANDIDATE PREFIX,5. CANDIDATE SUFFIX,5. CANDIDATE OFFICE ,5. CANDIDATE STATE,5. CANDIDATE DISTRICT,5. PARTY CODE,5. PARTY TYPE,5 (e). ORGANIZATION TYPE,5 (f). LEADERSHIP PAC,6. AFFILIATED CMTTE ID NUM,6. AFFILIATED CMTTE NAME,6. AFFILIATED STREET 1,6. AFFILIATED STREET 2,6. AFFILIATED CITY,6. AFFILIATED STATE,6. AFFILIATED ZIP,6. AFFILIATED RELATIONSHIP CODE (with Filing Committe named in field #4),7. CUSTODIAN LAST NAME,7. CUSTODIAN FIRST NAME,7. CUSTODIAN MIDDLE NAME,7. CUSTODIAN PREFIX,7. CUSTODIAN SUFFIX,7. CUSTODIAN STREET 1,7. CUSTODIAN STREET 2,7. CUSTODIAN CITY,7. CUSTODIAN STATE,7. CUSTODIAN ZIP,7. CUSTODIAN TITLE,7. CUSTODIAN TELEPHONE,8. TREASURER LAST NAME,8. TREASURER FIRST NAME,8. TREASURER MIDDLE NAME,8. TREASURER PREFIX,8. TREASURER SUFFIX,8. TREASURER STREET 1,8. TREASURER STREET 2,8. TREASURER CITY,8. TREASURER STATE,6. RELATIONSHIP (with Filing Committe named in field #4),8. TREASURER ZIP,6. ORGANIZATION TYPE,8. TREASURER TITLE,8. TREASURER TELEPHONE,8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. a) BANK NAME,9. a) BANK STREET 1,9. a) BANK STREET 2,9. a) BANK CITY,9. a) BANK STATE,9. a) BANK ZIP,9. b) BANK NAME,9. b) BANK STREET 1,9. b) BANK STREET 2,9. b) BANK CITY,9. b) BANK STATE,9. b) BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@@ -0,0 +1 @@
1
+ F1,FORM TYPE,FILER COMMITTEE ID NUMBER,CHANGE OF COMMITTEE NAME,COMMITTEE NAME,CHANGE OF ADDRESS,STREET 1,STREET 2,CITY,STATE,ZIP,CHANGE OF COMMITTEE EMAIL,COMMITTEE EMAIL,CHANGE OF COMMITTEE WEB URL,COMMITTEE FAX NUMBER,COMMITTEE WEB URL,SUBMISSION DATE,SIGNATURE LAST NAME,SIGNATURE FIRST NAME,SIGNATURE MIDDLE NAME,SIGNATURE PREFIX,SIGNATURE SUFFIX,DATE SIGNED,5. COMMITTEE TYPE,5. CANDIDATE ID NUMBER,5. CANDIDATE LAST NAME,5. CANDIDATE FIRST NAME,5. CANDIDATE MIDDLE NAME,5. CANDIDATE PREFIX,5. CANDIDATE SUFFIX,5. CANDIDATE OFFICE ,5. CANDIDATE STATE,5. CANDIDATE DISTRICT,5. PARTY CODE,5. PARTY TYPE,5 (e). ORGANIZATION TYPE,5 (e). LOBBYIST/REGISTRANT PAC ,5 (f). LOBBYIST/REGISTRANT PAC ,5 (f). LEADERSHIP PAC,6. AFFILIATED CMTTE ID NUM,6. AFFILIATED CMTTE NAME,6. AFFILIATED CANDIDATE ID NUM,6. AFFILIATED LAST NAME,6. AFFILIATED FIRST NAME,6. AFFILIATED MIDDLE NAME,6. AFFILIATED PREFIX,6. AFFILIATED SUFFIX,6. AFFILIATED STREET 1,6. AFFILIATED STREET 2,6. AFFILIATED CITY,6. AFFILIATED STATE,6. AFFILIATED ZIP,"6. AFFILIATED RELATIONSHIP CODE
2
  (with Filing Committe named in field #4)",7. CUSTODIAN LAST NAME,7. CUSTODIAN FIRST NAME,7. CUSTODIAN MIDDLE NAME,7. CUSTODIAN PREFIX,7. CUSTODIAN SUFFIX,7. CUSTODIAN STREET 1,7. CUSTODIAN STREET 2,7. CUSTODIAN CITY,7. CUSTODIAN STATE,7. CUSTODIAN ZIP,7. CUSTODIAN TITLE,7. CUSTODIAN TELEPHONE,8. TREASURER LAST NAME,8. TREASURER FIRST NAME,8. TREASURER MIDDLE NAME,8. TREASURER PREFIX,8. TREASURER SUFFIX,8. TREASURER STREET 1,8. TREASURER STREET 2,8. TREASURER CITY,8. TREASURER STATE,8. TREASURER ZIP,8. TREASURER TITLE,8. TREASURER TELEPHONE,8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. a) BANK NAME,9. a) BANK STREET 1,9. a) BANK STREET 2,9. a) BANK CITY,9. a) BANK STATE,9. a) BANK ZIP,9. b) BANK NAME,9. b) BANK STREET 1,9. b) BANK STREET 2,9. b) BANK CITY,9. b) BANK STATE,9. b) BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1
3
  (with Filing Committe named in field #4)",8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. BANK NAME,9. BANK STREET 1,9. BANK STREET 2,9. BANK CITY,9. BANK STATE,9. BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@@ -0,0 +1 @@
1
+ F1,FORM TYPE,FILER COMMITTEE ID NUMBER,CHANGE OF COMMITTEE NAME,COMMITTEE NAME,CHANGE OF ADDRESS,STREET 1,STREET 2,CITY,STATE,ZIP,CHANGE OF COMMITTEE EMAIL,COMMITTEE EMAIL,CHANGE OF COMMITTEE WEB URL,COMMITTEE FAX NUMBER,COMMITTEE WEB URL,SUBMISSION DATE,SIGNATURE LAST NAME,SIGNATURE FIRST NAME,SIGNATURE MIDDLE NAME,SIGNATURE PREFIX,SIGNATURE SUFFIX,DATE SIGNED,5. COMMITTEE TYPE,5. CANDIDATE ID NUMBER,5. CANDIDATE LAST NAME,5. CANDIDATE FIRST NAME,5. CANDIDATE MIDDLE NAME,5. CANDIDATE PREFIX,5. CANDIDATE SUFFIX,5. CANDIDATE OFFICE ,5. CANDIDATE STATE,5. CANDIDATE DISTRICT,5. PARTY CODE,5. PARTY TYPE,5 (e). ORGANIZATION TYPE,5 (e). LOBBYIST/REGISTRANT PAC ,5 (f). LOBBYIST/REGISTRANT PAC ,5 (f). LEADERSHIP PAC,6. AFFILIATED CMTTE ID NUM,6. AFFILIATED CMTTE NAME,6. AFFILIATED CANDIDATE ID NUM,6. AFFILIATED LAST NAME,6. AFFILIATED FIRST NAME,6. AFFILIATED MIDDLE NAME,6. AFFILIATED PREFIX,6. AFFILIATED SUFFIX,6. AFFILIATED STREET 1,6. AFFILIATED STREET 2,6. AFFILIATED CITY,6. AFFILIATED STATE,6. AFFILIATED ZIP,"6. AFFILIATED RELATIONSHIP CODE
2
  (with Filing Committe named in field #4)",7. CUSTODIAN LAST NAME,7. CUSTODIAN FIRST NAME,7. CUSTODIAN MIDDLE NAME,7. CUSTODIAN PREFIX,7. CUSTODIAN SUFFIX,7. CUSTODIAN STREET 1,7. CUSTODIAN STREET 2,7. CUSTODIAN CITY,7. CUSTODIAN STATE,7. CUSTODIAN ZIP,7. CUSTODIAN TITLE,7. CUSTODIAN TELEPHONE,8. TREASURER LAST NAME,8. TREASURER FIRST NAME,8. TREASURER MIDDLE NAME,8. TREASURER PREFIX,8. TREASURER SUFFIX,8. TREASURER STREET 1,8. TREASURER STREET 2,8. TREASURER CITY,8. TREASURER STATE,8. TREASURER ZIP,8. TREASURER TITLE,8. TREASURER TELEPHONE,8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. a) BANK NAME,9. a) BANK STREET 1,9. a) BANK STREET 2,9. a) BANK CITY,9. a) BANK STATE,9. a) BANK ZIP,9. b) BANK NAME,9. b) BANK STREET 1,9. b) BANK STREET 2,9. b) BANK CITY,9. b) BANK STATE,9. b) BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1
3
  (with Filing Committe named in field #4)",8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. BANK NAME,9. BANK STREET 1,9. BANK STREET 2,9. BANK CITY,9. BANK STATE,9. BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@@ -0,0 +1 @@
1
+ F1,FORM TYPE,FILER COMMITTEE ID NUMBER,CHANGE OF COMMITTEE NAME,COMMITTEE NAME,CHANGE OF ADDRESS,STREET 1,STREET 2,CITY,STATE,ZIP,CHANGE OF COMMITTEE EMAIL,COMMITTEE EMAIL,CHANGE OF COMMITTEE WEB URL,COMMITTEE WEB URL,EFFECTIVE DATE,SIGNATURE LAST NAME,SIGNATURE FIRST NAME,SIGNATURE MIDDLE NAME,SIGNATURE PREFIX,SIGNATURE SUFFIX,DATE SIGNED,5. COMMITTEE TYPE,5. CANDIDATE ID NUMBER,5. CANDIDATE LAST NAME,5. CANDIDATE FIRST NAME,5. CANDIDATE MIDDLE NAME,5. CANDIDATE PREFIX,5. CANDIDATE SUFFIX,5. CANDIDATE OFFICE ,5. CANDIDATE STATE,5. CANDIDATE DISTRICT,5. PARTY CODE,5. PARTY TYPE,5 (e). ORGANIZATION TYPE,5 (e). LOBBYIST/REGISTRANT PAC ,5 (f). LOBBYIST/REGISTRANT PAC ,5 (f). LEADERSHIP PAC,6. AFFILIATED CMTTE ID NUM,6. AFFILIATED CMTTE NAME,6. AFFILIATED CANDIDATE ID NUM,6. AFFILIATED LAST NAME,6. AFFILIATED FIRST NAME,6. AFFILIATED MIDDLE NAME,6. AFFILIATED PREFIX,6. AFFILIATED SUFFIX,6. AFFILIATED STREET 1,6. AFFILIATED STREET 2,6. AFFILIATED CITY,6. AFFILIATED STATE,6. AFFILIATED ZIP,"6. AFFILIATED RELATIONSHIP CODE
2
  (with Filing Committee named in field #4)",7. CUSTODIAN LAST NAME,7. CUSTODIAN FIRST NAME,7. CUSTODIAN MIDDLE NAME,7. CUSTODIAN PREFIX,7. CUSTODIAN SUFFIX,7. CUSTODIAN STREET 1,7. CUSTODIAN STREET 2,7. CUSTODIAN CITY,7. CUSTODIAN STATE,7. CUSTODIAN ZIP,7. CUSTODIAN TITLE,7. CUSTODIAN TELEPHONE,8. TREASURER LAST NAME,8. TREASURER FIRST NAME,8. TREASURER MIDDLE NAME,8. TREASURER PREFIX,8. TREASURER SUFFIX,8. TREASURER STREET 1,8. TREASURER STREET 2,8. TREASURER CITY,8. TREASURER STATE,8. TREASURER ZIP,8. TREASURER TITLE,8. TREASURER TELEPHONE,8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. a) BANK NAME,9. a) BANK STREET 1,9. a) BANK STREET 2,9. a) BANK CITY,9. a) BANK STATE,9. a) BANK ZIP,9. b) BANK NAME,9. b) BANK STREET 1,9. b) BANK STREET 2,9. b) BANK CITY,9. b) BANK STATE,9. b) BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1
3
  (with Filing Committee named in field #4)",8. AGENT LAST NAME,8. AGENT FIRST NAME,8. AGENT MIDDLE NAME,8. AGENT PREFIX,8. AGENT SUFFIX,8. AGENT STREET 1,8. AGENT STREET 2,8. AGENT CITY,8. AGENT STATE,8. AGENT ZIP,8. AGENT TITLE,8. AGENT TELEPHONE,9. BANK NAME,9. BANK STREET 1,9. BANK STREET 2,9. BANK CITY,9. BANK STATE,9. BANK ZIP,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
@@ -0,0 +1,5 @@
1
+ COLUMN A REPORT TOTALS
2
+ COLUMN B YEAR-TO-DATE TOTALS
3
+ COLUMN B YTD TOTALS - LEVIN ACTIVITY
4
+ (New line 30 fields added to end of this layout)
5
+ (New line 18(b) & 18(c) fields at end of layout)
@@ -0,0 +1 @@
1
+ canonical,^7,,^6,,^[2-5],,
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'rspec'
5
+ require 'fech'
6
+
7
+ RSpec.configure do |config|
8
+ config.mock_framework = :mocha
9
+ end
@@ -0,0 +1,195 @@
1
+ require 'spec_helper'
2
+
3
+ describe Fech::Translator do
4
+
5
+ describe "#add_translation" do
6
+
7
+ before do
8
+ @translator = Fech::Translator.new
9
+ end
10
+
11
+ it "should ignore case when specified options are regular expressions" do
12
+ @translator.convert(:row => /^foo/, :field => 'bar') {}
13
+ @translator.get_translations(:row => "FoO", :field => 'bar', :action => :convert).size.should == 1
14
+ end
15
+
16
+ end
17
+
18
+ describe ".convert" do
19
+
20
+ before do
21
+ @translator = Fech::Translator.new
22
+ end
23
+
24
+ it "should add a new translation to instance's list" do
25
+ lambda {
26
+ @translator.convert(:row => 'foo', :field => 'bar') {}
27
+ }.should change{@translator.translations.count}.by(1)
28
+ end
29
+
30
+ it "should save a given block as part of the translation" do
31
+ lambda {
32
+ @translator.convert(:row => 'foo', :field => 'bar') {|v| Date.parse(v)}
33
+ }.should_not raise_error
34
+ @translator.translations.first[:proc].should_not be_nil
35
+ end
36
+
37
+ it "should raise error if no block is given" do
38
+ lambda {
39
+ @translator.convert(:row => 'foo', :field => 'bar')
40
+ }.should raise_error
41
+ end
42
+
43
+ it "should not fail if not passed any limiting parameters" do
44
+ lambda {
45
+ @translator.convert {}
46
+ }.should_not raise_error
47
+ end
48
+
49
+ it "should set defaults for unspecified parameters" do
50
+ @translator.convert {}
51
+ t = @translator.translations.last
52
+ t[:row].should == /.*/i
53
+ t[:field].should == /.*/i
54
+ t[:version].should == /.*/i
55
+ end
56
+
57
+ it "should return the translation hash" do
58
+ ret = @translator.convert {}
59
+ ret.class.should == Hash
60
+ ret.keys.should =~ [:row, :field, :version, :proc, :action]
61
+ end
62
+
63
+ end
64
+
65
+ describe ".combine" do
66
+
67
+ before do
68
+ @filing = Fech::Filing.new(723604)
69
+ @filing.stubs(:file_path).returns(File.join(File.dirname(__FILE__), 'data', '723604.fec'))
70
+ end
71
+
72
+ it "should correctly compute derived fields" do
73
+ @filing.translator.combine(:row => /F3PN/, :field => :combined) do |row|
74
+ Date.parse(row[:coverage_through_date]) - Date.parse(row[:coverage_from_date])
75
+ end
76
+ original = Date.parse(@filing.summary.coverage_through_date) - Date.parse(@filing.summary.coverage_from_date)
77
+ @filing.summary.combined.should == original
78
+ end
79
+
80
+ it "should allow indexing by original field name" do
81
+ @filing.translator.combine(:row => /F3PN/, :field => :combined) do |row|
82
+ Date.parse(row[:coverage_through_date]) - Date.parse(row[:coverage_from_date])
83
+ end
84
+ lambda {
85
+ @filing.summary.coverage_through_date
86
+ }.should_not raise_error
87
+ end
88
+
89
+ it "should allow indexing by aliased field names" do
90
+ @filing.translate do |t|
91
+ t.alias :alias_a, :coverage_from_date, /F3PN/
92
+ t.alias :alias_b, :coverage_through_date, /F3PN/
93
+ t.combine(:row => /F3PN/, :field => :combined) do |row|
94
+ Date.parse(row[:alias_b]) - Date.parse(row[:alias_a])
95
+ end
96
+ end
97
+ lambda {
98
+ @filing.summary
99
+ }.should_not raise_error
100
+ end
101
+
102
+ end
103
+
104
+ describe ".alias" do
105
+
106
+ before do
107
+ @translator = Fech::Translator.new
108
+ end
109
+
110
+ it "should add the given alias to @aliases" do
111
+ @translator.alias(:new_name, :old_name, /hdr/)
112
+ @translator.aliases.should =~ [{:row => /hdr/i, :alias => :new_name, :for => :old_name}]
113
+ end
114
+
115
+ it "should not require :row" do
116
+ lambda {
117
+ @translator.alias(:new_name, :old_name)
118
+ }.should_not raise_error
119
+ @translator.aliases.should =~ [{:row => /.*/i, :alias => :new_name, :for => :old_name}]
120
+ end
121
+
122
+ end
123
+
124
+ describe ".applicable_translation?" do
125
+
126
+ before do
127
+ @row_type = "SA18"
128
+ @field = "date_coverage_from"
129
+ @translation = Fech::Translator.new.convert(:row => "SA", :field => @field, :version => "7.0") {|v| Date.parse(v)}
130
+ end
131
+
132
+ it "should return true if row and field are matches for the translation's regexes" do
133
+ Fech::Translator.applicable_translation?(@translation, :row => @row_type, :field => @field).should == true
134
+ end
135
+
136
+ it "should return false if row, field, or version does not match" do
137
+ Fech::Translator.applicable_translation?(@translation, :row => @row_type, :field => @field, :version => "6.0").should == false
138
+ end
139
+
140
+ it "should accept non-string values" do
141
+ lambda {
142
+ Fech::Translator.applicable_translation?(@translation, :row => Regexp.new(@row_type), :field => @field.to_s)
143
+ }.should_not raise_error
144
+ end
145
+
146
+ it "should accept match parameters as a single opts hash" do
147
+ lambda {
148
+ Fech::Translator.applicable_translation?(@translation, {:row => Regexp.new(@row_type), :field => @field.to_s})
149
+ }.should_not raise_error
150
+ Fech::Translator.applicable_translation?(@translation, {:row => Regexp.new(@row_type), :field => @field.to_s}).should == true
151
+ end
152
+
153
+ end
154
+
155
+ describe ".get_translations" do
156
+
157
+ before do
158
+ @translator = Fech::Translator.new
159
+ @translator.convert(:row => "sa", :field => :date_coverage_from) {|v| Date.parse(v)}
160
+ @translator.convert(:row => "sa", :field => :date_coverage_to) {|v| Date.parse(v)}
161
+ @translator.convert(:row => "sb", :field => /date.*/) {|v| Date.parse(v)}
162
+ end
163
+
164
+ it "should return only translations that match the parameters" do
165
+ @translator.get_translations(:row => "sa").size.should == 2
166
+ @translator.get_translations(:row => "sb").size.should == 1
167
+ end
168
+
169
+ it "should memoize output" do
170
+ Fech::Translator.expects(:applicable_translation?).times(3).returns(true)
171
+ @translator.get_translations(:row => "sa")
172
+ @translator.get_translations(:row => "sa")
173
+ end
174
+
175
+ it "should only memoize based on unique key" do
176
+ Fech::Translator.expects(:applicable_translation?).times(6).returns(true)
177
+ @translator.get_translations(:row => "sa")
178
+ @translator.get_translations(:row => "sb")
179
+ end
180
+
181
+ end
182
+
183
+ describe "#add_default_translations" do
184
+
185
+ before do
186
+ @translator = Fech::Translator.new(:include => [:names])
187
+ end
188
+
189
+ it "should add all specified translations by default" do
190
+ @translator.translations.size.should > 0
191
+ end
192
+
193
+ end
194
+
195
+ end
@@ -0,0 +1,41 @@
1
+ require 'fech'
2
+ require 'rspec'
3
+ require 'rspec/core/rake_task'
4
+
5
+ namespace :fech do
6
+
7
+ desc "Recreate the column header maps from source .csv files"
8
+ task :maps do
9
+ # This will spit out a rendered mappings file, but will not be loaded by
10
+ # the gem by default. To use the new file, move it into the lib/fech
11
+ # folder of your active Fech gem.
12
+ source = 'sources/'
13
+ destination = ENV['destination'] || Dir.pwd
14
+
15
+ if File.directory?(destination)
16
+ destination = File.join(destination, 'rendered_maps.rb')
17
+ end
18
+
19
+ Fech::MapGenerator.convert_header_file_to_row_files(source)
20
+ Fech::MapGenerator.dump_row_maps_to_ruby(source, destination)
21
+
22
+ puts "Successfully wrote out mappings to #{destination}"
23
+ end
24
+
25
+ namespace :test do
26
+
27
+ desc "Run all specs."
28
+ RSpec::Core::RakeTask.new(:spec) do |t|
29
+ t.pattern = 'spec/*_spec.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+ RSpec::Core::RakeTask.new(:coverage) do |t|
34
+ t.rcov = true
35
+ t.rcov_opts = %w{--exclude gems\/,spec\/,features\/,seeds\/ --sort coverage}
36
+ t.verbose = true
37
+ end
38
+
39
+ end
40
+
41
+ end
metadata ADDED
@@ -0,0 +1,280 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fech
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Michael Strickland
14
+ - Evan Carmi
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-08-29 00:00:00 -04:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: fastercsv
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: people
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 21
45
+ segments:
46
+ - 0
47
+ - 2
48
+ - 1
49
+ version: 0.2.1
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: rspec
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 15
61
+ segments:
62
+ - 2
63
+ - 6
64
+ version: "2.6"
65
+ type: :development
66
+ version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: mocha
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ type: :development
80
+ version_requirements: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ name: autotest
83
+ prerelease: false
84
+ requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ hash: 3
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ type: :development
94
+ version_requirements: *id005
95
+ - !ruby/object:Gem::Dependency
96
+ name: ruby-debug
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
106
+ version: "0"
107
+ type: :development
108
+ version_requirements: *id006
109
+ - !ruby/object:Gem::Dependency
110
+ name: bundler
111
+ prerelease: false
112
+ requirement: &id007 !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ hash: 3
118
+ segments:
119
+ - 0
120
+ version: "0"
121
+ type: :development
122
+ version_requirements: *id007
123
+ - !ruby/object:Gem::Dependency
124
+ name: rcov
125
+ prerelease: false
126
+ requirement: &id008 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ type: :development
136
+ version_requirements: *id008
137
+ - !ruby/object:Gem::Dependency
138
+ name: rdoc
139
+ prerelease: false
140
+ requirement: &id009 !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ hash: 3
146
+ segments:
147
+ - 0
148
+ version: "0"
149
+ type: :development
150
+ version_requirements: *id009
151
+ - !ruby/object:Gem::Dependency
152
+ name: yard
153
+ prerelease: false
154
+ requirement: &id010 !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ hash: 3
160
+ segments:
161
+ - 0
162
+ version: "0"
163
+ type: :development
164
+ version_requirements: *id010
165
+ description: A Ruby library for interacting with electronic filings from the Federal Election Commission.
166
+ email:
167
+ - michael.c.strickland@gmail.com
168
+ executables: []
169
+
170
+ extensions: []
171
+
172
+ extra_rdoc_files: []
173
+
174
+ files:
175
+ - .gitignore
176
+ - .rspec
177
+ - Gemfile
178
+ - Gemfile.lock
179
+ - LICENSE
180
+ - README.rdoc
181
+ - Rakefile
182
+ - autotest/discover.rb
183
+ - fech.gemspec
184
+ - lib/fech.rb
185
+ - lib/fech/default_translations.rb
186
+ - lib/fech/fech_utils.rb
187
+ - lib/fech/filing.rb
188
+ - lib/fech/map_generator.rb
189
+ - lib/fech/mapped.rb
190
+ - lib/fech/mappings.rb
191
+ - lib/fech/translator.rb
192
+ - lib/fech/version.rb
193
+ - sources/F3P.csv
194
+ - sources/F3P31.csv
195
+ - sources/F3PS.csv
196
+ - sources/F3S.csv
197
+ - sources/HDR.csv
198
+ - sources/SchA.csv
199
+ - sources/SchB.csv
200
+ - sources/SchC.csv
201
+ - sources/SchC1.csv
202
+ - sources/SchC2.csv
203
+ - sources/SchD.csv
204
+ - sources/SchE.csv
205
+ - sources/SchF.csv
206
+ - sources/TEXT.csv
207
+ - sources/headers/3.csv
208
+ - sources/headers/5.0.csv
209
+ - sources/headers/5.1.csv
210
+ - sources/headers/5.2.csv
211
+ - sources/headers/5.3.csv
212
+ - sources/headers/6.1.csv
213
+ - sources/headers/6.2.csv
214
+ - sources/headers/6.3.csv
215
+ - sources/headers/6.4.csv
216
+ - sources/headers/7.0.csv
217
+ - sources/headers/ignore.csv
218
+ - spec/data/723604.fec
219
+ - spec/data/97405.fec
220
+ - spec/default_translations_spec.rb
221
+ - spec/fech_utils_spec.rb
222
+ - spec/filing_spec.rb
223
+ - spec/map_generator_spec.rb
224
+ - spec/mapped_spec.rb
225
+ - spec/mappings_spec.rb
226
+ - spec/sources/F3P.csv
227
+ - spec/sources/SchA.csv
228
+ - spec/sources/SchB.csv
229
+ - spec/sources/SchC.csv
230
+ - spec/sources/headers/3.csv
231
+ - spec/sources/headers/5.0.csv
232
+ - spec/sources/headers/5.1.csv
233
+ - spec/sources/headers/5.2.csv
234
+ - spec/sources/headers/5.3.csv
235
+ - spec/sources/headers/6.1.csv
236
+ - spec/sources/headers/6.2.csv
237
+ - spec/sources/headers/6.3.csv
238
+ - spec/sources/headers/6.4.csv
239
+ - spec/sources/headers/7.0.csv
240
+ - spec/sources/headers/ignore.csv
241
+ - spec/sources/sa.csv
242
+ - spec/spec_helper.rb
243
+ - spec/translator_spec.rb
244
+ - tasks/fech.rake
245
+ has_rdoc: true
246
+ homepage: http://github.com/nytimes/fech
247
+ licenses: []
248
+
249
+ post_install_message:
250
+ rdoc_options: []
251
+
252
+ require_paths:
253
+ - lib
254
+ required_ruby_version: !ruby/object:Gem::Requirement
255
+ none: false
256
+ requirements:
257
+ - - ">="
258
+ - !ruby/object:Gem::Version
259
+ hash: 3
260
+ segments:
261
+ - 0
262
+ version: "0"
263
+ required_rubygems_version: !ruby/object:Gem::Requirement
264
+ none: false
265
+ requirements:
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ hash: 3
269
+ segments:
270
+ - 0
271
+ version: "0"
272
+ requirements: []
273
+
274
+ rubyforge_project: fech
275
+ rubygems_version: 1.6.2
276
+ signing_key:
277
+ specification_version: 3
278
+ summary: Ruby library for parsing FEC filings.
279
+ test_files: []
280
+