spreadsheet_architect 3.2.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/README.md +57 -69
  4. data/lib/spreadsheet_architect.rb +5 -0
  5. data/lib/spreadsheet_architect/axlsx_string_width_patch.rb +23 -0
  6. data/lib/spreadsheet_architect/class_methods/csv.rb +2 -0
  7. data/lib/spreadsheet_architect/class_methods/ods.rb +9 -9
  8. data/lib/spreadsheet_architect/class_methods/xlsx.rb +64 -7
  9. data/lib/spreadsheet_architect/utils.rb +47 -4
  10. data/lib/spreadsheet_architect/utils/xlsx.rb +2 -13
  11. data/lib/spreadsheet_architect/version.rb +1 -1
  12. data/test/dummy_app/app/assets/config/manifest.js +3 -0
  13. data/test/dummy_app/config/application.rb +2 -5
  14. data/test/dummy_app/db/test.sqlite3 +0 -0
  15. data/test/dummy_app/log/test.log +55968 -64975
  16. data/test/dummy_app/tmp/3.0.0.pre/integration/alt_xlsx.xlsx +0 -0
  17. data/test/dummy_app/tmp/3.0.0.pre/integration/csv.csv +5 -5
  18. data/test/dummy_app/tmp/3.0.0.pre/integration/ods.ods +0 -0
  19. data/test/dummy_app/tmp/3.0.0.pre/integration/xlsx.xlsx +0 -0
  20. data/test/dummy_app/tmp/3.0.0.pre/kitchen_sink.ods +0 -0
  21. data/test/dummy_app/tmp/3.0.0.pre/kitchen_sink.xlsx +0 -0
  22. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/data.csv +1 -1
  23. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/data.ods +0 -0
  24. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/data.xlsx +0 -0
  25. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/empty.ods +0 -0
  26. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/empty.xlsx +0 -0
  27. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/instances.csv +5 -5
  28. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/instances.ods +0 -0
  29. data/test/dummy_app/tmp/3.0.0.pre/models/ActiveModelObject/instances.xlsx +0 -0
  30. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/data.csv +1 -1
  31. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/data.ods +0 -0
  32. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/data.xlsx +0 -0
  33. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/empty.ods +0 -0
  34. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/empty.xlsx +0 -0
  35. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/instances.csv +5 -5
  36. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/instances.ods +0 -0
  37. data/test/dummy_app/tmp/3.0.0.pre/models/CustomColumnsMethodPost/instances.xlsx +0 -0
  38. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/data.csv +1 -1
  39. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/data.ods +0 -0
  40. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/data.xlsx +0 -0
  41. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/empty.ods +0 -0
  42. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/empty.xlsx +0 -0
  43. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/instances.csv +5 -5
  44. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/instances.ods +0 -0
  45. data/test/dummy_app/tmp/3.0.0.pre/models/CustomPost/instances.xlsx +0 -0
  46. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/data.csv +1 -1
  47. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/data.ods +0 -0
  48. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/data.xlsx +0 -0
  49. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/empty.ods +0 -0
  50. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/empty.xlsx +0 -0
  51. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/instances.csv +5 -5
  52. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/instances.ods +0 -0
  53. data/test/dummy_app/tmp/3.0.0.pre/models/LegacyPlainRubyObject/instances.xlsx +0 -0
  54. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/data.csv +1 -1
  55. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/data.ods +0 -0
  56. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/data.xlsx +0 -0
  57. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/empty.csv +1 -0
  58. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/empty.ods +0 -0
  59. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/empty.xlsx +0 -0
  60. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/instances.csv +5 -5
  61. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/instances.ods +0 -0
  62. data/test/dummy_app/tmp/3.0.0.pre/models/PlainRubyObject/instances.xlsx +0 -0
  63. data/test/dummy_app/tmp/3.0.0.pre/models/Post/data.csv +1 -1
  64. data/test/dummy_app/tmp/3.0.0.pre/models/Post/data.ods +0 -0
  65. data/test/dummy_app/tmp/3.0.0.pre/models/Post/data.xlsx +0 -0
  66. data/test/dummy_app/tmp/3.0.0.pre/models/Post/empty.csv +0 -1
  67. data/test/dummy_app/tmp/3.0.0.pre/models/Post/empty.ods +0 -0
  68. data/test/dummy_app/tmp/3.0.0.pre/models/Post/empty.xlsx +0 -0
  69. data/test/dummy_app/tmp/3.0.0.pre/models/Post/instances.csv +5 -5
  70. data/test/dummy_app/tmp/3.0.0.pre/models/Post/instances.ods +0 -0
  71. data/test/dummy_app/tmp/3.0.0.pre/models/Post/instances.xlsx +0 -0
  72. data/test/dummy_app/tmp/3.0.0.pre/multi_sheet.ods +0 -0
  73. data/test/dummy_app/tmp/3.0.0.pre/multi_sheet.xlsx +0 -0
  74. data/test/test_helper.rb +8 -8
  75. data/test/unit/exceptions_test.rb +4 -0
  76. data/test/unit/kitchen_sink_test.rb +14 -8
  77. data/test/unit/regressions_test.rb +11 -0
  78. data/test/unit/utils_test.rb +35 -1
  79. data/test/unit/xlsx_freeze_test.rb +44 -0
  80. data/test/unit/xlsx_utils_test.rb +0 -21
  81. metadata +110 -354
  82. data/lib/spreadsheet_architect/monkey_patches/axlsx_column_width.rb +0 -56
  83. data/test/custom_assertions.rb +0 -21
  84. data/test/dummy_app/tmp/2.0.1/integration/alt_xlsx.xlsx +0 -0
  85. data/test/dummy_app/tmp/2.0.1/integration/csv.csv +0 -6
  86. data/test/dummy_app/tmp/2.0.1/integration/ods.ods +0 -0
  87. data/test/dummy_app/tmp/2.0.1/integration/xlsx.xlsx +0 -0
  88. data/test/dummy_app/tmp/2.0.1/kitchen_sink.ods +0 -0
  89. data/test/dummy_app/tmp/2.0.1/kitchen_sink.xlsx +0 -0
  90. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/data.csv +0 -3
  91. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/data.ods +0 -0
  92. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/data.xlsx +0 -0
  93. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/empty.csv +0 -1
  94. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/empty.ods +0 -0
  95. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/empty.xlsx +0 -0
  96. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/instances.csv +0 -6
  97. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/instances.ods +0 -0
  98. data/test/dummy_app/tmp/2.0.1/models/ActiveModelObject/instances.xlsx +0 -0
  99. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/data.csv +0 -3
  100. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/data.ods +0 -0
  101. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/data.xlsx +0 -0
  102. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/empty.csv +0 -0
  103. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/empty.ods +0 -0
  104. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/empty.xlsx +0 -0
  105. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/instances.csv +0 -6
  106. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/instances.ods +0 -0
  107. data/test/dummy_app/tmp/2.0.1/models/CustomColumnsMethodPost/instances.xlsx +0 -0
  108. data/test/dummy_app/tmp/2.0.1/models/CustomPost/data.csv +0 -3
  109. data/test/dummy_app/tmp/2.0.1/models/CustomPost/data.ods +0 -0
  110. data/test/dummy_app/tmp/2.0.1/models/CustomPost/data.xlsx +0 -0
  111. data/test/dummy_app/tmp/2.0.1/models/CustomPost/empty.csv +0 -1
  112. data/test/dummy_app/tmp/2.0.1/models/CustomPost/empty.ods +0 -0
  113. data/test/dummy_app/tmp/2.0.1/models/CustomPost/empty.xlsx +0 -0
  114. data/test/dummy_app/tmp/2.0.1/models/CustomPost/instances.csv +0 -6
  115. data/test/dummy_app/tmp/2.0.1/models/CustomPost/instances.ods +0 -0
  116. data/test/dummy_app/tmp/2.0.1/models/CustomPost/instances.xlsx +0 -0
  117. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/data.csv +0 -3
  118. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/data.ods +0 -0
  119. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/data.xlsx +0 -0
  120. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/empty.csv +0 -1
  121. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/empty.ods +0 -0
  122. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/empty.xlsx +0 -0
  123. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/instances.csv +0 -6
  124. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/instances.ods +0 -0
  125. data/test/dummy_app/tmp/2.0.1/models/LegacyPlainRubyObject/instances.xlsx +0 -0
  126. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/data.csv +0 -3
  127. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/data.ods +0 -0
  128. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/data.xlsx +0 -0
  129. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/empty.csv +0 -1
  130. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/empty.ods +0 -0
  131. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/empty.xlsx +0 -0
  132. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/instances.csv +0 -6
  133. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/instances.ods +0 -0
  134. data/test/dummy_app/tmp/2.0.1/models/PlainRubyObject/instances.xlsx +0 -0
  135. data/test/dummy_app/tmp/2.0.1/models/Post/data.csv +0 -3
  136. data/test/dummy_app/tmp/2.0.1/models/Post/data.ods +0 -0
  137. data/test/dummy_app/tmp/2.0.1/models/Post/data.xlsx +0 -0
  138. data/test/dummy_app/tmp/2.0.1/models/Post/empty.csv +0 -0
  139. data/test/dummy_app/tmp/2.0.1/models/Post/empty.ods +0 -0
  140. data/test/dummy_app/tmp/2.0.1/models/Post/empty.xlsx +0 -0
  141. data/test/dummy_app/tmp/2.0.1/models/Post/instances.csv +0 -6
  142. data/test/dummy_app/tmp/2.0.1/models/Post/instances.ods +0 -0
  143. data/test/dummy_app/tmp/2.0.1/models/Post/instances.xlsx +0 -0
  144. data/test/dummy_app/tmp/2.0.1/multi_sheet.ods +0 -0
  145. data/test/dummy_app/tmp/2.0.1/multi_sheet.xlsx +0 -0
  146. data/test/dummy_app/tmp/axlsx-master/integration/alt_xlsx.xlsx +0 -0
  147. data/test/dummy_app/tmp/axlsx-master/integration/csv.csv +0 -6
  148. data/test/dummy_app/tmp/axlsx-master/integration/ods.ods +0 -0
  149. data/test/dummy_app/tmp/axlsx-master/integration/xlsx.xlsx +0 -0
  150. data/test/dummy_app/tmp/axlsx-master/kitchen_sink.ods +0 -0
  151. data/test/dummy_app/tmp/axlsx-master/kitchen_sink.xlsx +0 -0
  152. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/data.csv +0 -3
  153. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/data.ods +0 -0
  154. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/data.xlsx +0 -0
  155. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/empty.csv +0 -0
  156. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/empty.ods +0 -0
  157. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/empty.xlsx +0 -0
  158. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/instances.csv +0 -6
  159. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/instances.ods +0 -0
  160. data/test/dummy_app/tmp/axlsx-master/models/ActiveModelObject/instances.xlsx +0 -0
  161. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/data.csv +0 -3
  162. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/data.ods +0 -0
  163. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/data.xlsx +0 -0
  164. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/empty.csv +0 -0
  165. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/empty.ods +0 -0
  166. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/empty.xlsx +0 -0
  167. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/instances.csv +0 -6
  168. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/instances.ods +0 -0
  169. data/test/dummy_app/tmp/axlsx-master/models/CustomColumnsMethodPost/instances.xlsx +0 -0
  170. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/data.csv +0 -3
  171. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/data.ods +0 -0
  172. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/data.xlsx +0 -0
  173. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/empty.csv +0 -0
  174. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/empty.ods +0 -0
  175. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/empty.xlsx +0 -0
  176. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/instances.csv +0 -6
  177. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/instances.ods +0 -0
  178. data/test/dummy_app/tmp/axlsx-master/models/CustomPost/instances.xlsx +0 -0
  179. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/data.csv +0 -3
  180. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/data.ods +0 -0
  181. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/data.xlsx +0 -0
  182. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/empty.csv +0 -0
  183. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/empty.ods +0 -0
  184. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/empty.xlsx +0 -0
  185. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/instances.csv +0 -6
  186. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/instances.ods +0 -0
  187. data/test/dummy_app/tmp/axlsx-master/models/LegacyPlainRubyObject/instances.xlsx +0 -0
  188. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/data.csv +0 -3
  189. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/data.ods +0 -0
  190. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/data.xlsx +0 -0
  191. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/empty.csv +0 -1
  192. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/empty.ods +0 -0
  193. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/empty.xlsx +0 -0
  194. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/instances.csv +0 -6
  195. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/instances.ods +0 -0
  196. data/test/dummy_app/tmp/axlsx-master/models/PlainRubyObject/instances.xlsx +0 -0
  197. data/test/dummy_app/tmp/axlsx-master/models/Post/data.csv +0 -3
  198. data/test/dummy_app/tmp/axlsx-master/models/Post/data.ods +0 -0
  199. data/test/dummy_app/tmp/axlsx-master/models/Post/data.xlsx +0 -0
  200. data/test/dummy_app/tmp/axlsx-master/models/Post/empty.csv +0 -0
  201. data/test/dummy_app/tmp/axlsx-master/models/Post/empty.ods +0 -0
  202. data/test/dummy_app/tmp/axlsx-master/models/Post/empty.xlsx +0 -0
  203. data/test/dummy_app/tmp/axlsx-master/models/Post/instances.csv +0 -6
  204. data/test/dummy_app/tmp/axlsx-master/models/Post/instances.ods +0 -0
  205. data/test/dummy_app/tmp/axlsx-master/models/Post/instances.xlsx +0 -0
  206. data/test/dummy_app/tmp/axlsx-master/multi_sheet.ods +0 -0
  207. data/test/dummy_app/tmp/axlsx-master/multi_sheet.xlsx +0 -0
@@ -1,6 +1,6 @@
1
1
  Id,Name,Content,Age,Created At,Updated At
2
- 1,,,0,,2018-07-06 15:32:02 UTC
3
- 2,,,1,,2018-07-06 15:32:02 UTC
4
- 3,,,2,,2018-07-06 15:32:02 UTC
5
- 4,,,3,,2018-07-06 15:32:02 UTC
6
- 5,,,4,,2018-07-06 15:32:02 UTC
2
+ 1,,,0,,2019-11-27 17:21:37 UTC
3
+ 2,,,1,,2019-11-27 17:21:37 UTC
4
+ 3,,,2,,2019-11-27 17:21:37 UTC
5
+ 4,,,3,,2019-11-27 17:21:37 UTC
6
+ 5,,,4,,2019-11-27 17:21:37 UTC
@@ -1,3 +1,3 @@
1
1
  row1,test1
2
2
  123.456,,123
3
- 123,2018-09-14,2018-09-14 19:20:52 -0700
3
+ 123,2019-11-27,2019-11-27 09:52:43 -0800
@@ -1,6 +1,6 @@
1
1
  Name,Content,Created At
2
- 0,2,2018-09-14 19:20:51 -0700
3
- 1,3,2018-09-14 19:20:51 -0700
4
- 2,4,2018-09-14 19:20:51 -0700
5
- 3,5,2018-09-14 19:20:51 -0700
6
- 4,6,2018-09-14 19:20:51 -0700
2
+ 0,2,2019-11-27 09:52:42 -0800
3
+ 1,3,2019-11-27 09:52:42 -0800
4
+ 2,4,2019-11-27 09:52:42 -0800
5
+ 3,5,2019-11-27 09:52:42 -0800
6
+ 4,6,2019-11-27 09:52:42 -0800
@@ -1,3 +1,3 @@
1
1
  row1,test1
