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