table_importer 0.0.10 → 0.1.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/lib/table_importer/google.rb +88 -0
- data/lib/table_importer/source.rb +3 -0
- data/lib/table_importer/version.rb +1 -1
- data/spec/sources/google_spec.rb +10 -0
- data/table_importer.gemspec +1 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a911ef1e13dbe05d4d9eb22f6c43037368e58ef1
|
4
|
+
data.tar.gz: 2eeef08c316fcb46b3808e38f4db56fdbbedd53c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 139b56f04eaaee52f05b95d5d448a701c761dc6f120e9b9038cf33887fac2a3636db21d95ba8de131de74951149891849925b9d2a94dd955930c5665b85e4cd8
|
7
|
+
data.tar.gz: d1d12ab4f4c33c808c9b64d6dd1eb4d28cf90761fd808cdaae4d1e4932444ae0acdf731f7170ba5c2a29dc791574f6f78dfd5db5207b2d0c9c83145f1573acc2
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module TableImporter
|
2
|
+
|
3
|
+
class Google < Source
|
4
|
+
|
5
|
+
def initialize(data)
|
6
|
+
begin
|
7
|
+
@headers_present = data[:headers_present]
|
8
|
+
@file = get_file(data[:content].split(", ")[1], data[:content].split(", ")[0])
|
9
|
+
@compulsory_headers = data[:compulsory_headers]
|
10
|
+
@delete_empty_columns = false #(File.size(@file_path) < 100000)
|
11
|
+
@mapping = !data[:user_headers].blank? ? data[:user_headers] : data[:headers]
|
12
|
+
raise TableImporter::EmptyFileImportError.new if !@file.first_row
|
13
|
+
if !data[:headers].nil?
|
14
|
+
@headers = data[:headers]
|
15
|
+
else
|
16
|
+
@headers = @headers_present ? @file.row(1).map.with_index { |header, index| header.present? ? header.to_sym : "column_#{index}"} : default_headers
|
17
|
+
end
|
18
|
+
rescue NoMethodError
|
19
|
+
raise TableImporter::HeaderMismatchError.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_headers
|
24
|
+
@headers
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_file(file_key, access_token)
|
28
|
+
begin
|
29
|
+
Roo::Google.new(file_key, {:access_token => access_token})
|
30
|
+
rescue TypeError
|
31
|
+
raise TableImporter::IncorrectFileError.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_type
|
36
|
+
"google"
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_preview_lines(start_point = 0, end_point = 10)
|
40
|
+
begin
|
41
|
+
@headers = @mapping.present? && @mapping != false ? convert_headers : @headers
|
42
|
+
lines = clean_chunks([get_lines(start_point, end_point)], @compulsory_headers)[0][:lines]
|
43
|
+
if lines.first.nil?
|
44
|
+
get_preview_lines(start_point+10, end_point+10)
|
45
|
+
else
|
46
|
+
lines[0..8]
|
47
|
+
end
|
48
|
+
rescue SystemStackError, NoMethodError
|
49
|
+
raise TableImporter::EmptyFileImportError.new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_lines(start, number_of_lines)
|
54
|
+
@last_row ||= @file.last_row
|
55
|
+
finish = [@last_row, start + number_of_lines].min
|
56
|
+
mapped_lines = []
|
57
|
+
(start...finish).each do |row_number|
|
58
|
+
mapped_lines << Hash[@headers.zip(@file.row(row_number))]
|
59
|
+
end
|
60
|
+
mapped_lines
|
61
|
+
end
|
62
|
+
|
63
|
+
def convert_headers
|
64
|
+
new_headers = @headers_present ? @file.row(1) : default_headers
|
65
|
+
new_headers = default_headers(new_headers.count)
|
66
|
+
return new_headers unless @mapping
|
67
|
+
@mapping.each do |key, value|
|
68
|
+
if value.to_i.to_s == value.to_s
|
69
|
+
new_headers[value.to_i] = key.to_sym
|
70
|
+
end
|
71
|
+
end
|
72
|
+
new_headers
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_chunks(chunk_size)
|
76
|
+
@headers = convert_headers
|
77
|
+
@last_row ||= @file.last_row
|
78
|
+
chunks = []
|
79
|
+
start_point = @headers_present ? 2 : 1
|
80
|
+
while chunks.count <= @last_row/chunk_size
|
81
|
+
chunks << get_lines(start_point, chunk_size)
|
82
|
+
start_point += chunk_size
|
83
|
+
end
|
84
|
+
chunks.last << Hash[@headers.zip(@file.row(@last_row))]
|
85
|
+
clean_chunks(chunks, @compulsory_headers)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -12,6 +12,8 @@ module TableImporter
|
|
12
12
|
@source = CSV.new(data)
|
13
13
|
when 'xls', 'xlsx'
|
14
14
|
@source = Excel.new(data)
|
15
|
+
when 'google'
|
16
|
+
@source = Google.new(data)
|
15
17
|
else
|
16
18
|
raise TableImporter::IncorrectFileError.new
|
17
19
|
end
|
@@ -168,3 +170,4 @@ end
|
|
168
170
|
require 'table_importer/csv'
|
169
171
|
require 'table_importer/copy_and_paste'
|
170
172
|
require 'table_importer/excel'
|
173
|
+
require 'table_importer/google'
|
data/table_importer.gemspec
CHANGED
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.0
|
4
|
+
version: 0.1.0
|
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-09-
|
11
|
+
date: 2014-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spreadsheet
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: google_drive
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: smarter_csv
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,6 +172,7 @@ files:
|
|
158
172
|
- lib/table_importer/csv.rb
|
159
173
|
- lib/table_importer/excel.rb
|
160
174
|
- lib/table_importer/exceptions.rb
|
175
|
+
- lib/table_importer/google.rb
|
161
176
|
- lib/table_importer/source.rb
|
162
177
|
- lib/table_importer/version.rb
|
163
178
|
- spec/files/csv/edge_cases.csv
|
@@ -176,6 +191,7 @@ files:
|
|
176
191
|
- spec/sources/copy_and_paste_spec.rb
|
177
192
|
- spec/sources/csv_spec.rb
|
178
193
|
- spec/sources/excel_spec.rb
|
194
|
+
- spec/sources/google_spec.rb
|
179
195
|
- spec/spec_helper.rb
|
180
196
|
- table_importer.gemspec
|
181
197
|
- tasks/rspec.rake
|
@@ -221,4 +237,5 @@ test_files:
|
|
221
237
|
- spec/sources/copy_and_paste_spec.rb
|
222
238
|
- spec/sources/csv_spec.rb
|
223
239
|
- spec/sources/excel_spec.rb
|
240
|
+
- spec/sources/google_spec.rb
|
224
241
|
- spec/spec_helper.rb
|