export_to_spreadsheet 0.1.2 → 0.2.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.
data/init.rb DELETED
@@ -1,3 +0,0 @@
1
- require 'export_to_spreadsheet'
2
- require 'spreadsheet_to_array'
3
- require 'sales_clic_exporter'
data/install.rb DELETED
@@ -1,2 +0,0 @@
1
- # Lecture du fichier README.rdoc
2
- puts IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
data/test/excel_test.rb DELETED
@@ -1,308 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ExcelTest < ActiveSupport::TestCase
4
- Sample_string = 'Test chaîne'
5
-
6
- def setup
7
- @obj = create_obj
8
- #The export initialization process is done in two steps because of rjb which takes a lot of memory :
9
- #First we set some variables with the private method prepare_export. We use send to be able to clal this method from outside only in the tests
10
- @excel = @obj.send(:prepare_export, :excel)
11
- #Then we fork the process when possible and finally load rjb
12
- #with the method finish_initialize
13
- @excel.finish_initialize
14
- end
15
-
16
- def teardown
17
- if File.file?(@excel.path)
18
- assert File.unlink(@excel.path)
19
- end
20
- end
21
-
22
- ###################################
23
- # Tests sur les arguments
24
- ###################################
25
-
26
- def test_write_method_without_block_is_ignored
27
- assert_equal @excel.write, @excel
28
- end
29
-
30
- def test_h_table_with_and_without_options_and_splat_arguments
31
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'])
32
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
33
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], 'toto', 'tata', 'tutu')
34
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], 'toto', 'tata', 'tutu', {:border_bottom => true})
35
- end
36
-
37
- def test_v_table_with_and_without_splat_arguments
38
- assert_method_returns_self('v_table', %w{toto tata tutu}, 'colone 1', 'colone 2', 'colone 3', 'colone 4')
39
- assert_method_returns_self('v_table', %w{toto tata tutu}, ['colone 1', 'colone 2', 'colone 3', 'colone 4'])
40
- end
41
-
42
- def test_line_with_and_without_splat_arguments
43
- assert_method_returns_self('line', 'colone 1', 'colone 2', 'colone 3', 'colone 4')
44
- assert_method_returns_self('line', ['colone 1', 'colone 2', 'colone 3', 'colone 4'])
45
- assert_method_returns_self('line', 'colone 1')
46
- end
47
-
48
- def test_line_without_arguments_throws_exception
49
- assert_raise ArgumentError do
50
- @excel.line
51
- end
52
- end
53
-
54
- def test_h_table_without_values_as_an_array_throws_exception
55
- assert_raise ArgumentError do
56
- @excel.h_table('test', 'test')
57
- end
58
- end
59
-
60
- def test_newline_can_be_called_without_arguments
61
- assert_nothing_raised do
62
- @excel.newline
63
- end
64
- end
65
-
66
- ######################################################################
67
- # On teste les retours pour vérifier que les méthodes sont bien
68
- # chainables
69
- ######################################################################
70
-
71
- def test_title_1_returns_self
72
- assert_method_returns_self('title_1', Sample_string)
73
- end
74
-
75
- def test_title_2_returns_self
76
- assert_method_returns_self('title_2', Sample_string)
77
- end
78
-
79
- def test_title_3_returns_self
80
- assert_method_returns_self('title_3', Sample_string)
81
- end
82
-
83
- def test_h_table_returns_self
84
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
85
- end
86
-
87
- def test_v_table_returns_self
88
- assert_method_returns_self('v_table', %w{toto tata tutu}, 'colone 1', 'colone 2', 'colone 3', 'colone 4')
89
- end
90
-
91
- def test_line_returns_self
92
- assert_method_returns_self('line', 'colone 1', 'colone 2', 'colone 3', 'colone 4')
93
- end
94
-
95
- def test_newline_returns_self
96
- assert_method_returns_self('newline')
97
- end
98
-
99
- def test_freezepane_returns_self
100
- assert_method_returns_self('freezepane')
101
- end
102
-
103
- def test_write_returns_self
104
- assert_method_returns_self('write')
105
- end
106
-
107
- ######################################################################
108
- # On teste sur toutes les méthodes rajoutent bien une ligne
109
- ######################################################################
110
-
111
- def test_title_1_increments_current_row_index
112
- assert_method_increments_current_row_index(1, 'title_1', Sample_string)
113
- end
114
-
115
- def test_title_2_increments_current_row_index
116
- assert_method_increments_current_row_index(1, 'title_2', Sample_string)
117
- end
118
-
119
- def test_title_3_increments_current_row_index
120
- assert_method_increments_current_row_index(1, 'title_3', Sample_string)
121
- end
122
-
123
- def test_h_table_increments_current_row_index
124
- headers = ['toto', 'tata', 'tutu']
125
- lines_added = headers.map(&:size).max + 1 # + 1 pour la ligne vide de séparation
126
- assert_method_increments_current_row_index(lines_added, 'h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
127
- end
128
-
129
- def test_v_table_increments_current_row_index
130
- headers = %w{toto tata tutu}
131
- values = ['colone 1', 'colone 2', 'colone 3', 'colone 4']
132
- lines_added = [values.size, headers.size].max
133
- assert_method_increments_current_row_index(lines_added, 'v_table', headers, *values)
134
- end
135
-
136
- def test_line_increments_current_row_index
137
- assert_method_increments_current_row_index(1, 'line', 'colone 1', 'colone 2', 'colone 3', 'colone 4')
138
- end
139
-
140
- def test_newline_increments_current_row_index
141
- assert_method_increments_current_row_index(1, 'newline')
142
- end
143
-
144
- def test_freezepane_does_not_increment_current_row_index
145
- row_index = @excel.current_row_index
146
- index_expected = row_index # Pas de changement
147
-
148
- @excel.freezepane
149
-
150
- assert_equal index_expected, @excel.current_row_index
151
- end
152
-
153
- ##########################################
154
- # Tests sur la sauvegarde
155
- ##########################################
156
-
157
- def test_save
158
- @excel.line("ligne de test")
159
- @excel.save
160
- assert File.file?(@excel.path)
161
- assert File.unlink(@excel.path) # Suppression du fichier
162
- end
163
-
164
- ##########################################
165
- # Test de lecture des données sur le fichier Excel
166
- ##########################################
167
-
168
- def test_title_1_writes_correct_values
169
- text = 'Titre looooooooooong'
170
- # Valeur attendue
171
- values = [[text]]
172
- assert_write_correct_value_with_function(values, 'title_1', text)
173
- end
174
-
175
- def test_title_2_writes_correct_values
176
- text = 'Titre looooooooooong'
177
- values = [[text]]
178
- assert_write_correct_value_with_function(values, 'title_2', text)
179
- end
180
-
181
- def test_title_3_writes_correct_values
182
- text = 'Titre looooooooooong'
183
- # 'nil' vient du fait qu'un titre de niveau 3 commence sur la seconde colone
184
- values = [[nil, text]]
185
- assert_write_correct_value_with_function(values, 'title_3', text)
186
- end
187
-
188
- def test_line_writes_correct_values
189
- values = [[nil, 'Valeurs', 'sur', 'une', 'ligne']]
190
- assert_write_correct_value_with_function(values, 'line', *['Valeurs', 'sur', 'une', 'ligne'])
191
- end
192
-
193
- def test_h_table_writes_correct_values
194
- # Valeurs attendues
195
- values = [
196
- [nil, 'colone 1', 'colone 2', 'colone 3'],
197
- [nil],
198
- [nil, 'a', 'b', 'c'],
199
- [nil, nil, nil, 'd'],
200
- [nil, 'e'],
201
- [nil, nil, 'f']
202
- ]
203
- # Ce que j'écris dans le fichier
204
- headers = ['colone 1', 'colone 2', 'colone 3']
205
- write = [ ['a', 'b', 'c'], [nil, nil, 'd'], ['e'], [nil, 'f', nil] ]
206
- assert_write_correct_value_with_function(values, 'h_table', write, headers, {:border_bottom => true})
207
- end
208
-
209
- # Il n'y a pas de test où h_table est appelé avec :border_bottom => false
210
- # car la ligne de démarquation est ajoutée dans tous les cas
211
-
212
- def test_v_table_writes_correct_values
213
- values = [
214
- [nil, 'colone 1', 'valeur 1'],
215
- [nil, 'colone 2', 'valeur 2'],
216
- [nil, 'colone 3' ],
217
- [nil, nil, 'valeur 3'],
218
- [nil, 'colone 4', 'valeur 4']
219
- ]
220
- headers = ['colone 1', 'colone 2', 'colone 3', nil, 'colone 4']
221
- write = ['valeur 1', 'valeur 2', nil, 'valeur 3', 'valeur 4']
222
- assert_write_correct_value_with_function(values, 'v_table', write, headers)
223
- end
224
-
225
- def test_complete_write_document
226
- @excel.title_1('Titre 1')
227
- @excel.title_2('Titre 2')
228
- @excel.title_3('Titre 3')
229
- @excel.line("Ligne de test")
230
- @excel.h_table([%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
231
- @excel.v_table(%w{toto tata tutu}, ['colone 1', 'colone 2', 'colone 3', 'colone 4'])
232
- @excel.newline
233
- @excel.line("Autre ligne de test")
234
- @excel.save
235
-
236
- assert File.file?(@excel.path)
237
-
238
- expected_values = []
239
- # Les 'nil' sont dus au fait que la première colone est vide
240
- expected_values << ["Titre 1"]
241
- expected_values << ["Titre 2"]
242
- expected_values << [nil, "Titre 3"]
243
- expected_values << [nil, "Ligne de test"]
244
- expected_values << [nil, 'toto', 'tata', 'tutu']
245
- expected_values << [nil]
246
- expected_values << [nil, 'a', 'b', 'c']
247
- expected_values << [nil, 'd', 'e', 'f']
248
- expected_values << [nil, 'g', 'h']
249
- expected_values << [nil, 'colone 1', 'toto']
250
- expected_values << [nil, 'colone 2', 'tata']
251
- expected_values << [nil, 'colone 3', 'tutu']
252
- expected_values << [nil, 'colone 4']
253
- expected_values << [nil]
254
- expected_values << [nil, "Autre ligne de test"]
255
-
256
- assert_equal expected_values, array_from_excel(@excel.path)
257
-
258
- assert File.unlink(@excel.path)
259
-
260
- assert ! File.file?(@excel.path)
261
- end
262
-
263
-
264
- ##########################################
265
- # Méthodes privées définies pour les tests
266
- ##########################################
267
-
268
- private
269
-
270
- def assert_method_returns_self(method, *args)
271
- return_class = @excel.send(method, *args).class
272
-
273
- assert_equal @excel.class, return_class
274
- end
275
-
276
- def assert_method_increments_current_row_index(number_of_lines_added, method, *args)
277
- row_index = @excel.current_row_index
278
- index_expected = row_index + number_of_lines_added
279
-
280
- @excel.send(method, *args)
281
-
282
- assert_equal index_expected, @excel.current_row_index
283
- end
284
-
285
- def assert_write_correct_value_with_function(expected_values, method, *args)
286
- @excel.send(method, *args)
287
- @excel.save
288
-
289
- assert File.file?(@excel.path)
290
-
291
- assert_equal expected_values, array_from_excel(@excel.path)
292
-
293
- assert File.unlink(@excel.path)
294
-
295
- assert ! File.file?(@excel.path)
296
- end
297
-
298
- def upload_excel_file(filepath)
299
- bytes = open(filepath,'rb'){|io| io.read}
300
- excel = SpreadsheetToArray::FromExcel.new(bytes)
301
- end
302
-
303
- def array_from_excel(filepath)
304
- excel = upload_excel_file(filepath)
305
- excel.values
306
- end
307
-
308
- end
@@ -1,337 +0,0 @@
1
- require 'test_helper'
2
-
3
- class GoogleSpreadsheetsTest < ActiveSupport::TestCase
4
-
5
- Sample_string = 'Test chaîne'
6
-
7
- if ! File.file?(ENV["HOME"] + '/.ruby_google_spreadsheet.token')
8
- puts "Pour la connexion à Google vous devez indiquer votre email de connexion et votre mot de passe."
9
- puts "Les tokens générés sont stockés dans le fichier ~/.ruby_google_spreadsheet.token que vous pouvez supprimer."
10
- end
11
-
12
- def setup
13
- @obj = create_obj
14
- @google = SalesClicExporter::Document::GoogleSpreadsheets.new @obj.name
15
- end
16
-
17
- def teardown
18
- # Sauvegarde du document
19
- @google.save
20
- # Suppression des feuilles crées
21
- @google.permanent_destroy
22
- end
23
-
24
- ###################################
25
- # Tests sur les arguments
26
- ###################################
27
-
28
- def test_line_with_and_without_splat_arguments
29
- assert_method_returns_self('line', 'colone 1', 'colone 2', 'colone 3', 'colone 4')
30
- assert_method_returns_self('line', ['colone 1', 'colone 2', 'colone 3', 'colone 4'])
31
- assert_method_returns_self('line', 'colone 1')
32
- end
33
-
34
- def test_line_without_arguments_throws_exception
35
- assert_raise ArgumentError do
36
- @google.line
37
- end
38
- end
39
-
40
- def test_h_table_without_values_as_an_array_throws_exception
41
- assert_raise ArgumentError do
42
- @google.h_table('test', 'test')
43
- end
44
- end
45
-
46
- def test_h_table_with_and_without_options_and_splat_arguments
47
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'])
48
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
49
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], 'toto', 'tata', 'tutu')
50
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], 'toto', 'tata', 'tutu', {:border_bottom => true})
51
- end
52
-
53
- def test_v_table_with_and_without_splat_arguments
54
- assert_method_returns_self('v_table', %w{toto tata tutu}, 'colone 1', 'colone 2', 'colone 3', 'colone 4')
55
- assert_method_returns_self('v_table', %w{toto tata tutu}, ['colone 1', 'colone 2', 'colone 3', 'colone 4'])
56
- end
57
-
58
- def test_newline_can_be_called_without_arguments
59
- assert_nothing_raised do
60
- @google.newline
61
- end
62
- end
63
-
64
- def test_write_method_without_block_is_ignored
65
- assert_equal @google.write, @google
66
- end
67
-
68
-
69
- ######################################################################
70
- # On teste les retours pour vérifier que les méthodes sont bien
71
- # chainables
72
- ######################################################################
73
-
74
- def test_line_returns_self
75
- assert_method_returns_self('line', 'colone 1', 'colone 2', 'colone 3', 'colone 4')
76
- end
77
-
78
- def test_h_table_returns_self
79
- assert_method_returns_self('h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
80
- end
81
-
82
- def test_v_table_returns_self
83
- assert_method_returns_self('v_table', %w{toto tata tutu}, 'colone 1', 'colone 2', 'colone 3', 'colone 4')
84
- end
85
-
86
- def test_newline_returns_self
87
- assert_method_returns_self('newline')
88
- end
89
-
90
- def test_freezepane_returns_self
91
- assert_method_returns_self('freezepane')
92
- end
93
-
94
- def test_title_1_returns_self
95
- assert_method_returns_self('title_1', Sample_string)
96
- end
97
-
98
- def test_title_2_returns_self
99
- assert_method_returns_self('title_2', Sample_string)
100
- end
101
-
102
- def test_title_3_returns_self
103
- assert_method_returns_self('title_3', Sample_string)
104
- end
105
-
106
- ######################################################################
107
- # On teste sur toutes les méthodes rajoutent bien une ligne
108
- ######################################################################
109
-
110
- def test_h_table_increments_current_row_index
111
- headers = ['toto', 'tata', 'tutu']
112
- lines_added = headers.map(&:size).max + 1 # + 1 pour la ligne vide de séparation
113
- assert_method_increments_current_row_index(lines_added, 'h_table', [%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
114
- end
115
-
116
- def test_v_table_increments_current_row_index
117
- headers = %w{toto tata tutu}
118
- values = ['colone 1', 'colone 2', 'colone 3', 'colone 4']
119
- lines_added = [values.size, headers.size].max
120
- assert_method_increments_current_row_index(lines_added, 'v_table', headers, *values)
121
- end
122
-
123
- def test_line_increments_current_row_index
124
- assert_method_increments_current_row_index(1, 'line', 'colone 1', 'colone 2', 'colone 3', 'colone 4')
125
- end
126
-
127
- def test_newline_increments_current_row_index
128
- assert_method_increments_current_row_index(1, 'newline')
129
- end
130
-
131
- # Freezepane ne DOIT pas incrémenter le nombre de lignes
132
- def test_freezepane_does_not_increment_current_row_index
133
- row_index = @google.current_row_index
134
- index_expected = row_index # Le nombre de lignes ne doit PAS changer
135
-
136
- @google.freezepane
137
-
138
- assert_equal index_expected, @google.current_row_index
139
- end
140
-
141
- #########################################################
142
- # Test de lecture des données sur le document spreadsheet
143
- #########################################################
144
-
145
- def test_title_1_writes_correct_values
146
- text = 'Titre looooooooooong'
147
- # Valeur attendue
148
- values = [ expected_title(text) ]
149
- assert_write_correct_value_with_function(values, 'title_1', text)
150
- end
151
-
152
- def test_title_2_writes_correct_values
153
- text = 'Titre looooooooooong'
154
- values = [ expected_title(text) ]
155
- assert_write_correct_value_with_function(values, 'title_2', text)
156
- end
157
-
158
- def test_title_3_writes_correct_values
159
- text = 'Titre looooooooooong'
160
- values = [ expected_subtitle(text) ]
161
- assert_write_correct_value_with_function(values, 'title_3', text)
162
- end
163
-
164
- def test_line_writes_correct_values
165
- # Valeurs attendues
166
- values = [ expected_text('Valeurs', 'sur', 'une', 'ligne') ]
167
- assert_write_correct_value_with_function(values, 'line', *['Valeurs', 'sur', 'une', 'ligne'])
168
- end
169
-
170
- def test_h_table_writes_correct_values
171
- # Valeurs attendues
172
- values = []
173
- values += expected_table([
174
- ['colone 1', 'colone 2', 'colone 3'],
175
- [nil],
176
- ['a', 'b', 'c'],
177
- [nil, nil, 'd'],
178
- ['e'],
179
- [nil, 'f']
180
- ])
181
- # Ce que j'écris dans le fichier
182
- headers = ['colone 1', 'colone 2', 'colone 3']
183
- write = [ ['a', 'b', 'c'], [nil, nil, 'd'], ['e'], [nil, 'f', nil] ]
184
- assert_write_correct_value_with_function(values, 'h_table', write, headers, {:border_bottom => true})
185
- end
186
-
187
- # Il n'y a pas de test où h_table est appelé avec :border_bottom => false
188
- # car la ligne de démarquation est ajoutée dans tous les cas
189
-
190
- def test_v_table_writes_correct_values
191
- values = []
192
- values += expected_table([
193
- ['colone 1', 'valeur 1'],
194
- ['colone 2', 'valeur 2'],
195
- ['colone 3' ],
196
- [ nil, 'valeur 3'],
197
- ['colone 4', 'valeur 4']])
198
- headers = ['colone 1', 'colone 2', 'colone 3', nil, 'colone 4']
199
- write = ['valeur 1', 'valeur 2', nil, 'valeur 3', 'valeur 4']
200
- assert_write_correct_value_with_function(values, 'v_table', write, headers)
201
- end
202
-
203
- def test_complete_write_document
204
- @google.title_1('Titre 1')
205
- @google.title_2('Titre 2')
206
- @google.title_3('Titre 3')
207
- @google.line("Ligne de test")
208
- @google.h_table([%w{a b c}, %w{d e f}, %w{g h}], ['toto', 'tata', 'tutu'], {:border_bottom => true})
209
- @google.v_table(%w{toto tata tutu}, ['colone 1', 'colone 2', 'colone 3', 'colone 4'])
210
- @google.newline
211
- @google.line("Autre ligne de test")
212
- @google.save
213
-
214
- expected_values = []
215
- expected_values << expected_title('Titre 1')
216
- expected_values << expected_title('Titre 2')
217
- expected_values << expected_subtitle("Titre 3")
218
- expected_values << expected_text("Ligne de test")
219
- expected_values << expected_text('toto', 'tata', 'tutu')
220
- expected_values << [nil]
221
- expected_values += expected_table([['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']])
222
- expected_values += expected_table([['colone 1', 'toto'], ['colone 2', 'tata'], ['colone 3', 'tutu'], ['colone 4']])
223
- expected_values << [nil]
224
- expected_values << expected_text("Autre ligne de test")
225
-
226
- assert_equal expected_values, array_from_google_spreadsheet
227
- end
228
-
229
- private
230
-
231
- def assert_method_returns_self(method, *args)
232
- return_class = @google.send(method, *args).class
233
-
234
- assert_equal @google.class, return_class
235
- end
236
-
237
- def assert_method_increments_current_row_index(number_of_lines_added, method, *args)
238
- row_index = @google.current_row_index
239
- index_expected = row_index + number_of_lines_added
240
-
241
- @google.send(method, *args)
242
-
243
- assert_equal index_expected, @google.current_row_index
244
- end
245
-
246
- def assert_write_correct_value_with_function(expected_values, method, *args)
247
- @google.send(method, *args)
248
-
249
- @google.save
250
-
251
- assert_equal expected_values, array_from_google_spreadsheet
252
- end
253
-
254
- def array_from_google_spreadsheet
255
- # On travaille sur la première spreadsheet enregistrée, et sur sa
256
- # première worksheet
257
- sheet = @google.google_doc.spreadsheets.first.worksheets.first
258
-
259
- values = []
260
- for row_index in 1..sheet.max_rows
261
- row_values = []
262
- for col_index in 1..sheet.max_cols
263
- cell = sheet[row_index, col_index]
264
- row_values << (cell.blank? ? nil : cell)
265
- end
266
- # Suppression des éléments nil après le dernier élément non nil
267
- values << remove_nil_elements_from_end_of_array(row_values)
268
- end
269
-
270
- # On supprime les [nil] en double en fin de tableau
271
- remove_nil_arrays_from_array(values)
272
- end
273
-
274
- # Soit un tableau qui comprend des valeurs nil et non-nil. La fonction retire
275
- # les éléments nil "en trop" depuis la fin du tableau (en s'arrêtant au premier élément
276
- # non-nil depuis la fin du tableau)
277
- def remove_nil_elements_from_end_of_array(ary)
278
- return [nil] if ary.compact.size == 0
279
-
280
- reverse_ary = ary.reverse
281
- last_non_nil_element = reverse_ary.compact.first
282
- last_non_nil_element_index = reverse_ary.index(last_non_nil_element)
283
- non_nil_elements = reverse_ary.slice(last_non_nil_element_index..reverse_ary.size)
284
- non_nil_elements.reverse
285
- end
286
-
287
- # Soit un tableau contenant des tableaux contenant des valeurs (nil et non-nil) ou seulement nil.
288
- # La fonction retire les éléments [nil] "en trop" depuis la fin du tableau (en s'arrêtant au premier
289
- # élément diférent de [nil] depuis la fin du tableau)
290
- def remove_nil_arrays_from_array(ary)
291
- return nil if ary.compact.size == 0
292
-
293
- reverse_ary = ary.reverse
294
- # On cherche le dernier élément qui n'est pas égal à [nil]
295
- # donc on prend PAS ceux qui ne contiennent qu'un élément et dont cet élément serait nil
296
- # et on garde le dernier élément
297
- last_non_nil_element = ary.select{ |v| v.size != 1 || ! v.first.nil? }.last
298
- last_non_nil_element_index = reverse_ary.index(last_non_nil_element)
299
- non_nil_elements = reverse_ary.slice(last_non_nil_element_index..reverse_ary.size)
300
- non_nil_elements.reverse
301
- end
302
-
303
- # When a lines contains a title, it should be written on the first cell
304
- def expected_title(title)
305
- title.to_a
306
- end
307
-
308
-
309
- # When a lines contains a subtitle title_3), it should be written on the default cell
310
- def expected_subtitle(title)
311
- # Returns an Array with nil cells merged with an Array containing the title
312
- array_with_nil_cells + title.to_a
313
- end
314
-
315
- # When a lines contains a text, it should be written from the second cell
316
- def expected_text(*text)
317
- array_with_nil_cells + text
318
- end
319
-
320
- # When many lines contain a table, it should be written from the second column
321
- def expected_table(ary)
322
- ary.map do |line|
323
- # An empty line should just have nil once
324
- line.size == 1 && line.first.nil? ? line : (array_with_nil_cells + line)
325
- end
326
- end
327
-
328
- def array_with_nil_cells
329
- Array.new(cell_index)
330
- end
331
-
332
- def cell_index
333
- # The cell index in spreadsheets starts from 1, and Ruby starts from 0
334
- SalesClicExporter::Document::GoogleSpreadsheets::Default_cell_index - 1
335
- end
336
-
337
- end
@@ -1 +0,0 @@
1
-
Binary file
@@ -1,30 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SpreadsheetToArrayTest < ActiveSupport::TestCase
4
-
5
- def test_values_are_read_correctly
6
- assert_nothing_raised do
7
-
8
- array = array_from_excel('valid_excel_import.xls')
9
-
10
- first_line_values = ['Objectif', 5936.535, 7730.663, 9524.791 , 11318.919, 13113.047, 14907.175, 16701.303, 18495.431]
11
- second_line_values = ['Réalisé', 4635.394, 9695.558, 14755.722, 19815.886, 24876.050, 29936.214, 34996.378, 40056.542]
12
-
13
-
14
- excel_first_line_values = array[2]
15
-
16
- excel_sec_line_values = array[3]
17
-
18
- # Les comparaisons sont faites en string pour éviter les problèmes de précision des flottants
19
- assert_equal first_line_values.map(&:to_s) , excel_first_line_values.map(&:to_s)
20
- assert_equal second_line_values.map(&:to_s), excel_sec_line_values.map(&:to_s)
21
- end
22
- end
23
-
24
- def test_exception_is_thrown_when_byte_array_entry_is_not_valid
25
- assert_raise RuntimeError do
26
- array_from_excel('invalid_file_format.txt')
27
- end
28
- end
29
-
30
- end