arc-furnace 0.1.12 → 0.1.13

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
2
  SHA1:
3
- metadata.gz: d72d07c3b8825ef0dafa1cea574ae5fdd9fb8bfd
4
- data.tar.gz: d7c6dd81528cce65a1bd3919d78369c63587cd09
3
+ metadata.gz: 401438a69d2165a093c17faf0e8c3fc10b960155
4
+ data.tar.gz: 870456329b0d027b6f627b97355bc91c42854c8d
5
5
  SHA512:
6
- metadata.gz: 95e6a1c890f47069d918d706e2f8f466c0854b356f4ef0d56a54d74be7881b9a31f9e81e323e75d8c1d732dd4a16bd9907517e0439d3423334ee70a5e5d93fbe
7
- data.tar.gz: a0d046f0cf4f882be6507c24e5e067b32d95bd1317e636c0a0bd3f71f04e560b4848486abec9248f83ef59ab6f237bcc139d639ce5f6b8c759430e868793326d
6
+ metadata.gz: 2a5e9147e64a189b1874d9a06f5fff23d0f9c89b06208058dc6232ab520b342fa83d104fc0e0d5f7d8fd21e8cfb44b577fa8fa54668e117ad2f3d9086c01322f
7
+ data.tar.gz: 0e14d178fc361a6ea7cb7e8a96be7537064f2cb95ea2a487fe00d0044ea14d824b89b5d9cfe5871361c5f2d778b3273a6c8d1094b0432940395c89b2920e3f7c
@@ -1,33 +1,25 @@
1
- require 'arc-furnace/source'
2
1
  require 'arc-furnace/csv_to_hash_with_duplicate_headers'
2
+ require 'arc-furnace/enumerator_source'
3
3
  require 'csv'
4
4
 
5
5
  module ArcFurnace
6
- class CSVSource < Source
6
+ class CSVSource < EnumeratorSource
7
7
  include CSVToHashWithDuplicateHeaders
8
- private_attr_reader :csv
9
8
  attr_reader :value, :file
10
9
 
11
10
  def initialize(filename: , encoding: 'UTF-8')
12
11
  @file = File.open(filename, encoding: encoding)
13
- @csv = CSV.new(file, encoding: encoding, headers: true).each
14
- advance
12
+ super()
15
13
  end
16
14
 
17
- # Is this source empty?
18
- def empty?
19
- !value
15
+ def finalize
16
+ file.close
20
17
  end
21
18
 
22
- def advance
23
- @value =
24
- begin
25
- csv_to_hash_with_duplicates(csv.next) if csv
26
- rescue StopIteration
27
- file.close
28
- @csv = nil
29
- nil
30
- end
19
+ def build_enumerator
20
+ Enumerator.new do |yielder|
21
+ CSV.new(file, headers: true).each { |row| yielder << csv_to_hash_with_duplicates(row) }
22
+ end
31
23
  end
32
24
  end
33
25
  end
@@ -8,9 +8,16 @@ module ArcFurnace
8
8
 
9
9
  def initialize
10
10
  @enumerator = build_enumerator
11
+ preprocess
11
12
  advance
12
13
  end
13
14
 
15
+ # Called after setting up the enumerator but before advancing it
16
+ # Use this to extract header rows for instance.
17
+ def preprocess
18
+ # nothing
19
+ end
20
+
14
21
  # Is this source empty?
15
22
  def empty?
16
23
  !value
@@ -4,7 +4,7 @@ require 'roo'
4
4
  module ArcFurnace
5
5
  class ExcelSource < EnumeratorSource
6
6
 
7
- private_attr_reader :excel, :enumerator
7
+ private_attr_reader :excel, :header_row
8
8
  attr_reader :value
9
9
 
10
10
  def initialize(filename: , sheet: nil)
@@ -19,21 +19,30 @@ module ArcFurnace
19
19
  @excel.close if @excel
20
20
  end
21
21
 
22
- def build_enumerator
23
- header_row = excel.row(1)
22
+ def preprocess
23
+ enumerator.next
24
+ end
24
25
 
25
- last_row_index = excel.last_row
26
- current_row_index = 2
26
+ def extract_cell_value(cell)
27
+ if cell
28
+ coerced_value = cell.type == :string ? cell.value : cell.excelx_value.try(:to_s).try(:strip)
29
+ coerced_value unless coerced_value.blank?
30
+ end
31
+ end
27
32
 
33
+ def build_enumerator
28
34
  Enumerator.new do |yielder|
29
- until current_row_index > last_row_index
30
- row = header_row.each_with_object(::Hash.new).each_with_index do |(header, result), index|
31
- value = excel.cell(current_row_index, index + 1)
32
- coerced_value = (value.is_a?(String) ? value : excel.excelx_value(current_row_index, index + 1)).try(:to_s).try(:strip)
33
- result[header] = coerced_value unless coerced_value.blank?
34
- end
35
- current_row_index += 1
36
- yielder << row
35
+ excel.each_row_streaming do |row|
36
+ yielder <<
37
+ if header_row
38
+ row.each_with_object({}) do |cell, result|
39
+ value = extract_cell_value(cell)
40
+ result[header_row[cell.coordinate.column - 1]] = value if value
41
+ end
42
+ else
43
+ # First time, return the header row so we can save it.
44
+ @header_row = row.map { |value| extract_cell_value(value) }
45
+ end
37
46
  end
38
47
  end
39
48
  end
@@ -1,3 +1,3 @@
1
1
  module ArcFurnace
2
- VERSION = "0.1.12"
2
+ VERSION = "0.1.13"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arc-furnace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Spangenberger
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-01-05 00:00:00.000000000 Z
12
+ date: 2016-01-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack