fech 1.8.1 → 1.9.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cf99fb20f8adabe6735e03ac5b55357bfe0f542f
4
- data.tar.gz: ae036cc7bd2e0eea197d6333e2189e54a65d881d
2
+ SHA256:
3
+ metadata.gz: a65ffc421f1476a1377a5c7301f203d84092810b89d981fa215dff7b79ff8fb5
4
+ data.tar.gz: cef4ac29dda973b6e4eabaa3fe002c8ff25912681430bf3f6b0fa141b52f1c29
5
5
  SHA512:
6
- metadata.gz: 9516d5194de65aeda2d98c56e7fd08fee53b355607c51c0bd035fc0b9c49c13b0eac33233804c354d6c61ebe14ea0e2399d8a9d29a9312c4f8bc9c40e1be445f
7
- data.tar.gz: 53f56dd6ce040929ad1e5db9db7ea407634e2be3fc1e011f14a30e8e37457021764ad65366b7c9b4eba2c90fe2861ca29f4723b852ec506f018b6592aa4d89fc
6
+ metadata.gz: 6176c211f7a1639281f7b0f169249f60c8aa3542a8f6d6295f9df9310da6fbd20dcfa230dcad9bc4931833e10db7c319620cc73f39372ccab83440f0cbf76fc2
7
+ data.tar.gz: 7d1ffa2b9d92c43705b6aa704cd30cff93fefb641a8f0b8c7a9692c78e8a8643aa424a42f143f2644ea03572a1437c29c69467a4190d82ad4b632c3949dd1c18
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fech (1.8)
4
+ fech (1.9)
5
5
  ensure-encoding
6
6
  fastercsv
7
7
  people
@@ -3,7 +3,7 @@ require 'open-uri'
3
3
  require 'ensure/encoding'
4
4
 
5
5
  module Fech
6
-
6
+
7
7
  # Fech::Filing downloads an Electronic Filing given its ID, and will search
8
8
  # rows by row type. Using a child Translator object, the data in each row
9
9
  # is automatically mapped at runtime into a labeled Hash. Additional
@@ -11,8 +11,8 @@ module Fech
11
11
  class Filing
12
12
  # first filing number using the version >=3.00 format
13
13
  # note that there are plenty of <v3 filings after this, so readable? still needs to be checked
14
- FIRST_V3_FILING = 11850
15
-
14
+ FIRST_V3_FILING = 11850
15
+
16
16
  attr_accessor :filing_id, :download_dir
17
17
 
18
18
  # Create a new Filing object, assign the download directory to system's
@@ -44,7 +44,7 @@ module Fech
44
44
  end
45
45
  self
46
46
  end
47
-
47
+
48
48
  # Access the header (first) line of the filing, containing information
49
49
  # about the filing's version and metadata about the software used to file it.
50
50
  # @return [Hash] a hash that assigns labels to the values of the filing's header row
@@ -53,7 +53,7 @@ module Fech
53
53
  return parse_row?(row)
54
54
  end
55
55
  end
56
-
56
+
57
57
  # Access the summary (second) line of the filing, containing aggregate and
58
58
  # top-level information about the filing.
59
59
  # @return [Hash] a hash that assigns labels to the values of the filing's summary row
@@ -63,7 +63,7 @@ module Fech
63
63
  return parse_row?(row)
64
64
  end
65
65
  end
66
-
66
+
67
67
  # Access all lines of the filing that match a given row type. Will return an
68
68
  # Array of all available lines if called directly, or will yield the mapped
69
69
  # rows one by one if a block is passed.
@@ -88,7 +88,7 @@ module Fech
88
88
  end
89
89
  block_given? ? nil : data
90
90
  end
91
-
91
+
92
92
  # Decides what to do with a given row. If the row's type matches the desired
93
93
  # type, or if no type was specified, it will run the row through #map.
94
94
  # If :raw was passed true, a flat, unmapped data array will be returned.
@@ -119,14 +119,14 @@ module Fech
119
119
  def map(row, opts={})
120
120
  data = Fech::Mapped.new(self, row.first)
121
121
  full_row_map = map_for(row.first)
122
-
122
+
123
123
  # If specific fields were asked for, return only those
124
124
  if opts[:include]
125
125
  row_map = full_row_map.select { |k| opts[:include].include?(k) }
126
126
  else
127
127
  row_map = full_row_map
128
128
  end
129
-
129
+
130
130
  # Inserts the row into data, performing any specified preprocessing
131
131
  # on individual cells along the way
132
132
  row_map.each_with_index do |field, index|
@@ -141,7 +141,7 @@ module Fech
141
141
  end
142
142
  data[field] = value
143
143
  end
144
-
144
+
145
145
  # Performs any specified group preprocessing / combinations
146
146
  if translator