2
2
  123.456,,123
3
- 123,2018-09-14,2018-09-14 19:20:52 -0700
3
+ 123,2019-11-27,2019-11-27 09:52:43 -0800
@@ -1,6 +1,6 @@
1
1
  Name,The Content,Created At,Created At Date,asd
2
- 0,2,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
3
- 1,3,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
4
- 2,4,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
5
- 3,5,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
6
- 4,6,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
2
+ 0,2,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
3
+ 1,3,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
4
+ 2,4,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
5
+ 3,5,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
6
+ 4,6,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
@@ -1,3 +1,3 @@
1
1
  row1,test1
2
2
  123.456,,123
3
- 123,2018-09-14,2018-09-14 19:20:52 -0700
3
+ 123,2019-11-27,2019-11-27 09:52:43 -0800
@@ -1,6 +1,6 @@
1
1
  Name,The Content,Created At,Created At Date,asd
2
- 0,2,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
3
- 1,3,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
4
- 2,4,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
5
- 3,5,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
6
- 4,6,2018-09-15 02:20:51 UTC,2018-09-15,tadaaa
2
+ 0,2,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
3
+ 1,3,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
4
+ 2,4,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
5
+ 3,5,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
6
+ 4,6,2019-11-27 17:52:42 UTC,2019-11-27,tadaaa
@@ -1,3 +1,3 @@
1
1
  row1,test1
