spec/csv2hash/parser/collection_spec.rb in csv2hash-0.5.0 vs spec/csv2hash/parser/collection_spec.rb in csv2hash-0.6.0
- old
+ new
@@ -1,58 +1,63 @@
require 'spec_helper'
-describe Csv2hash::Parser::Collection do
+module Csv2hash
+ describe Parser::Collection do
- let(:definition) do
- Csv2hash::Definition.new [ { position: 0, key: 'name' } ], Csv2hash::Definition::COLLECTION
- end
+ let(:definition) do
+ Main.generate_definition :foo do
+ set_type { Definition::COLLECTION }
+ mapping { cell position: 0, key: 'name' }
+ end
+ end
- let(:data_source) { [ [ 'John Doe' ], [ 'Jane Doe' ] ] }
- let(:ignore_blank_line) { false }
+ let(:data_source) { [ [ 'John Doe' ], [ 'Jane Doe' ] ] }
+ let(:ignore_blank_line) { false }
- subject do
- Csv2hash::Main.new(definition, data_source, ignore_blank_line: ignore_blank_line)
- end
+ subject do
+ Main.new(definition, data_source, ignore_blank_line: ignore_blank_line)
+ end
- context 'regular way' do
- it { expect { subject.parse }.to_not raise_error }
- it {
- expect(subject.tap do |parser|
- parser.parse
- end.data).to eql({ data: [ { 'name' => 'John Doe' }, { 'name' => 'Jane Doe' } ] })
- }
- context 'with header' do
- before { subject.definition.header_size = 1 }
- let(:data_source) { [ [ 'Name' ], [ 'John Doe' ], [ 'Jane Doe' ] ] }
+ context 'regular way' do
+ it { expect { subject.parse! }.to_not raise_error }
it {
- expect(subject.tap { |c| c.parse }.data).to eql(
- { data: [ { 'name' => 'John Doe' }, { 'name' => 'Jane Doe' } ] })
+ expect(subject.tap do |parser|
+ parser.parse!
+ end.data).to eql({ data: [ { 'name' => 'John Doe' }, { 'name' => 'Jane Doe' } ] })
}
+ context 'with header' do
+ before { subject.definition.header_size = 1 }
+ let(:data_source) { [ [ 'Name' ], [ 'John Doe' ], [ 'Jane Doe' ] ] }
+ it {
+ expect(subject.tap { |c| c.parse }.data).to eql(
+ { data: [ { 'name' => 'John Doe' }, { 'name' => 'Jane Doe' } ] })
+ }
+ end
end
- end
- context 'with nested' do
- let(:data_source) { [ [ 'John Doe', 22 ], [ 'Jane Doe', 19 ] ] }
- before do
- definition.rules << { position: 1, key: 'age', nested: 'infos' }
+ context 'with nested' do
+ let(:data_source) { [ [ 'John Doe', 22 ], [ 'Jane Doe', 19 ] ] }
+ before do
+ definition.cells << Cell.new({ position: 1, key: 'age', nested: 'infos' })
+ end
+ it {
+ expect(subject.tap { |c| c.parse! }.data).to eql(
+ { data: [
+ { 'name' => 'John Doe', 'infos' => { 'age' => 22 } },
+ { 'name' => 'Jane Doe', 'infos' => { 'age' => 19 } }
+ ]
+ }
+ )
+ }
end
- it {
- expect(subject.tap { |c| c.parse }.data).to eql(
- { data: [
- { 'name' => 'John Doe', 'infos' => { 'age' => 22 } },
- { 'name' => 'Jane Doe', 'infos' => { 'age' => 19 } }
- ]
- }
- )
- }
- end
- context '#ignore_blank_line' do
- let(:data_source) { [ [ 'John Doe' ], [ 'Jane Doe' ], [ nil ] ] }
- let(:ignore_blank_line) { true }
- it {
- expect(subject.tap do |parser|
- parser.parse
- end.data).to eql({ data: [ { 'name' => 'John Doe' }, { 'name' => 'Jane Doe' } ] })
- }
+ context '#ignore_blank_line' do
+ let(:data_source) { [ [ 'John Doe' ], [ 'Jane Doe' ], [ nil ] ] }
+ let(:ignore_blank_line) { true }
+ it {
+ expect(subject.tap do |parser|
+ parser.parse!
+ end.data).to eql({ data: [ { 'name' => 'John Doe' }, { 'name' => 'Jane Doe' } ] })
+ }
+ end
end
end