table_importer 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4235b6be7a6e1a540674326e18fd5ff08734672e
4
- data.tar.gz: f0085296dac6201c7d47fe4120fec5eb70120154
3
+ metadata.gz: d97c5be89ed1115ef5f4ca473c650e80fc94a5c2
4
+ data.tar.gz: 0ce496477bfffbeb34ed62df57d584dec0e4cb9b
5
5
  SHA512:
6
- metadata.gz: fd616c41592477e07e9ab682c6f4b4e40c264317a8169aa5f01cb0909bfe6516363957f73bb92153ebcadce4084138c1824c6a55ed0c42d9e7890d35eba50023
7
- data.tar.gz: cdc2f3dc97445c32229fe413a196ed109d887be20e32ac28814a9a5aa984d697c4ecdfca096df2ff6af784e94186b9c28e384712a7410c7a1a718e232898a730
6
+ metadata.gz: 7511ab5023f3acc49988d034551173be2635edb79a6e09564ea0cfd58cfb8fd4d4618baeb2c3330666dcf4a9a89ccc001da2d69c4aec98155cc8f2dd8aa7c4d3
7
+ data.tar.gz: c884a44b264ddb101a7455c339e7a8a544bcfdc45ef0e0cf3d2bfc90ba757dc95ea55bd84d20fac85989d12f81e720b318a89fca3e7bb3b74a37406b6ecb91ad
@@ -17,6 +17,7 @@ module TableImporter
17
17
  end
18
18
  get_column_separator(first_line)
19
19
  raise TableImporter::EmptyFileImportError.new unless file_has_content
20
+ @mapping = data[:user_headers]
20
21
  @headers = @headers_present ? first_line.split(@column_separator) : default_headers(100)
21
22
  rescue ArgumentError
22
23
  @file = clean_file(@file)
@@ -114,12 +115,12 @@ module TableImporter
114
115
  end
115
116
 
116
117
  def chunks_with_headers(chunk_size)
117
- key_mapping = convert_headers(SmarterCSV.process(@file.path, default_options).first.keys, @headers, @headers_present).delete_if{ |key, value| value.blank?}
118
+ key_mapping = convert_headers(SmarterCSV.process(@file.path, default_options).first.keys, @mapping, @headers_present).delete_if{ |key, value| value.blank?}
118
119
  SmarterCSV.process(@file.path, default_options({:chunk_size => chunk_size, :key_mapping => key_mapping, :remove_unmapped_keys => true, :user_provided_headers => nil}))
119
120
  end
120
121
 
121
122
  def chunks_without_headers(chunk_size)
122
- user_provided_headers = convert_headers(SmarterCSV.process(@file.path, default_options).first.keys, @headers, @headers_present).values
123
+ user_provided_headers = convert_headers(SmarterCSV.process(@file.path, default_options).first.keys, @mapping, @headers_present).values
123
124
  SmarterCSV.process(@file.path, default_options({:chunk_size => chunk_size, :user_provided_headers => user_provided_headers, :remove_empty_values => true}))
124
125
  end
125
126
 
@@ -6,10 +6,11 @@ module TableImporter
6
6
  @headers
7
7
  end
8
8
 
9
- def get_preview_lines(start_point = 0, end_point = 10)
9
+ def get_preview_lines(start_point = 1, end_point = 10)
10
10
  begin
11
11
  @headers = @mapping.present? && @mapping != false ? convert_headers : @headers
12
- lines = clean_chunks([get_lines(start_point, end_point)], @compulsory_headers)[0][:lines]
12
+ start_point += 1 if @headers_present == true
13
+ lines = clean_chunks([get_lines(start_point, end_point, true)], @compulsory_headers)[0][:lines]
13
14
  if lines.first.nil?
14
15
  get_preview_lines(start_point+10, end_point+10)
15
16
  else
@@ -20,12 +21,13 @@ module TableImporter
20
21
  end
21
22
  end
22
23
 
23
- def get_lines(start, number_of_lines)
24
+ def get_lines(start, number_of_lines, preview_lines = false)
24
25
  @last_row ||= @file.last_row
25
26
  finish = [@last_row, start + number_of_lines].min
26
27
  mapped_lines = []
27
- (start...finish).each do |row_number|
28
- mapped_lines << Hash[@headers.zip(@file.row(row_number + 1))]
28
+ range = preview_lines ? (start..finish) : (start...finish)
29
+ range.each do |row_number|
30
+ mapped_lines << Hash[@headers.zip(@file.row(row_number))]
29
31
  end
30
32
  mapped_lines
31
33
  end
@@ -1,3 +1,3 @@
1
1
  module TableImporter
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
Binary file
@@ -6,7 +6,7 @@ describe TableImporter::Source do
6
6
 
7
7
  context 'when source is a csv file with headers' do
8
8
  before(:each) do
9
- @source = TableImporter::Source.new({:content => File.open([Dir.pwd, "/spec/files/csv/with_headers.csv"].join), :headers_present => true, :user_headers => nil, :type => "csv", :column_separator => "", :record_separator => "", :compulsory_headers => {:email => true}})
9
+ @source = TableImporter::Source.new({:content => File.open([Dir.pwd, "/spec/files/csv/with_headers.csv"].join), :headers_present => true, :user_headers => {"email" => "5"}, :type => "csv", :column_separator => "", :record_separator => "", :compulsory_headers => {:email => true}})
10
10
  end