2
2
  123.456,,123
3
- 123,2018-09-14,2018-09-14 19:20:52 -0700
3
+ 123,2019-11-27,2019-11-27 09:52:43 -0800
@@ -1,6 +1,6 @@
1
1
  Name,Content,Object ID
2
- 0,2,70194593688160
3
- 1,3,70194593688100
4
- 2,4,70194593688060
5
- 3,5,70194593688000
6
- 4,6,70194593687920
2
+ 0,2,47100396508880
3
+ 1,3,47100396508840
4
+ 2,4,47100396508800
5
+ 3,5,47100396508760
6
+ 4,6,47100396508700
@@ -1,3 +1,3 @@
1
1
  row1,test1
2
2
  123.456,,123
3
- 123,2018-09-14,2018-09-14 19:20:52 -0700
3
+ 123,2019-11-27,2019-11-27 09:52:43 -0800
@@ -1,6 +1,6 @@
1
1
  Name,Content,Object ID
2
- 0,2,70194593673320
3
- 1,3,70194593673280
4
- 2,4,70194593673240
5
- 3,5,70194593673200
6
- 4,6,70194593673160
2
+ 0,2,47100396538300
3
+ 1,3,47100396538260
4
+ 2,4,47100396538220
5
+ 3,5,47100396538080
6
+ 4,6,47100396537920
@@ -1,3 +1,3 @@
1
1
  row1,test1
