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 +4 -4
- data/lib/arc-furnace/csv_source.rb +9 -17
- data/lib/arc-furnace/enumerator_source.rb +7 -0
- data/lib/arc-furnace/excel_source.rb +22 -13
- data/lib/arc-furnace/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 401438a69d2165a093c17faf0e8c3fc10b960155
|
4
|
+
data.tar.gz: 870456329b0d027b6f627b97355bc91c42854c8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 <
|
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
|
-
|
14
|
-
advance
|
12
|
+
super()
|
15
13
|
end
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
!value
|
15
|
+
def finalize
|
16
|
+
file.close
|
20
17
|
end
|
21
18
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
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, :
|
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
|
23
|
-
|
22
|
+
def preprocess
|
23
|
+
enumerator.next
|
24
|
+
end
|
24
25
|
|
25
|
-
|
26
|
-
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
data/lib/arc-furnace/version.rb
CHANGED
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.
|
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-
|
12
|
+
date: 2016-01-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: msgpack
|