spreadsheet_architect 4.2.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/README.md +10 -14
- data/lib/spreadsheet_architect/class_methods/ods.rb +18 -8
- data/lib/spreadsheet_architect/class_methods/xlsx.rb +76 -32
- data/lib/spreadsheet_architect/exceptions.rb +30 -13
- data/lib/spreadsheet_architect/utils/ods.rb +66 -0
- data/lib/spreadsheet_architect/utils/xlsx.rb +29 -8
- data/lib/spreadsheet_architect/utils.rb +13 -38
- data/lib/spreadsheet_architect/version.rb +1 -1
- data/lib/spreadsheet_architect.rb +3 -2
- data/test/dummy_app/app/controllers/spreadsheets_controller.rb +1 -1
- data/test/dummy_app/config/application.rb +4 -12
- data/test/dummy_app/config/routes.rb +1 -1
- data/test/dummy_app/db/test.sqlite3 +0 -0
- data/test/dummy_app/log/test.log +79842 -63691
- data/test/dummy_app/tmp/2.0.1/integration/alt_xlsx.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/integration/csv.csv +6 -0
- data/test/dummy_app/tmp/2.0.1/integration/ods.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/integration/xlsx.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/kitchen_sink.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/kitchen_sink.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/data.csv +3 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/data.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/empty.csv +1 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/empty.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/instances.csv +6 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/instances.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/data.csv +3 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/data.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/data.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/empty.csv +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/empty.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/empty.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/instances.csv +6 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/instances.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/instances.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/data.csv +3 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/data.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/data.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/empty.csv +1 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/empty.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/empty.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/instances.csv +6 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/instances.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/CustomPost/instances.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/data.csv +3 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/data.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/empty.csv +1 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/empty.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/instances.csv +6 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/instances.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/data.csv +3 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/data.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/empty.csv +1 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/empty.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/instances.csv +6 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/instances.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/data.csv +3 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/data.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/data.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/empty.csv +0 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/empty.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/empty.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/instances.csv +6 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/instances.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/models/Post/instances.xlsx +0 -0
- data/test/dummy_app/tmp/2.0.1/multi_sheet.ods +0 -0
- data/test/dummy_app/tmp/2.0.1/multi_sheet.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/integration/alt_xlsx.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/integration/csv.csv +5 -5
- data/test/dummy_app/tmp/3.0.0.pre/integration/ods.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/integration/xlsx.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/kitchen_sink.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/kitchen_sink.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/data.csv +1 -1
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/data.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/empty.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/instances.csv +5 -5
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/instances.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/data.csv +1 -1
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/data.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/data.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/empty.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/empty.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/instances.csv +5 -5
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/instances.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/instances.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/data.csv +1 -1
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/data.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/data.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/empty.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/empty.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/instances.csv +5 -5
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/instances.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/instances.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/data.csv +1 -1
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/data.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/empty.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/instances.csv +5 -5
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/instances.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/data.csv +1 -1
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/data.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/empty.csv +0 -1
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/empty.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/instances.csv +5 -5
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/instances.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/data.csv +1 -1
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/data.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/data.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/empty.csv +1 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/empty.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/empty.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/instances.csv +5 -5
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/instances.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/models/Post/instances.xlsx +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/multi_sheet.ods +0 -0
- data/test/dummy_app/tmp/3.0.0.pre/multi_sheet.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/integration/alt_xlsx.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/integration/csv.csv +6 -0
- data/test/dummy_app/tmp/axlsx-master/integration/ods.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/integration/xlsx.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/kitchen_sink.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/kitchen_sink.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/data.csv +4 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/data.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/empty.csv +1 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/empty.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/instances.csv +6 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/instances.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/data.csv +4 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/data.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/data.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/empty.csv +1 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/empty.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/empty.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/instances.csv +6 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/instances.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/instances.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/data.csv +4 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/data.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/data.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/empty.csv +1 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/empty.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/empty.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/instances.csv +6 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/instances.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/CustomPost/instances.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/data.csv +4 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/data.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/empty.csv +1 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/empty.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/instances.csv +6 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/instances.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/data.csv +4 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/data.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/data.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/empty.csv +1 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/empty.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/empty.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/instances.csv +6 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/instances.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/instances.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/data.csv +4 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/data.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/data.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/empty.csv +1 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/empty.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/empty.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/instances.csv +6 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/instances.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/models/Post/instances.xlsx +0 -0
- data/test/dummy_app/tmp/axlsx-master/multi_sheet.ods +0 -0
- data/test/dummy_app/tmp/axlsx-master/multi_sheet.xlsx +0 -0
- data/test/integration/application_test.rb +8 -16
- data/test/models/all_models_test.rb +15 -19
- data/test/test_helper.rb +38 -9
- data/test/unit/ods/general_test.rb +121 -0
- data/test/unit/{formats_test.rb → rails/formats_test.rb} +1 -1
- data/test/unit/{exceptions_test.rb → spreadsheet_architect/exceptions_test.rb} +19 -15
- data/test/unit/{general_test.rb → spreadsheet_architect/spreadsheet_architect_test.rb} +3 -3
- data/test/unit/spreadsheet_architect/utils/ods_test.rb +58 -0
- data/test/unit/{xlsx_utils_test.rb → spreadsheet_architect/utils/xlsx_test.rb} +13 -21
- data/test/unit/{utils_test.rb → spreadsheet_architect/utils_test.rb} +12 -35
- data/test/unit/xlsx/freeze_test.rb +79 -0
- data/test/unit/xlsx/general_test.rb +199 -0
- metadata +381 -128
- data/test/dummy_app/config/environments/development.rb +0 -30
- data/test/dummy_app/config/environments/production.rb +0 -60
- data/test/unit/kitchen_sink_test.rb +0 -110
- data/test/unit/multi_sheet_test.rb +0 -29
- data/test/unit/options_test.rb +0 -9
- data/test/unit/xlsx_freeze_test.rb +0 -44
@@ -0,0 +1 @@
|
|
1
|
+
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -4,43 +4,35 @@ require 'test_helper'
|
|
4
4
|
|
5
5
|
class ApplicationTest < ActionDispatch::IntegrationTest
|
6
6
|
def setup
|
7
|
-
@path =
|
7
|
+
@path = TMP_PATH.join("integration")
|
8
8
|
FileUtils.mkdir_p(@path)
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_csv
|
12
|
-
get '/spreadsheets/csv'
|
12
|
+
get '/spreadsheets/csv'
|
13
13
|
assert_response :success
|
14
14
|
|
15
|
-
|
16
|
-
f.write @response.body
|
17
|
-
end
|
15
|
+
save_file('integration/test.csv', @response.body)
|
18
16
|
end
|
19
17
|
|
20
18
|
def test_ods
|
21
19
|
get '/spreadsheets/ods'
|
22
20
|
assert_response :success
|
23
21
|
|
24
|
-
|
25
|
-
f.write @response.body
|
26
|
-
end
|
22
|
+
save_file('integration/test.ods', @response.body)
|
27
23
|
end
|
28
24
|
|
29
25
|
def test_xlsx
|
30
26
|
get '/spreadsheets/xlsx'
|
31
27
|
assert_response :success
|
32
28
|
|
33
|
-
|
34
|
-
f.write @response.body
|
35
|
-
end
|
29
|
+
save_file('integration/test.xlsx', @response.body)
|
36
30
|
end
|
37
31
|
|
38
|
-
def
|
39
|
-
get '/spreadsheets/
|
32
|
+
def test_respond_with
|
33
|
+
get '/spreadsheets/test_respond_with', params: {format: :xlsx}
|
40
34
|
assert_response :success
|
41
35
|
|
42
|
-
|
43
|
-
f.write @response.body
|
44
|
-
end
|
36
|
+
save_file('integration/test_respond_with.xlsx', @response.body)
|
45
37
|
end
|
46
38
|
end
|
@@ -14,7 +14,7 @@ class AllModelsTest < ActiveSupport::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def set_path(klass)
|
17
|
-
@path =
|
17
|
+
@path = TMP_PATH.join("models/#{klass}")
|
18
18
|
FileUtils.mkdir_p(@path)
|
19
19
|
end
|
20
20
|
|
@@ -47,9 +47,7 @@ class AllModelsTest < ActiveSupport::TestCase
|
|
47
47
|
|
48
48
|
data = which.send(method, instances: instances)
|
49
49
|
|
50
|
-
|
51
|
-
f.write data
|
52
|
-
end
|
50
|
+
save_file("models/#{klass}/instances.#{format}", data)
|
53
51
|
end
|
54
52
|
|
55
53
|
test "Empty :instances #{klass} #{format}" do
|
@@ -58,9 +56,9 @@ class AllModelsTest < ActiveSupport::TestCase
|
|
58
56
|
method = "to_#{format}"
|
59
57
|
which = klass.respond_to?(method) ? klass : SpreadsheetArchitect
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
data = which.send(method, instances: [])
|
60
|
+
|
61
|
+
save_file("models/#{klass}/empty.#{format}", data)
|
64
62
|
end
|
65
63
|
|
66
64
|
test ":data #{klass} #{format}" do
|
@@ -71,9 +69,7 @@ class AllModelsTest < ActiveSupport::TestCase
|
|
71
69
|
|
72
70
|
data = which.send(method, data: @data)
|
73
71
|
|
74
|
-
|
75
|
-
f.write data
|
76
|
-
end
|
72
|
+
save_file("models/#{klass}/data.#{format}", data)
|
77
73
|
end
|
78
74
|
|
79
75
|
test "Empty :data #{klass} #{format}" do
|
@@ -82,26 +78,26 @@ class AllModelsTest < ActiveSupport::TestCase
|
|
82
78
|
method = "to_#{format}"
|
83
79
|
which = klass.respond_to?(method) ? klass : SpreadsheetArchitect
|
84
80
|
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
data = which.send(method, data: [])
|
82
|
+
|
83
|
+
save_file("models/#{klass}/empty.#{format}", data)
|
88
84
|
end
|
89
85
|
|
90
86
|
if klass.is_a?(ActiveRecord::Base)
|
91
87
|
test "ActiveRecord::Relation" do
|
92
88
|
method = "to_#{format}"
|
93
89
|
|
94
|
-
|
95
|
-
|
96
|
-
|
90
|
+
data = klass.all.send(method)
|
91
|
+
|
92
|
+
save_file("models/#{klass}/active_record_relation.#{format}", data)
|
97
93
|
end
|
98
94
|
|
99
95
|
test "Empty ActiveRecord::Relation" do
|
100
96
|
method = "to_#{format}"
|
101
97
|
|
102
|
-
|
103
|
-
|
104
|
-
|
98
|
+
data = klass.limit(0).send(method)
|
99
|
+
|
100
|
+
save_file("models/#{klass}/empty_active_record_relation.#{format}", data)
|
105
101
|
end
|
106
102
|
end
|
107
103
|
|
data/test/test_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
ENV["RAILS_ENV"] = "test"
|
2
2
|
|
3
|
+
require 'pry'
|
4
|
+
|
3
5
|
begin
|
4
6
|
require 'warning'
|
5
7
|
|
@@ -10,6 +12,8 @@ rescue LoadError
|
|
10
12
|
# Do nothing
|
11
13
|
end
|
12
14
|
|
15
|
+
require 'pry'
|
16
|
+
|
13
17
|
require File.expand_path("../dummy_app/config/environment.rb", __FILE__)
|
14
18
|
|
15
19
|
migration_path = Rails.root.join('db/migrate')
|
@@ -30,6 +34,8 @@ class ActiveSupport::TestCase
|
|
30
34
|
fixtures :all
|
31
35
|
end
|
32
36
|
|
37
|
+
require 'minitest-spec-rails' ### for describe blocks
|
38
|
+
|
33
39
|
require 'minitest/reporters'
|
34
40
|
Minitest::Reporters.use!(
|
35
41
|
Minitest::Reporters::DefaultReporter.new,
|
@@ -37,6 +43,8 @@ Minitest::Reporters.use!(
|
|
37
43
|
Minitest.backtrace_filter
|
38
44
|
)
|
39
45
|
|
46
|
+
require 'minitest-spec-rails'
|
47
|
+
|
40
48
|
post_count = Post.count
|
41
49
|
if post_count < 5
|
42
50
|
(5 - post_count).times do |i|
|
@@ -44,15 +52,36 @@ if post_count < 5
|
|
44
52
|
end
|
45
53
|
end
|
46
54
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
55
|
+
TMP_PATH = Rails.root.join("../../tmp/")
|
56
|
+
|
57
|
+
### Cleanup old test spreadsheets
|
58
|
+
FileUtils.remove_dir(TMP_PATH, true)
|
59
|
+
FileUtils.mkdir_p(TMP_PATH)
|
60
|
+
|
61
|
+
def save_file(path, file_data)
|
62
|
+
if file_data.is_a?(Axlsx::Package)
|
63
|
+
file_data = file_data.to_stream.read
|
64
|
+
elsif file_data.is_a?(RODF::Spreadsheet)
|
65
|
+
file_data = file_data.bytes
|
66
|
+
end
|
67
|
+
|
68
|
+
path = Rails.root.join("../../tmp/", path)
|
69
|
+
|
70
|
+
FileUtils.mkdir_p(File.dirname(path))
|
71
|
+
|
72
|
+
File.open(TMP_PATH.join(path), "w+b") do |f|
|
73
|
+
f.write file_data
|
74
|
+
end
|
52
75
|
end
|
53
76
|
|
54
|
-
|
77
|
+
def parse_ods_spreadsheet(spreadsheet)
|
78
|
+
Nokogiri::XML(spreadsheet.xml)
|
79
|
+
end
|
55
80
|
|
56
|
-
|
57
|
-
|
58
|
-
|
81
|
+
def parse_axlsx_package(package)
|
82
|
+
Nokogiri::XML(package.workbook.worksheets.first.to_xml_string)
|
83
|
+
end
|
84
|
+
|
85
|
+
def parse_axlsx_worksheet(worksheet)
|
86
|
+
Nokogiri::XML(worksheet.to_xml_string)
|
87
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class OdsGeneralTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
test "multisheet" do
|
6
|
+
test_data = [[1,2,3], [4,5,6], [7,8,9]]
|
7
|
+
|
8
|
+
spreadsheet = Post.to_rodf_spreadsheet
|
9
|
+
spreadsheet = CustomPost.to_rodf_spreadsheet({sheet_name: 'Latest Projects'}, spreadsheet)
|
10
|
+
spreadsheet = SpreadsheetArchitect.to_rodf_spreadsheet({data: test_data, sheet_name: 'Another Sheet'}, spreadsheet)
|
11
|
+
|
12
|
+
save_file("ods/multi_sheet.ods", spreadsheet.bytes)
|
13
|
+
end
|
14
|
+
|
15
|
+
test "kitchen sink" do
|
16
|
+
options = {
|
17
|
+
headers: [
|
18
|
+
['Latest Posts'],
|
19
|
+
['Title','Category','Author','Posted on','Posted At','Earnings']
|
20
|
+
],
|
21
|
+
data: 50.times.map{|i| [i, "foobar-#{i}", 5.4*i, true, Date.today, Time.now]},
|
22
|
+
header_style: {background_color: "000000", color: "FFFFFF", align: :center, font_size: 12, bold: true},
|
23
|
+
row_style: {background_color: nil, color: "000000", align: :left, font_size: 12},
|
24
|
+
sheet_name: 'Kitchen Sink',
|
25
|
+
freeze_headers: true,
|
26
|
+
column_types: [
|
27
|
+
:string,
|
28
|
+
:float,
|
29
|
+
:float,
|
30
|
+
:boolean,
|
31
|
+
:date,
|
32
|
+
:time,
|
33
|
+
nil
|
34
|
+
],
|
35
|
+
}
|
36
|
+
|
37
|
+
# Using Array Data
|
38
|
+
file_data = SpreadsheetArchitect.to_ods(options)
|
39
|
+
|
40
|
+
save_file("ods/kitchen_sink.ods", file_data)
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "column_types" do
|
44
|
+
test "validates provided types" do
|
45
|
+
assert_raise SpreadsheetArchitect::Exceptions::ArgumentError do
|
46
|
+
SpreadsheetArchitect.to_ods(
|
47
|
+
data: [],
|
48
|
+
column_types: [""]
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
SpreadsheetArchitect.to_ods(
|
53
|
+
data: [],
|
54
|
+
column_types: [:string, :float, :date, :time, :boolean, :hyperlink, nil, ->(x){ :foo }]
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
test "works with Proc types" do
|
59
|
+
url = "https://github.com/westonganger/spreadsheet_architect"
|
60
|
+
|
61
|
+
data = [
|
62
|
+
[1, 2],
|
63
|
+
[1, url],
|
64
|
+
]
|
65
|
+
|
66
|
+
ss = SpreadsheetArchitect.to_rodf_spreadsheet(
|
67
|
+
data: data,
|
68
|
+
column_types: [
|
69
|
+
:string,
|
70
|
+
->(x){ x.to_s.start_with?("http") ? :hyperlink : :string }
|
71
|
+
]
|
72
|
+
)
|
73
|
+
|
74
|
+
doc = parse_ods_spreadsheet(ss)
|
75
|
+
|
76
|
+
cells = doc.xpath("//table:table-cell")
|
77
|
+
hyperlinks = doc.xpath("//text:a")
|
78
|
+
|
79
|
+
assert_equal 4, cells.size
|
80
|
+
assert_equal 1, hyperlinks.size
|
81
|
+
|
82
|
+
cell = cells[3]
|
83
|
+
assert_equal url, cell.text
|
84
|
+
assert_equal url, cell.at_xpath(".//text:a").attributes["href"].value
|
85
|
+
|
86
|
+
save_file("ods/hyperlinks.ods", ss)
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "hyperlinks" do
|
90
|
+
test "shows the text and have the correct attributes" do
|
91
|
+
url = "https://github.com/westonganger/spreadsheet_architect"
|
92
|
+
|
93
|
+
data = [
|
94
|
+
[1,2,3],
|
95
|
+
[1, url, "https://github.com/caxlsx/caxlsx"],
|
96
|
+
]
|
97
|
+
|
98
|
+
ss = SpreadsheetArchitect.to_rodf_spreadsheet(data: data, column_types: [:string, :hyperlink, :string])
|
99
|
+
|
100
|
+
doc = parse_ods_spreadsheet(ss)
|
101
|
+
|
102
|
+
cells = doc.xpath("//table:table-cell")
|
103
|
+
hyperlinks = doc.xpath("//text:a")
|
104
|
+
|
105
|
+
assert_equal 6, cells.size
|
106
|
+
assert_equal 2, hyperlinks.size
|
107
|
+
|
108
|
+
cell = cells[1]
|
109
|
+
assert_equal "2", cell.text
|
110
|
+
assert_equal "2", cell.at_xpath(".//text:a").attributes["href"].value
|
111
|
+
|
112
|
+
cell = cells[4]
|
113
|
+
assert_equal url, cell.text
|
114
|
+
assert_equal url, cell.at_xpath(".//text:a").attributes["href"].value
|
115
|
+
|
116
|
+
save_file("ods/hyperlinks.ods", ss)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class SpreadsheetArchitectExceptionsTest < ActiveSupport::TestCase
|
4
4
|
|
5
5
|
test "ArgumentError" do
|
6
6
|
error = SpreadsheetArchitect::Exceptions::ArgumentError
|
@@ -129,8 +129,8 @@ class ExceptionsTest < ActiveSupport::TestCase
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
|
-
test "
|
133
|
-
error = SpreadsheetArchitect::Exceptions::
|
132
|
+
test "InvalidRangeOptionError" do
|
133
|
+
error = SpreadsheetArchitect::Exceptions::InvalidRangeOptionError
|
134
134
|
|
135
135
|
assert_raise ArgumentError do
|
136
136
|
error.new
|
@@ -149,6 +149,22 @@ class ExceptionsTest < ActiveSupport::TestCase
|
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
152
|
+
test "InvalidRangeValue" do
|
153
|
+
error = SpreadsheetArchitect::Exceptions::InvalidRangeValue
|
154
|
+
|
155
|
+
assert_raise error do
|
156
|
+
SpreadsheetArchitect::Utils::XLSX.verify_range("foo:foo", 1)
|
157
|
+
end
|
158
|
+
|
159
|
+
assert_raise error do
|
160
|
+
SpreadsheetArchitect::Utils::XLSX.verify_range("@1:A2", 1)
|
161
|
+
end
|
162
|
+
|
163
|
+
assert_raise error do
|
164
|
+
SpreadsheetArchitect::Utils::XLSX.verify_range("A1:A2", 1)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
152
168
|
test "InvalidRangeError" do
|
153
169
|
error = SpreadsheetArchitect::Exceptions::InvalidRangeError
|
154
170
|
|
@@ -174,18 +190,6 @@ class ExceptionsTest < ActiveSupport::TestCase
|
|
174
190
|
assert_raise error do
|
175
191
|
SpreadsheetArchitect::Utils::XLSX.verify_range("foo", 1)
|
176
192
|
end
|
177
|
-
|
178
|
-
assert_raise error do
|
179
|
-
SpreadsheetArchitect::Utils::XLSX.verify_range("foo:foo", 1)
|
180
|
-
end
|
181
|
-
|
182
|
-
assert_raise error do
|
183
|
-
SpreadsheetArchitect::Utils::XLSX.verify_range("A1:A2", 1)
|
184
|
-
end
|
185
|
-
|
186
|
-
assert_raise error do
|
187
|
-
SpreadsheetArchitect::Utils::XLSX.verify_range("@1:A2", 1)
|
188
|
-
end
|
189
193
|
end
|
190
194
|
|
191
195
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class SpreadsheetArchitectTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
-
test "
|
5
|
+
test "version accessible by default" do
|
6
6
|
assert_not_nil SpreadsheetArchitect::VERSION
|
7
7
|
end
|
8
8
|
|
9
|
-
test "
|
9
|
+
test "constants dont change" do
|
10
10
|
x = SpreadsheetArchitect.default_options.to_s
|
11
11
|
SpreadsheetArchitect.to_xlsx(headers: [[1]], data: [[1]], header_style: {b: false}, row_style: {background_color: '000000'})
|
12
12
|
assert_equal(x, SpreadsheetArchitect.default_options.to_s)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SpreadsheetArchitect::Utils::OdsTest < ActiveSupport::TestCase
|
4
|
+
klass = SpreadsheetArchitect::Utils::ODS
|
5
|
+
|
6
|
+
describe "get_cell_type" do
|
7
|
+
describe "without passing the type argument" do
|
8
|
+
test "it gets the correct cell type" do
|
9
|
+
assert_equal :string, klass.get_cell_type("foobar")
|
10
|
+
assert_equal :float, klass.get_cell_type(1)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "when passing the type argument" do
|
15
|
+
test "returns the given type" do
|
16
|
+
assert_equal "foobar", klass.get_cell_type(1, "foobar")
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "hyperlinks" do
|
20
|
+
test "returns :string" do
|
21
|
+
assert_equal :string, klass.get_cell_type("foobar", :hyperlink)
|
22
|
+
assert_equal :string, klass.get_cell_type(1, :hyperlink)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "convert_styles" do
|
29
|
+
test "convert_styles_to_ods" do
|
30
|
+
ods_styles = klass.convert_styles({
|
31
|
+
background_color: '333333',
|
32
|
+
color: '000000',
|
33
|
+
align: true,
|
34
|
+
bold: true,
|
35
|
+
font_size: 14,
|
36
|
+
italic: true,
|
37
|
+
underline: true,
|
38
|
+
test: true
|
39
|
+
})
|
40
|
+
|
41
|
+
assert_equal(ods_styles, {
|
42
|
+
'cell' => {
|
43
|
+
'background-color' => '#333333'
|
44
|
+
},
|
45
|
+
'text' => {
|
46
|
+
'color' => '#000000',
|
47
|
+
'align' => true,
|
48
|
+
'font-weight' => 'bold',
|
49
|
+
'font-size' => 14,
|
50
|
+
'font-style' => 'italic',
|
51
|
+
'text-underline-type' => 'single',
|
52
|
+
'text-underline-style' => 'solid'
|
53
|
+
}
|
54
|
+
})
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class SpreadsheetArchitectXlsxUtilsTest < ActiveSupport::TestCase
|
4
4
|
klass = SpreadsheetArchitect::Utils::XLSX
|
5
5
|
|
6
6
|
def setup
|
@@ -30,26 +30,22 @@ class XlsxUtilsTest < ActiveSupport::TestCase
|
|
30
30
|
num_columns = 26
|
31
31
|
num_rows = 10
|
32
32
|
|
33
|
-
assert_raise SpreadsheetArchitect::Exceptions::
|
33
|
+
assert_raise SpreadsheetArchitect::Exceptions::InvalidRangeError do
|
34
34
|
klass.range_hash_to_str({}, num_columns, num_rows)
|
35
35
|
end
|
36
36
|
|
37
|
-
assert_raise SpreadsheetArchitect::Exceptions::
|
38
|
-
klass.range_hash_to_str({columns: 1}, num_columns, num_rows)
|
39
|
-
end
|
40
|
-
|
41
|
-
assert_raise SpreadsheetArchitect::Exceptions::InvalidRangeStylesOptionError do
|
42
|
-
klass.range_hash_to_str({rows: 1}, num_columns, num_rows)
|
43
|
-
end
|
44
|
-
|
45
|
-
assert_raise SpreadsheetArchitect::Exceptions::InvalidRangeStylesOptionError do
|
37
|
+
assert_raise SpreadsheetArchitect::Exceptions::InvalidRangeOptionError do
|
46
38
|
klass.range_hash_to_str({columns: [1,2,3], rows: 1}, num_columns, num_rows)
|
47
39
|
end
|
48
40
|
|
49
|
-
assert_raise SpreadsheetArchitect::Exceptions::
|
41
|
+
assert_raise SpreadsheetArchitect::Exceptions::InvalidRangeOptionError do
|
50
42
|
klass.range_hash_to_str({columns: 1, rows: [1,2,3]}, num_columns, num_rows)
|
51
43
|
end
|
52
44
|
|
45
|
+
assert_equal klass.range_hash_to_str({columns: 1}, num_columns, num_rows), "B1:B10"
|
46
|
+
|
47
|
+
assert_equal klass.range_hash_to_str({rows: 1}, num_columns, num_rows), "A1:Z1"
|
48
|
+
|
53
49
|
assert_equal klass.range_hash_to_str({columns: 0, rows: 1}, num_columns, num_rows), "A1:A1"
|
54
50
|
|
55
51
|
assert_equal klass.range_hash_to_str({columns: (0..2), rows: (1..3)}, num_columns, num_rows), "A1:C3"
|
@@ -58,7 +54,7 @@ class XlsxUtilsTest < ActiveSupport::TestCase
|
|
58
54
|
|
59
55
|
assert_equal klass.range_hash_to_str({columns: :all, rows: :all}, num_columns, num_rows), "A1:Z10"
|
60
56
|
|
61
|
-
assert_raise SpreadsheetArchitect::Exceptions::
|
57
|
+
assert_raise SpreadsheetArchitect::Exceptions::InvalidRangeValue do
|
62
58
|
assert_equal klass.range_hash_to_str({columns: ('foobar'..'asd'), rows: (1..3)}, num_columns, num_rows), "foobar1:asd3"
|
63
59
|
end
|
64
60
|
end
|
@@ -76,13 +72,11 @@ class XlsxUtilsTest < ActiveSupport::TestCase
|
|
76
72
|
klass.verify_range("A1Z10", num_rows)
|
77
73
|
end
|
78
74
|
|
79
|
-
assert_raise SpreadsheetArchitect::Exceptions::
|
80
|
-
klass.verify_range("A1:
|
75
|
+
assert_raise SpreadsheetArchitect::Exceptions::InvalidRangeValue do
|
76
|
+
klass.verify_range("A1:A#{num_rows+1}", num_rows)
|
81
77
|
end
|
82
78
|
|
83
|
-
|
84
|
-
klass.verify_range("A1:AAA1", num_rows)
|
85
|
-
#end
|
79
|
+
klass.verify_range("A1:AAA1", num_rows)
|
86
80
|
end
|
87
81
|
|
88
82
|
test "verify_column" do
|
@@ -108,9 +102,7 @@ class XlsxUtilsTest < ActiveSupport::TestCase
|
|
108
102
|
klass.verify_column([], num_columns)
|
109
103
|
end
|
110
104
|
|
111
|
-
|
112
|
-
klass.verify_column("ZZ", num_columns)
|
113
|
-
#end
|
105
|
+
klass.verify_column("ZZ", num_columns)
|
114
106
|
end
|
115
107
|
|
116
108
|
test "constants" do
|