2
2
  123.456,,123
3
- 123,2018-09-14,2018-09-14 19:20:52 -0700
3
+ 123,2019-11-27,2019-11-27 09:52:43 -0800
@@ -1 +0,0 @@
1
- Id,Name,Content,Age,Created At,Updated At
@@ -1,6 +1,6 @@
1
1
  Id,Name,Content,Age,Created At,Updated At
2
- ,0,2,,2018-09-14 19:20:51 -0700,
3
- ,1,3,,2018-09-14 19:20:51 -0700,
4
- ,2,4,,2018-09-14 19:20:51 -0700,
5
- ,3,5,,2018-09-14 19:20:51 -0700,
6
- ,4,6,,2018-09-14 19:20:51 -0700,
2
+ ,0,2,,2019-11-27 09:52:42 -0800,
3
+ ,1,3,,2019-11-27 09:52:42 -0800,
4
+ ,2,4,,2019-11-27 09:52:42 -0800,
5
+ ,3,5,,2019-11-27 09:52:42 -0800,
6
+ ,4,6,,2019-11-27 09:52:42 -0800,
@@ -3,7 +3,9 @@ ENV["RAILS_ENV"] = "test"
3
3
  require File.expand_path("../dummy_app/config/environment.rb", __FILE__)
4
4
 
5
5
  migration_path = Rails.root.join('db/migrate')
6
- if ActiveRecord.gem_version >= ::Gem::Version.new("5.2.0")
6
+ if ActiveRecord.gem_version >= ::Gem::Version.new("6.0.0")
7
+ ActiveRecord::MigrationContext.new(migration_path, ActiveRecord::SchemaMigration).migrate
8
+ elsif ActiveRecord.gem_version >= ::Gem::Version.new("5.2.0")
7
9
  ActiveRecord::MigrationContext.new(migration_path).migrate
8
10
  else
9
11
  ActiveRecord::Migrator.migrate(migration_path)
@@ -25,8 +27,6 @@ Minitest::Reporters.use!(
25
27
  Minitest.backtrace_filter
26
28
  )
27
29
 
28
- require 'custom_assertions'
29
-
30
30
  post_count = Post.count
31
31
  if post_count < 5
32
32
  (5 - post_count).times do |i|
@@ -34,14 +34,14 @@ if post_count < 5
34
34
  end
35
35
  end
36
36
 
37
- axlsx_spec = Gem.loaded_specs['axlsx']
38
- if !axlsx_spec.source.is_a?(Bundler::Source::Rubygems)
39
- axlsx_version = 'axlsx-master'
37
+ caxlsx_spec = Gem.loaded_specs['caxlsx']
38
+ if caxlsx_spec.source.is_a?(Bundler::Source::Rubygems)
39
+ caxlsx_version = caxlsx_spec.version.to_s
40
40
  else
41
- axlsx_version = axlsx_spec.version.to_s
41
+ caxlsx_version = 'caxlsx-master'
42
42
  end
43
43
 
44
- VERSIONED_BASE_PATH = Rails.root.join("tmp/#{axlsx_version}")
44
+ VERSIONED_BASE_PATH = Rails.root.join("../../tmp/#{caxlsx_version}")
45
45
 
46
46
  ### Cleanup old test spreadsheets
47
47
  FileUtils.remove_dir(VERSIONED_BASE_PATH, true)
