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 +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
|