arc-furnace 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
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