@@ -19,6 +19,10 @@ class ExceptionsTest < ActiveSupport::TestCase
19
19
  conditional_row_styles = [{if: true, styles: false}]
20
20
  SpreadsheetArchitect::Utils::XLSX.conditional_styles_for_row(conditional_row_styles, true, true)
21
21
  end
22
+
23
+ assert_raise error do
24
+ SpreadsheetArchitect::Utils.get_options({freeze: {rows: 1}, freeze_headers: true}, SpreadsheetArchitect)
25
+ end
22
26
  end
23
27
 
24
28
  test "NoDataError" do
@@ -6,12 +6,13 @@ class KitchenSinkTest < ActiveSupport::TestCase
6
6
  @options = {
7
7
  headers: [
8
8
  ['Latest Posts'],
9
- ['Title','Category','Author','Posted on','Earnings']
9
+ ['Title','Category','Author','Posted on','Posted At','Earnings']
10
10
  ],
11
11
  data: 50.times.map{|i| [i, "foobar-#{i}", 5.4*i, true, Date.today, Time.now]},
12
12
  header_style: {background_color: "000000", color: "FFFFFF", align: :center, font_size: 12, bold: true},
13
13
  row_style: {background_color: nil, color: "000000", align: :left, font_size: 12},
14
- sheet_name: 'Kitchen Sink'
14
+ sheet_name: 'Kitchen Sink',
15
+ freeze_headers: true,
15
16
  }
16
17
  end
17
18
 
@@ -19,7 +20,7 @@ class KitchenSinkTest < ActiveSupport::TestCase
19
20
  end
20
21
 
21
22
  def test_xlsx
