spec/api/api_data_spec.rb in squib-0.7.0 vs spec/api/api_data_spec.rb in squib-0.8.0

- old
+ new

@@ -18,26 +18,49 @@ 'H2' => [6, 8], 'h3' => [9, 10], }) end - it 'handles spaces properly' do + it 'strips spaces by default' do expect(Squib.csv(file: csv_file('with_spaces.csv'))).to eq({ - 'With Spaces' => ['a b c ', 3], + 'With Spaces' => ['a b c', 3], 'h2' => [2, 4], 'h3' => [3, nil] }) end + + it 'skips space stripping if told to' do + expect(Squib.csv(strip: false, file: csv_file('with_spaces.csv'))).to eq({ + ' With Spaces ' => ['a b c ', 3], + 'h2' => [2, 4], + 'h3' => [3, nil] + }) + end + + it 'explodes quantities' do + expect(Squib.csv(file: csv_file('qty.csv'))).to eq({ + 'Name' => %w(Ha Ha Ha Ho), + 'Qty' => [3, 3, 3, 1], + }) + end + + it 'explodes quantities on specified header' do + expect(Squib.csv(explode: 'Quantity', file: csv_file('qty_named.csv'))).to eq({ + 'Name' => %w(Ha Ha Ha Ho), + 'Quantity' => [3, 3, 3, 1], + }) + end + end context '#xlsx' do it 'loads basic xlsx data' do expect(Squib.xlsx(file: xlsx_file('basic.xlsx'))).to eq({ - 'Name' => %w(Larry Curly Mo), - 'General Number' => %w(1 2 3), #general types always get loaded as strings with no conversion - 'Actual Number' => [4.0, 5.0, 6.0], #numbers get auto-converted to integers - }) + 'Name' => %w(Larry Curly Mo), + 'General Number' => %w(1 2 3), #general types always get loaded as strings with no conversion + 'Actual Number' => [4.0, 5.0, 6.0], #numbers get auto-converted to integers + }) end it 'loads xlsx with formulas' do expect(Squib.xlsx(file: xlsx_file('formulas.xlsx'))).to eq({ 'A' => %w(1 2), @@ -48,9 +71,46 @@ it 'loads xlsm files with macros' do expect(Squib.xlsx(file: xlsx_file('with_macros.xlsm'))).to eq({ 'foo' => %w(8 10), 'bar' => %w(9 11), + }) + end + + it 'strips whitespace by default' do + expect(Squib.xlsx(file: xlsx_file('whitespace.xlsx'))).to eq({ + 'With Whitespace' => ['foo', 'bar', 'baz'], + }) + end + + it 'does not strip whitespace when specified' do + expect(Squib.xlsx(file: xlsx_file('whitespace.xlsx'), strip: false)).to eq({ + ' With Whitespace ' => ['foo ', ' bar', ' baz '], + }) + end + + it 'yields to block when given' do + data = Squib.xlsx(file: xlsx_file('basic.xlsx')) do |header, value| + case header + when 'Name' + 'he' + when 'Actual Number' + value * 2 + else + 'ha' + end + end + expect(data).to eq({ + 'Name' => %w(he he he), + 'General Number' => %w(ha ha ha), + 'Actual Number' => [8.0, 10.0, 12.0], + }) + end + + it 'explodes quantities' do + expect(Squib.xlsx(explode: 'Qty', file: xlsx_file('explode_quantities.xlsx'))).to eq({ + 'Name' => ['Zergling', 'Zergling', 'Zergling', 'High Templar'], + 'Qty' => %w(3 3 3 1), }) end end end