147
147
  combinations = translator.get_translations(:row => row.first,
@@ -156,14 +156,14 @@ module Fech
156
156
  end
157
157
  data
158
158
  end
159
-
159
+
160
160
  # Returns the column names for given row type and the filing's version
161
161
  # in the order they appear in row data.
162
162
  # @param [String, Regexp] row_type representation of the row desired
163
163
  def map_for(row_type)
164
164
  mappings.for_row(row_type)
165
165
  end
166
-
166
+
167
167
  # Returns the column names for given row type and version in the order
168
168
  # they appear in row data.
169
169
  # @param [String, Regexp] row_type representation of the row desired
@@ -171,7 +171,7 @@ module Fech
171
171
  def self.map_for(row_type, opts={})
172
172
  Fech::Mappings.for_row(row_type, opts)
173
173
  end
174
-
174
+
175
175
  # Accessor for @translator. Will return the Translator initialized in
176
176
  # Filing's initializer if built-in translations were passed to Filing's
177
177
  # initializer ({:translate => [:foo, :bar]}).
@@ -190,19 +190,19 @@ module Fech
190
190
  translator
191
191
  end
192
192
  end
193
-
193
+
194
194
  # Whether this filing amends a previous filing or not.
195
195
  def amendment?
196
196
  !amends.nil?
197
197
  end
198
-
198
+
199
199
  # Returns the filing ID of the past filing this one amends,
200
200
  # nil if this is a first-draft filing.
201
201
  # :report_id in the HDR line references the amended filing
202
202
  def amends
203
203
  header[:report_id]
204
204
  end
205
-
205
+
206
206
  # Combines an array of keys and values into an Fech::Mapped object,
207
207
  # a type of Hash.
208
208
  # @param [Array] keys the desired keys for the new hash
@@ -211,12 +211,12 @@ module Fech
211
211
  def hash_zip(keys, values)
212
212
  Fech::Mapped.new(self, values.first).merge(Hash[*keys.zip(values).flatten])
213
213
  end
214
-
214
+
215
215
  # The version of the FEC software used to generate this Filing
216
216
  def filing_version
217
217
  @filing_version ||= parse_filing_version
218
218
  end
219
-
219
+
220
220
  # Pulls out the version number from the header line.
221
221
  # Must parse this line manually, since we don't know the version yet, and
222
222
  # thus the delimiter type is still a mystery.
@@ -228,12 +228,12 @@ module Fech
228
228
  @csv_parser.parse(first, :col_sep => "\034").flatten[2]
229
229
  end
230
230
  end
231
-
231
+
232
232
  # Only FEC format 3.00 + is supported
233
233
  def readable?
234
234
  filing_version.to_i >= 3
235
235
  end
236
-
236
+
237
237
  # Gets or creats the Mappings instance for this filing_version
238
238
  def mappings
239
239
  @mapping ||= Fech::Mappings.new(filing_version)
@@ -279,16 +279,16 @@ module Fech
279
279
  def fix_f99_contents
280
280
  @customized = true
281
281
  content = file_contents.read
282
-
282
+
283
283
  if RUBY_VERSION > "1.9.2"
284
284
  content.encode!('UTF-16', 'UTF-8', :invalid => :replace, :undef => :replace, :replace => '?')
285
285
  content.encode!('UTF-8', 'UTF-16')
286
286
  else
287
287
  require 'iconv'
288
- ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
288
+ ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
289
289
  content = ic.iconv(content + ' ')[0..-2] # add valid byte before converting, then remove it
290
290
  end
291
-
291
+
292
292
  regex = /\n\[BEGINTEXT\]\n(.*?)\[ENDTEXT\]\n/mi # some use eg [EndText]
293
293
  match = content.match(regex)
294
294
  if match
@@ -311,7 +311,7 @@ module Fech
311
311
  end
312
312
 
313
313
  def filing_url
314
- "http://docquery.fec.gov/dcdev/posted/#{filing_id}.fec"
314
+ "https://docquery.fec.gov/dcdev/posted/#{filing_id}.fec"
315
315
  end
316
316
 
317
317
  # Iterates over and yields the Filing's lines
@@ -341,11 +341,11 @@ module Fech
341
341
  def each_row_with_index(&block)
342
342
  each_row(:with_index => true, &block)
343
343
  end
344
-
344
+
345
345
  # @return [String] the delimiter used in the filing's version
346
346
  def delimiter
347
347
  filing_version.to_f < 6 ? "," : "\034"
348
348
  end
349
-
349
+
350
350
  end
351
351
  end
@@ -1,7 +1,7 @@
1
1
  module Fech
2
2
  class SenateFiling < Filing
3
3
  def filing_url
4
- "http://docquery.fec.gov/senate/posted/#{filing_id}.fec"
4
+ "https://docquery.fec.gov/senate/posted/#{filing_id}.fec"
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,3 @@
1
1
  module Fech
2
- VERSION = "1.8.1"
2
+ VERSION = "1.9.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fech
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.1
4
+ version: 1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Strickland
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2019-03-01 00:00:00.000000000 Z
15
+ date: 2019-06-03 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: fastercsv
@@ -252,7 +252,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
252
252
  version: '0'
253
253
  requirements: []
254
254
  rubyforge_project: fech
255
- rubygems_version: 2.5.2.1
255
+ rubygems_version: 2.7.6.2
256
256
  signing_key:
257
257
  specification_version: 4
258
258
  summary: Ruby library for parsing FEC filings.