22
- @options.merge!({
23
+ opts = @options.merge({
23
24
  column_styles: [
24
25
  {columns: 0, styles: {bold: true}},
25
26
  {columns: (1..3), styles: {color: "444444"}},
@@ -73,7 +74,7 @@ class KitchenSinkTest < ActiveSupport::TestCase
73
74
  })
74
75
 
75
76
  # Using Array Data
76
- file_data = SpreadsheetArchitect.to_xlsx(@options)
77
+ file_data = SpreadsheetArchitect.to_xlsx(opts)
77
78
 
78
79
  File.open(VERSIONED_BASE_PATH.join("kitchen_sink.xlsx"),'w+b') do |f|
79
80
  f.write file_data
@@ -81,12 +82,17 @@ class KitchenSinkTest < ActiveSupport::TestCase
81
82
  end
82
83
 
83
84
  def test_ods
84
- @options.merge!({
85
+ opts = @options.merge({
86
+ headers: [
87
+ ['Latest Posts'],
88
+ ['Title','Category','Author','Boolean','Posted on','Posted At']
89
+ ],
90
+ data: 50.times.map{|i| [i, "foobar-#{i}", (5.4*i), true, Date.today, Time.now]},
85
91
  column_types: [
86
92
  :string,
87
93
  :float,
88
- :percent,
89
- :currency,
94
+ :float,
95
+ :boolean,
90
96
  :date,
91
97
  :time,
92
98
  nil
@@ -94,7 +100,7 @@ class KitchenSinkTest < ActiveSupport::TestCase
94
100
  })
95
101
 
96
102
  # Using Array Data
97
- file_data = SpreadsheetArchitect.to_ods(@options)
103
+ file_data = SpreadsheetArchitect.to_ods(opts)
98
104
 
99
105
  File.open(VERSIONED_BASE_PATH.join("kitchen_sink.ods"),'w+b') do |f|
100
106
  f.write file_data
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ class RegressionsTest < ActiveSupport::TestCase
4
+
5
+ test "XLSX" do
6
+ end
7
+
8
+ test "ODS" do
9
+ end
10
+
11
+ end
@@ -40,6 +40,9 @@ class UtilsTest < ActiveSupport::TestCase
40
40
 
41
41
  ### using Data option
42
42
  output = klass.get_cell_data(@options.merge(headers: true), SpreadsheetArchitect)
43
+ assert_equal [[]], output[:headers]
44
+
45
+ output = klass.get_cell_data(@options.merge(headers: false), SpreadsheetArchitect)
43
46
  assert_equal false, output[:headers]
44
47
 
45
48
  output = klass.get_cell_data(@options.merge(column_types: nil), SpreadsheetArchitect)
@@ -153,7 +156,7 @@ class UtilsTest < ActiveSupport::TestCase
153
156
  end
154
157
 
155
158
  test "stringify_keys" do
156
- hash = klass.stringify_keys
159
+ hash = klass.stringify_keys({})
157
160
  assert_empty hash
158
161
 
159
162
  hash = klass.stringify_keys({foo: :bar})
@@ -176,4 +179,35 @@ class UtilsTest < ActiveSupport::TestCase
176
179
  assert_nil hash[:foo]
177
180
  assert_equal hash['foo']['foo']['foo']['foo'], :bar
178
181
  end
182
+
183
+ test "symbolize_keys" do
184
+ hash = klass.symbolize_keys({})
185
+ assert_empty hash
186
+
187
+ hash = klass.symbolize_keys({'foo' => :bar})
188
+ assert_nil hash['foo']
189
+ assert_equal hash[:foo], :bar
190
+
191
+ hash = klass.symbolize_keys({'foo' => :bar, bar: :foo})
192
+ assert_nil hash['foo']
193
+ assert_equal hash[:foo], :bar
194
+
195
+ hash = klass.symbolize_keys({'foo' => {'foo' => :bar}})
196
+ assert_nil hash['foo']
197
+ assert_equal hash[:foo][:foo], :bar
198
+
199
+ hash = klass.symbolize_keys({'foo' => {'foo' => {'foo' => :bar}}})
200
+ assert_nil hash['foo']
201
+ assert_equal hash[:foo][:foo][:foo], :bar
202
+ end
203
+
204
+ test "hash_array_symbolize_keys" do
205
+ array = klass.hash_array_symbolize_keys([])
206
+ assert_empty array
207
+
208
+ array = klass.hash_array_symbolize_keys([{'foo' => :bar}])
209
+ assert_nil array[0]['foo']
210
+ assert_equal array[0][:foo], :bar
211
+ end
212
+
179
213
  end
@@ -0,0 +1,44 @@
1
+ require "test_helper"
2
+
3
+ class XlsxFreezeTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ @options = {
7
+ headers: [
8
+ ['Latest Posts'],
9
+ ['Title','Category','Author','Posted on','Posted At','Earnings']
10
+ ],
11
+ data: 50.times.map{|i| [i, "foobar-#{i}", 5.4*i, true, Date.today, Time.now]},
12
+ }
13
+ end
14
+
15
+ def teardown
16
+ end
17
+
18
+ def test_1
19
+ opts = @options.merge({
20
+ freeze: {rows: 1, columns: 1},
21
+ })
22
+
23
+ # Using Array Data
24
+ file_data = SpreadsheetArchitect.to_xlsx(opts)
25
+
26
+ File.open(VERSIONED_BASE_PATH.join("freeze_test_1.xlsx"),'w+b') do |f|
27
+ f.write file_data
28
+ end
29
+ end
30
+
31
+ def test_2
32
+ opts = @options.merge({
33
+ freeze: {rows: (2..4), columns: (2..4)},
34
+ })
35
+
36
+ # Using Array Data
37
+ file_data = SpreadsheetArchitect.to_xlsx(opts)
38
+
39
+ File.open(VERSIONED_BASE_PATH.join("freeze_test_2.xlsx"),'w+b') do |f|
40
+ f.write file_data
41
+ end
42
+ end
43
+
44
+ end
@@ -113,27 +113,6 @@ class XlsxUtilsTest < ActiveSupport::TestCase
113
113
  #end
114
114
  end
115
115
 
116
- test "symbolize_keys" do
117
- hash = klass.symbolize_keys
118
- assert_empty hash
119
-
120
- hash = klass.symbolize_keys({'foo' => :bar})
121
- assert_nil hash['foo']
122
- assert_equal hash[:foo], :bar
123
-
124
- hash = klass.symbolize_keys({'foo' => :bar, bar: :foo})
125
- assert_nil hash['foo']
126
- assert_equal hash[:foo], :bar
127
-
128
- hash = klass.symbolize_keys({'foo' => {'foo' => :bar}})
129
- assert_nil hash['foo']
130
- assert_equal hash[:foo][:foo], :bar
131
-
132
- hash = klass.symbolize_keys({'foo' => {'foo' => {'foo' => :bar}}})
133
- assert_nil hash['foo']
134
- assert_equal hash[:foo][:foo][:foo], :bar
135
- end
136
-
137
116
  test "constants" do
138
117
  assert_equal klass::COL_NAMES.count, 16384
139
118
  assert_equal klass::COL_NAMES.first, 'A'