11
11
 
12
12
  it "has the correct headers" do
@@ -86,7 +86,7 @@ describe TableImporter::Source do
86
86
 
87
87
  context 'when source is a badly encoded file' do
88
88
  it 'can still get the correct chunks' do
89
- source = TableImporter::Source.new({:content => File.open([Dir.pwd, "/spec/files/csv/mexico2013_pressdoc.csv"].join), :headers_present => true, :user_headers => nil, :type => "csv", :column_separator => "", :record_separator => "", :compulsory_headers => {:email => true}})
89
+ source = TableImporter::Source.new({:content => File.open([Dir.pwd, "/spec/files/csv/mexico2013_pressdoc.csv"].join), :headers_present => true, :user_headers => {"email" => "5"}, :type => "csv", :column_separator => "", :record_separator => "", :compulsory_headers => {:email => true}})
90
90
  source.get_chunks.first[:lines].count.should eql(49)
91
91
  end
92
92
  end
@@ -120,7 +120,7 @@ describe TableImporter::Source do
120
120
  context 'when source is badly encoded partway through the file' do
121
121
 
122
122
  before(:each) do
123
- @source = TableImporter::Source.new({:content => File.open([Dir.pwd, "/spec/files/csv/partway.csv"].join), :headers_present => false, :user_headers => nil, :type => "csv", :column_separator => "", :record_separator => "", :compulsory_headers => {:email => true}})
123
+ @source = TableImporter::Source.new({:content => File.open([Dir.pwd, "/spec/files/csv/partway.csv"].join), :headers_present => false, :user_headers => {"email" => "0"}, :type => "csv", :column_separator => "", :record_separator => "", :compulsory_headers => {:email => true}})
124
124
  end
125
125
 
126
126
  it "Gets the first chunk without error" do
@@ -38,6 +38,10 @@ describe TableImporter::Source do
38
38
  @source.get_chunks(1).count.should eql(6)
39
39
  end
40
40
 
41
+ it "gets the correct chunk content" do
42
+ expect(@source.get_chunks[0][:lines].first[:email]).to eql("darrenp@fabrikam.com")
43
+ end
44
+
41
45
  it "has the correct number of chunks" do
42
46
  @source.get_chunks(2).count.should eql(4)
43
47
  end
@@ -78,6 +82,10 @@ describe TableImporter::Source do
78
82
  @source.get_chunks(1).count.should eql(6)
79
83
  end
80
84
 
85
+ it "gets the correct chunk content" do
86
+ expect(@source.get_chunks[0][:lines].first[:email]).to eql("darrenp@fabrikam.com")
87
+ end
88
+
81
89
  it "has the correct number of chunks" do
82
90
  @source.get_chunks(2).count.should eql(4)
83
91
  end
@@ -197,4 +205,38 @@ describe TableImporter::Source do
197
205
  @source = nil
198
206
  end
199
207
  end
208
+
209
+ context "it has only one line" do
210
+ context "when mapping has not been set" do
211
+ before(:each) do
212
+ @source = TableImporter::Source.new({:content => File.open([Dir.pwd, "/spec/files/excel/one_line.xls"].join), :headers_present => "true", :type => "xls", :column_separator => "", :record_separator => "",
213
+ :compulsory_headers => {:email => true}
214
+ })
215
+ end
216
+
217
+ it 'has the correct preview lines' do
218
+ expect(@source.get_preview_lines.first[:Email]).to eql("mailto:john.smith@example.com")
219
+ end
220
+
221
+ after(:each) do
222
+ @source = nil
223
+ end
224
+ end
225
+
226
+ context "when mapping has been set" do
227
+ before(:each) do
228
+ @source = TableImporter::Source.new({content: File.open([Dir.pwd, "/spec/files/excel/one_line.xls"].join), headers_present: "true", type: "xls", column_separator: "", record_separator: "",
229
+ compulsory_headers: {email: true}, user_headers: {"email" => "13"}
230
+ })
231
+ end
232
+
233
+ it 'has the correct chunks' do
234
+ expect(@source.get_chunks[0][:lines].first[:email]).to eql("mailto:john.smith@example.com")
235
+ end
236
+
237
+ after(:each) do
238
+ @source = nil
239
+ end
240
+ end
241
+ end
200
242
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_importer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Dowse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-20 00:00:00.000000000 Z
11
+ date: 2014-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spreadsheet
@@ -215,6 +215,7 @@ files:
215
215
  - spec/files/excel/empty_lines.xlsx
216
216
  - spec/files/excel/empty_lines_at_start.xlsx
217
217
  - spec/files/excel/no_content.xlsx
218
+ - spec/files/excel/one_line.xls
218
219
  - spec/files/excel/premapped_1.xls
219
220
  - spec/files/excel/premapped_2.xls
220
221
  - spec/files/excel/with_headers.xls
@@ -265,6 +266,7 @@ test_files:
265
266
  - spec/files/excel/empty_lines.xlsx
266
267
  - spec/files/excel/empty_lines_at_start.xlsx
267
268
  - spec/files/excel/no_content.xlsx
269
+ - spec/files/excel/one_line.xls
268
270
  - spec/files/excel/premapped_1.xls
269
271
  - spec/files/excel/premapped_2.xls
270
272
  - spec/files/excel/with_headers.xls