iron-import 0.8.0 → 0.8.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 +4 -4
- data/History.txt +6 -0
- data/README.rdoc +1 -1
- data/Version.txt +1 -1
- data/lib/iron/import/data_reader.rb +8 -3
- data/lib/iron/import/importer.rb +7 -5
- data/lib/iron/import/row.rb +3 -2
- data/spec/importer/data_reader_spec.rb +10 -1
- data/spec/importer/importer_spec.rb +1 -0
- 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: af5ddfc35604cb25d28377798c3ea609ca7e575e
|
4
|
+
data.tar.gz: 76a6ed3cc099d49e6a5fa888b3a37dff26e2bee8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8d0f3a7cd1a6a2503df394b94dd74630d1226e4c1b0ed43fe9d76d0f264df358641ce7be2d51f30b7c0d870118af109f7e183de37e7a8d3a0c4d3aea8cd68b7
|
7
|
+
data.tar.gz: 3d6d629a0c09ce84b526025d945b55d0f4c6b8e250b3053b43ddb5fdba91e62e7c13a623f66c65a2e39700dd632464471309a6c3357b04c5e7e45c4b757a69ba
|
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.8.1 / 2017-07-18
|
2
|
+
* Do not include optional headers in #missing_headers
|
3
|
+
* Improve string parsing to strip trailing '.0' from incoming float values
|
4
|
+
* Add #to_h to Row for consistency with Column
|
5
|
+
* Bugfix for calls to #add_error with invalid calling signature
|
6
|
+
|
1
7
|
== 0.8.0 / 2017-06-29
|
2
8
|
* Breaking Change: change signature of Importer#add_error to support new features
|
3
9
|
* Breaking Change: Importer.missing_headers will be [] instead of nil on all headers found
|
data/README.rdoc
CHANGED
@@ -55,7 +55,7 @@ any errors encountered... well, this is the library for you!
|
|
55
55
|
# order and the starting row of the data.
|
56
56
|
importer = Importer.build do
|
57
57
|
column :name do
|
58
|
-
#
|
58
|
+
# Provide a regex to find the header for this column
|
59
59
|
header /(name|product)/i
|
60
60
|
end
|
61
61
|
column :description do
|
data/Version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.1
|
@@ -161,7 +161,8 @@ class Importer
|
|
161
161
|
|
162
162
|
elsif path_or_stream.is_a?(String)
|
163
163
|
# Assume it's a path
|
164
|
-
|
164
|
+
is_path = File.exist?(path_or_stream) rescue false
|
165
|
+
if is_path
|
165
166
|
if supports_file?
|
166
167
|
# We're all set, load up the given path
|
167
168
|
load_each(:file, path_or_stream, scopes, &block)
|
@@ -171,7 +172,7 @@ class Importer
|
|
171
172
|
load_each(:stream, file, scopes, &block)
|
172
173
|
end
|
173
174
|
else
|
174
|
-
add_error("Unable to locate source file #{path_or_stream}")
|
175
|
+
add_error("Unable to locate source file with path #{path_or_stream.slice(0,200)}")
|
175
176
|
end
|
176
177
|
|
177
178
|
else
|
@@ -219,7 +220,11 @@ class Importer
|
|
219
220
|
|
220
221
|
case type
|
221
222
|
when :string then
|
222
|
-
|
223
|
+
if val.is_a?(Float)
|
224
|
+
val.to_s.strip.gsub(/\.0+$/, '')
|
225
|
+
else
|
226
|
+
val.to_s.strip
|
227
|
+
end
|
223
228
|
|
224
229
|
when :integer, :int then
|
225
230
|
if val.class < Numeric
|
data/lib/iron/import/importer.rb
CHANGED
@@ -343,7 +343,7 @@ class Importer
|
|
343
343
|
else
|
344
344
|
# Auto select
|
345
345
|
@reader = DataReader::for_source(self, path_or_stream)
|
346
|
-
@format = @reader.format
|
346
|
+
@format = @reader.format if @reader
|
347
347
|
end
|
348
348
|
|
349
349
|
# Verify we got one
|
@@ -423,7 +423,7 @@ class Importer
|
|
423
423
|
begin
|
424
424
|
yield row
|
425
425
|
rescue Exception => e
|
426
|
-
add_error(
|
426
|
+
add_error(e.to_s, :row => row)
|
427
427
|
end
|
428
428
|
end
|
429
429
|
end
|
@@ -488,7 +488,7 @@ class Importer
|
|
488
488
|
|
489
489
|
else
|
490
490
|
# Match by testing
|
491
|
-
missing =
|
491
|
+
missing = []
|
492
492
|
raw_rows.each_with_index do |row, i|
|
493
493
|
# Um, have data?
|
494
494
|
next unless row
|
@@ -496,7 +496,7 @@ class Importer
|
|
496
496
|
# Set up for this iteration
|
497
497
|
remaining = @columns.select {|c| !c.virtual? }
|
498
498
|
|
499
|
-
# Step through this row's raw values, and look for a matching
|
499
|
+
# Step through this row's raw values, and look for a matching header for all columns
|
500
500
|
row.each_with_index do |val, i|
|
501
501
|
val = val.to_s
|
502
502
|
col = remaining.detect {|c| c.match_header?(val, i) }
|
@@ -532,7 +532,9 @@ class Importer
|
|
532
532
|
@missing_headers = []
|
533
533
|
return true
|
534
534
|
else
|
535
|
-
|
535
|
+
# Didn't find 'em all, remember this set of missing ones for reporting later
|
536
|
+
remaining.select! {|col| !col.optional? }
|
537
|
+
missing = remaining if missing.empty? || missing.count > remaining.count
|
536
538
|
end
|
537
539
|
end
|
538
540
|
|
data/lib/iron/import/row.rb
CHANGED
@@ -52,12 +52,13 @@ class Importer
|
|
52
52
|
end
|
53
53
|
|
54
54
|
# This row's values as a hash of :column_key => <parsed + validated value>
|
55
|
-
def
|
55
|
+
def to_h
|
56
56
|
@values.dup
|
57
57
|
end
|
58
|
+
def to_hash ; to_h ; end
|
58
59
|
|
59
60
|
def add_error(msg)
|
60
|
-
@importer.add_error(
|
61
|
+
@importer.add_error(msg, :row => self)
|
61
62
|
end
|
62
63
|
|
63
64
|
def has_errors?
|
@@ -10,7 +10,10 @@ describe Importer::DataReader do
|
|
10
10
|
'1234' => 1234,
|
11
11
|
'-2' => -2,
|
12
12
|
'5.00' => 5,
|
13
|
+
'2.5.00' => nil,
|
13
14
|
'foo' => nil,
|
15
|
+
'4 ducks' => nil,
|
16
|
+
'2-4' => nil,
|
14
17
|
'' => nil,
|
15
18
|
55 => 55,
|
16
19
|
3.0 => 3
|
@@ -22,6 +25,7 @@ describe Importer::DataReader do
|
|
22
25
|
it 'should parse floats' do
|
23
26
|
{
|
24
27
|
'1.256' => 1.256,
|
28
|
+
'4.22.00' => nil,
|
25
29
|
'-20.3' => -20.3,
|
26
30
|
'5.00' => 5.0,
|
27
31
|
'foo' => nil,
|
@@ -39,7 +43,8 @@ describe Importer::DataReader do
|
|
39
43
|
" spaces \t" => 'spaces',
|
40
44
|
'' => nil,
|
41
45
|
255 => '255',
|
42
|
-
-1.5 => '-1.5'
|
46
|
+
-1.5 => '-1.5',
|
47
|
+
10.0 => '10'
|
43
48
|
}.each_pair do |val, res|
|
44
49
|
@reader.parse_value(val, :string).should === res
|
45
50
|
end
|
@@ -50,6 +55,7 @@ describe Importer::DataReader do
|
|
50
55
|
'$123.00' => 12300,
|
51
56
|
'9.95' => 995,
|
52
57
|
'5' => 500,
|
58
|
+
'04 ' => 400,
|
53
59
|
'0.5' => 50,
|
54
60
|
'-95' => -9500,
|
55
61
|
52 => 5200,
|
@@ -77,6 +83,7 @@ describe Importer::DataReader do
|
|
77
83
|
Importer::DataReader.for_format(@importer, :csv).should be_a(Importer::CsvReader)
|
78
84
|
Importer::DataReader.for_format(@importer, :xls).should be_a(Importer::XlsReader)
|
79
85
|
Importer::DataReader.for_format(@importer, :xlsx).should be_a(Importer::XlsxReader)
|
86
|
+
Importer::DataReader.for_format(@importer, :html).should be_a(Importer::HtmlReader)
|
80
87
|
Importer::DataReader.for_format(@importer, :foo).should be_nil
|
81
88
|
end
|
82
89
|
|
@@ -84,6 +91,8 @@ describe Importer::DataReader do
|
|
84
91
|
Importer::DataReader.for_path(@importer, '/tmp/foo.csv').should be_a(Importer::CsvReader)
|
85
92
|
Importer::DataReader.for_path(@importer, 'BAR.XLS').should be_a(Importer::XlsReader)
|
86
93
|
Importer::DataReader.for_path(@importer, '/tmp/nog_bog.xlsx').should be_a(Importer::XlsxReader)
|
94
|
+
Importer::DataReader.for_path(@importer, '/tmp/nog_bog.htm').should be_a(Importer::HtmlReader)
|
95
|
+
Importer::DataReader.for_path(@importer, '/tmp/tim.txt.html').should be_a(Importer::HtmlReader)
|
87
96
|
Importer::DataReader.for_path(@importer, '/tmp/blinkin.bmp').should be_nil
|
88
97
|
end
|
89
98
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iron-import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Morris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: iron-extensions
|