csv2hash 0.4.0 → 0.5.0
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/Gemfile.lock +18 -5
- data/README.md +21 -4
- data/ReleaseNotes.md +8 -0
- data/csv2hash.gemspec +7 -4
- data/lib/csv2hash/parser/collection.rb +1 -1
- data/lib/csv2hash/validator/collection.rb +1 -1
- data/lib/csv2hash/version.rb +1 -1
- data/lib/csv2hash.rb +10 -6
- data/spec/csv2hash/parser/collection_spec.rb +3 -2
- data/spec/csv2hash/parser/mapping_spec.rb +1 -1
- data/spec/csv2hash/structure_validator_spec.rb +1 -1
- data/spec/csv2hash/validator/collection_spec.rb +4 -3
- data/spec/csv2hash/validator/mapping_spec.rb +1 -1
- metadata +29 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 043c4be4542235e09772f8ca2249288158f7230f
|
4
|
+
data.tar.gz: 2eb0e8d2a0e13854f103b21b34d4a54fbb55e64f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43c070b76ca768925631f70c3e95750b5ec7edf9438e856ee58160c288f04a9c6d2215bc04c01af7a464ef80a991c1adb88797b5f4183d7c53922b1d09ca893b
|
7
|
+
data.tar.gz: 62050c84397a144b712a592cc9e39d28d1bec6965fdbe31d35263016cf31a4b4a35b2450538088da239583ed76a0d9ce7e8ec0c3e129176792ed39e5a6c06715
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
csv2hash (0.
|
4
|
+
csv2hash (0.5.0)
|
5
|
+
activesupport (~> 4.1)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: http://rubygems.org/
|
8
9
|
specs:
|
10
|
+
activesupport (4.1.4)
|
11
|
+
i18n (~> 0.6, >= 0.6.9)
|
12
|
+
json (~> 1.7, >= 1.7.7)
|
13
|
+
minitest (~> 5.1)
|
14
|
+
thread_safe (~> 0.1)
|
15
|
+
tzinfo (~> 1.1)
|
9
16
|
coderay (1.1.0)
|
10
17
|
coveralls (0.7.1)
|
11
18
|
multi_json (~> 1.3)
|
@@ -15,10 +22,13 @@ GEM
|
|
15
22
|
thor
|
16
23
|
diff-lcs (1.2.5)
|
17
24
|
docile (1.1.5)
|
25
|
+
i18n (0.6.11)
|
18
26
|
its (0.2.0)
|
19
27
|
rspec-core
|
28
|
+
json (1.8.1)
|
20
29
|
method_source (0.8.2)
|
21
30
|
mime-types (2.3)
|
31
|
+
minitest (5.4.0)
|
22
32
|
multi_json (1.10.1)
|
23
33
|
netrc (0.7.7)
|
24
34
|
pry (0.10.0)
|
@@ -50,16 +60,19 @@ GEM
|
|
50
60
|
term-ansicolor (1.3.0)
|
51
61
|
tins (~> 1.0)
|
52
62
|
thor (0.19.1)
|
63
|
+
thread_safe (0.3.4)
|
53
64
|
tins (1.3.2)
|
65
|
+
tzinfo (1.2.1)
|
66
|
+
thread_safe (~> 0.1)
|
54
67
|
|
55
68
|
PLATFORMS
|
56
69
|
ruby
|
57
70
|
|
58
71
|
DEPENDENCIES
|
59
|
-
bundler (~> 1.
|
72
|
+
bundler (~> 1.6)
|
60
73
|
coveralls
|
61
74
|
csv2hash!
|
62
|
-
its
|
75
|
+
its (~> 0.2)
|
63
76
|
pry
|
64
|
-
rake
|
65
|
-
rspec
|
77
|
+
rake (~> 10.3)
|
78
|
+
rspec (~> 3.0)
|
data/README.md
CHANGED
@@ -227,7 +227,7 @@ You can define the number of rows to skip in the header of the CSV.
|
|
227
227
|
Pasrer can take several parameters like that:
|
228
228
|
|
229
229
|
```
|
230
|
-
definition, file_path_or_data, ignore_blank_line
|
230
|
+
definition, file_path_or_data, ignore_blank_line: false
|
231
231
|
```
|
232
232
|
|
233
233
|
in file_path_or_data attribute you can pass directly an Array of data (Array with 2 dimensions) really useful for testing, if you don't care about blank lines in your CSV you can ignore them.
|
@@ -266,7 +266,7 @@ You need call `.parse()` return `data_wrapper` if `.parse()` is invalid, you can
|
|
266
266
|
in your code
|
267
267
|
|
268
268
|
```
|
269
|
-
parser = Csv2hash::Main.new(definition, file_path_or_data, ignore_blank_line
|
269
|
+
parser = Csv2hash::Main.new(definition, file_path_or_data, ignore_blank_line: false).new
|
270
270
|
response = parser.parse
|
271
271
|
return response if response.valid?
|
272
272
|
# Whatever
|
@@ -352,11 +352,28 @@ Csv data
|
|
352
352
|
```
|
353
353
|
[ [ 'Foo' ] ]
|
354
354
|
```
|
355
|
+
|
356
|
+
# Upgrading from 0.4 to 0.5
|
357
|
+
|
358
|
+
Signature of ```Csv2hash::Main#new``` has changed too
|
359
|
+
|
360
|
+
Prior to 0.5 :
|
361
|
+
|
362
|
+
```
|
363
|
+
Csv2Hash::Main.new(definition, file_path_or_data, ignore_blank_line=false)
|
364
|
+
```
|
365
|
+
|
366
|
+
Starting from 0.5 :
|
367
|
+
|
368
|
+
```
|
369
|
+
Csv2Hash::Main.new(definition, file_path_or_data, ignore_blank_line: false)
|
370
|
+
```
|
371
|
+
|
355
372
|
# Upgrading from 0.3 to 0.4
|
356
373
|
|
357
374
|
Signature of ```Csv2hash::Main#new``` has changed too
|
358
375
|
|
359
|
-
Prior to 0.
|
376
|
+
Prior to 0.4 :
|
360
377
|
|
361
378
|
```
|
362
379
|
Csv2Hash::Main.new(definition, file_path_or_data, break_on_failure=true, ignore_blank_line=false)
|
@@ -364,7 +381,7 @@ Prior to 0.3 :
|
|
364
381
|
|
365
382
|
call ```.parse!``` for same result
|
366
383
|
|
367
|
-
Starting from 0.
|
384
|
+
Starting from 0.4 :
|
368
385
|
|
369
386
|
```
|
370
387
|
Csv2Hash::Main.new(definition, file_path_or_data, ignore_blank_line=false)
|
data/ReleaseNotes.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
### VERSION 0.5.0
|
2
|
+
|
3
|
+
* backwards incompatible changes
|
4
|
+
* The signature of Csv2hash::Main#new has changed.
|
5
|
+
|
6
|
+
* refactoring
|
7
|
+
* remove params ``` ignore_blank_line ``` to benefit of options of Hash
|
8
|
+
|
1
9
|
### VERSION 0.4.0
|
2
10
|
|
3
11
|
* backwards incompatible changes
|
data/csv2hash.gemspec
CHANGED
@@ -17,9 +17,12 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.
|
21
|
-
|
22
|
-
spec.add_development_dependency '
|
23
|
-
spec.add_development_dependency '
|
20
|
+
spec.add_dependency 'activesupport', '~> 4.1'
|
21
|
+
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.3'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
|
+
spec.add_development_dependency 'its', '~> 0.2'
|
26
|
+
|
24
27
|
spec.required_ruby_version = '~> 2.1'
|
25
28
|
end
|
@@ -6,7 +6,7 @@ module Csv2hash::Parser::Collection
|
|
6
6
|
data_computed[:data] ||= []
|
7
7
|
self.data_source.each_with_index do |line, y|
|
8
8
|
next if y < definition.header_size
|
9
|
-
next if self.ignore_blank_line and line.compact.empty?
|
9
|
+
next if self.options.fetch(:ignore_blank_line) and line.compact.empty?
|
10
10
|
data_computed[:data] << {}.tap do |data_parsed|
|
11
11
|
fill_it data_parsed, line
|
12
12
|
end
|
@@ -4,7 +4,7 @@ module Csv2hash::Validator::Collection
|
|
4
4
|
def validate_data!
|
5
5
|
self.data_source.each_with_index do |line, y|
|
6
6
|
next if y < definition.header_size
|
7
|
-
next if self.ignore_blank_line and line.compact.empty?
|
7
|
+
next if self.options.fetch(:ignore_blank_line) and line.compact.empty?
|
8
8
|
validate_rules y
|
9
9
|
end
|
10
10
|
end
|
data/lib/csv2hash/version.rb
CHANGED
data/lib/csv2hash.rb
CHANGED
@@ -15,6 +15,8 @@ require_relative 'csv2hash/notifier'
|
|
15
15
|
require_relative 'csv2hash/extra_validator'
|
16
16
|
require_relative 'csv2hash/adapters/base'
|
17
17
|
|
18
|
+
require 'active_support/core_ext/array/extract_options'
|
19
|
+
|
18
20
|
begin
|
19
21
|
require 'pry'
|
20
22
|
rescue LoadError
|
@@ -24,16 +26,18 @@ module Csv2hash
|
|
24
26
|
class Main
|
25
27
|
include Csv2hash::StructureValidator
|
26
28
|
|
27
|
-
attr_accessor :definition, :file_path_or_data, :data, :notifier, :break_on_failure, :errors, :
|
29
|
+
attr_accessor :definition, :file_path_or_data, :data, :notifier, :break_on_failure, :errors, :options
|
28
30
|
|
29
|
-
def initialize definition, file_path_or_data,
|
31
|
+
def initialize definition, file_path_or_data, *args
|
32
|
+
self.options = args.extract_options!
|
30
33
|
self.definition, self.file_path_or_data = definition, file_path_or_data
|
31
|
-
@data_source = data_source
|
32
|
-
dynamic_lib_loading 'Parser'
|
33
34
|
self.break_on_failure, self.errors = false, []
|
34
|
-
dynamic_lib_loading 'Validator'
|
35
35
|
self.notifier = Notifier.new
|
36
|
-
|
36
|
+
|
37
|
+
dynamic_lib_loading 'Parser'
|
38
|
+
dynamic_lib_loading 'Validator'
|
39
|
+
|
40
|
+
@data_source = data_source
|
37
41
|
|
38
42
|
init_plugins
|
39
43
|
end
|
@@ -7,9 +7,10 @@ describe Csv2hash::Parser::Collection do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:data_source) { [ [ 'John Doe' ], [ 'Jane Doe' ] ] }
|
10
|
+
let(:ignore_blank_line) { false }
|
10
11
|
|
11
12
|
subject do
|
12
|
-
Csv2hash::Main.new(definition, data_source, ignore_blank_line
|
13
|
+
Csv2hash::Main.new(definition, data_source, ignore_blank_line: ignore_blank_line)
|
13
14
|
end
|
14
15
|
|
15
16
|
context 'regular way' do
|
@@ -47,9 +48,9 @@ describe Csv2hash::Parser::Collection do
|
|
47
48
|
|
48
49
|
context '#ignore_blank_line' do
|
49
50
|
let(:data_source) { [ [ 'John Doe' ], [ 'Jane Doe' ], [ nil ] ] }
|
51
|
+
let(:ignore_blank_line) { true }
|
50
52
|
it {
|
51
53
|
expect(subject.tap do |parser|
|
52
|
-
parser.ignore_blank_line = true
|
53
54
|
parser.parse
|
54
55
|
end.data).to eql({ data: [ { 'name' => 'John Doe' }, { 'name' => 'Jane Doe' } ] })
|
55
56
|
}
|
@@ -9,7 +9,7 @@ describe Csv2hash::Parser::Mapping do
|
|
9
9
|
let(:data_source) { [ [ 'John Doe' ] ] }
|
10
10
|
|
11
11
|
subject do
|
12
|
-
Csv2hash::Main.new(definition, data_source, ignore_blank_line
|
12
|
+
Csv2hash::Main.new(definition, data_source, ignore_blank_line: false)
|
13
13
|
end
|
14
14
|
|
15
15
|
context 'regular way' do
|
@@ -8,9 +8,10 @@ describe Csv2hash::Validator::Collection do
|
|
8
8
|
definition.default!
|
9
9
|
end
|
10
10
|
end
|
11
|
+
let(:ignore_blank_line) { false }
|
11
12
|
|
12
13
|
subject do
|
13
|
-
Csv2hash::Main.new(definition, data_source, ignore_blank_line
|
14
|
+
Csv2hash::Main.new(definition, data_source, ignore_blank_line: ignore_blank_line)
|
14
15
|
end
|
15
16
|
|
16
17
|
before do
|
@@ -30,7 +31,7 @@ describe Csv2hash::Validator::Collection do
|
|
30
31
|
|
31
32
|
context '#ignore_blank_line' do
|
32
33
|
let(:data_source) { [ [ ] ] }
|
33
|
-
|
34
|
+
let(:ignore_blank_line) { true }
|
34
35
|
it { expect { subject.validate_data! }.to_not raise_error }
|
35
36
|
context 'csv mode' do
|
36
37
|
before { subject.break_on_failure = false }
|
@@ -50,7 +51,7 @@ describe Csv2hash::Validator::Collection do
|
|
50
51
|
|
51
52
|
context 'wihtout exception' do
|
52
53
|
let(:data_source) { [ [ ] ]}
|
53
|
-
|
54
|
+
|
54
55
|
before do
|
55
56
|
allow(subject).to receive(:break_on_failure) { false }
|
56
57
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csv2hash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel AZEMAR
|
@@ -10,62 +10,76 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2013-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.1'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
33
|
+
version: '1.6'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
40
|
+
version: '1.6'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '10.3'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '10.3'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- - "
|
59
|
+
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
61
|
+
version: '3.0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- - "
|
66
|
+
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
68
|
+
version: '3.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: its
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
75
|
+
version: '0.2'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
82
|
+
version: '0.2'
|
69
83
|
description: DSL to map a CSV to a Ruby Hash
|
70
84
|
email: joel.azemar@gmail.com
|
71
85
|
executables:
|