write_xlsx 0.89.0 → 1.01.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.
Files changed (340) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Changes +98 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +2 -2
  6. data/examples/a_simple.rb +2 -7
  7. data/examples/add_vba_project.rb +1 -1
  8. data/examples/array_formula.rb +1 -1
  9. data/examples/chart_area.rb +5 -2
  10. data/examples/chart_bar.rb +5 -2
  11. data/examples/chart_clustered.rb +1 -1
  12. data/examples/chart_column.rb +5 -2
  13. data/examples/chart_combined.rb +1 -1
  14. data/examples/chart_data_table.rb +9 -3
  15. data/examples/chart_data_tools.rb +25 -7
  16. data/examples/chart_doughnut.rb +17 -5
  17. data/examples/chart_gauge.rb +73 -0
  18. data/examples/chart_line.rb +5 -2
  19. data/examples/chart_pareto.rb +1 -1
  20. data/examples/chart_pie.rb +9 -3
  21. data/examples/chart_radar.rb +13 -4
  22. data/examples/chart_scatter.rb +5 -2
  23. data/examples/chart_secondary_axis.rb +5 -2
  24. data/examples/chart_stock.rb +1 -1
  25. data/examples/chart_styles.rb +1 -1
  26. data/examples/colors.rb +1 -1
  27. data/examples/conditional_format.rb +73 -46
  28. data/examples/data_validate.rb +1 -1
  29. data/examples/date_time.rb +1 -1
  30. data/examples/demo.rb +5 -8
  31. data/examples/formats.rb +1 -1
  32. data/examples/headers.rb +1 -1
  33. data/examples/hide_row_col.rb +1 -1
  34. data/examples/hide_sheet.rb +1 -1
  35. data/examples/hyperlink1.rb +5 -12
  36. data/examples/indent.rb +1 -1
  37. data/examples/macros.rb +1 -1
  38. data/examples/merge1.rb +1 -1
  39. data/examples/merge2.rb +1 -1
  40. data/examples/merge3.rb +1 -1
  41. data/examples/merge4.rb +1 -1
  42. data/examples/merge5.rb +1 -1
  43. data/examples/merge6.rb +1 -1
  44. data/examples/outline.rb +1 -1
  45. data/examples/outline_collapsed.rb +1 -1
  46. data/examples/panes.rb +1 -1
  47. data/examples/properties.rb +1 -1
  48. data/examples/regions.rb +1 -1
  49. data/examples/rich_strings.rb +1 -1
  50. data/examples/right_to_left.rb +1 -1
  51. data/examples/shape1.rb +1 -1
  52. data/examples/shape2.rb +1 -1
  53. data/examples/shape3.rb +1 -1
  54. data/examples/shape4.rb +1 -1
  55. data/examples/shape5.rb +1 -1
  56. data/examples/shape6.rb +1 -1
  57. data/examples/shape7.rb +1 -1
  58. data/examples/shape8.rb +1 -1
  59. data/examples/shape_all.rb +1 -1
  60. data/examples/sparklines1.rb +1 -1
  61. data/examples/sparklines2.rb +1 -1
  62. data/examples/stats.rb +1 -1
  63. data/examples/stats_ext.rb +1 -1
  64. data/examples/stocks.rb +1 -1
  65. data/examples/tab_colors.rb +1 -1
  66. data/examples/tables.rb +1 -1
  67. data/lib/write_xlsx/chart.rb +124 -240
  68. data/lib/write_xlsx/chart/area.rb +1 -1
  69. data/lib/write_xlsx/chart/axis.rb +4 -4
  70. data/lib/write_xlsx/chart/bar.rb +1 -1
  71. data/lib/write_xlsx/chart/caption.rb +3 -1
  72. data/lib/write_xlsx/chart/column.rb +1 -1
  73. data/lib/write_xlsx/chart/doughnut.rb +1 -1
  74. data/lib/write_xlsx/chart/legend.rb +14 -0
  75. data/lib/write_xlsx/chart/line.rb +1 -1
  76. data/lib/write_xlsx/chart/pie.rb +32 -15
  77. data/lib/write_xlsx/chart/radar.rb +1 -1
  78. data/lib/write_xlsx/chart/scatter.rb +1 -1
  79. data/lib/write_xlsx/chart/series.rb +11 -7
  80. data/lib/write_xlsx/chart/stock.rb +1 -1
  81. data/lib/write_xlsx/chartsheet.rb +35 -7
  82. data/lib/write_xlsx/drawing.rb +28 -8
  83. data/lib/write_xlsx/format.rb +19 -15
  84. data/lib/write_xlsx/package/comments.rb +57 -54
  85. data/lib/write_xlsx/package/conditional_format.rb +360 -39
  86. data/lib/write_xlsx/package/content_types.rb +10 -0
  87. data/lib/write_xlsx/package/core.rb +8 -6
  88. data/lib/write_xlsx/package/custom.rb +125 -0
  89. data/lib/write_xlsx/package/packager.rb +26 -0
  90. data/lib/write_xlsx/package/styles.rb +53 -21
  91. data/lib/write_xlsx/package/table.rb +16 -4
  92. data/lib/write_xlsx/shape.rb +4 -3
  93. data/lib/write_xlsx/sheets.rb +11 -1
  94. data/lib/write_xlsx/sparkline.rb +1 -1
  95. data/lib/write_xlsx/utility.rb +305 -35
  96. data/lib/write_xlsx/version.rb +1 -1
  97. data/lib/write_xlsx/workbook.rb +132 -12
  98. data/lib/write_xlsx/worksheet.rb +397 -163
  99. data/lib/write_xlsx/worksheet/data_validation.rb +10 -14
  100. data/lib/write_xlsx/worksheet/hyperlink.rb +4 -13
  101. data/test/chart/test_write_legend_pos.rb +9 -1
  102. data/test/chartsheet/test_write_sheet_protection.rb +91 -0
  103. data/test/drawing/test_drawing_chart_01.rb +6 -2
  104. data/test/drawing/test_drawing_image_01.rb +12 -3
  105. data/test/drawing/test_drawing_shape_01.rb +8 -5
  106. data/test/drawing/test_drawing_shape_02.rb +12 -5
  107. data/test/drawing/test_drawing_shape_03.rb +8 -5
  108. data/test/drawing/test_drawing_shape_04.rb +8 -24
  109. data/test/drawing/test_drawing_shape_05.rb +8 -5
  110. data/test/drawing/test_drawing_shape_06.rb +11 -6
  111. data/test/drawing/test_drawing_shape_07.rb +11 -6
  112. data/test/drawing/test_write_a_graphic_frame_locks.rb +1 -1
  113. data/test/drawing/test_write_c_chart.rb +1 -1
  114. data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +1 -1
  115. data/test/drawing/test_write_c_nv_pr.rb +1 -1
  116. data/test/drawing/test_write_col.rb +1 -1
  117. data/test/drawing/test_write_col_off.rb +1 -1
  118. data/test/drawing/test_write_ext.rb +1 -1
  119. data/test/drawing/test_write_pos.rb +1 -1
  120. data/test/drawing/test_write_row.rb +1 -1
  121. data/test/drawing/test_write_row_off.rb +1 -1
  122. data/test/drawing/test_write_xfrm_extension.rb +1 -1
  123. data/test/drawing/test_write_xfrm_offset.rb +1 -1
  124. data/test/helper.rb +6 -1
  125. data/test/package/comments/test_comments_01.rb +54 -0
  126. data/test/package/comments/test_comments_02.rb +54 -0
  127. data/test/perl_output/chart_gauge.xlsx +0 -0
  128. data/test/perl_output/formats.xlsx +0 -0
  129. data/test/regression/_test_hyperlink31.rb +26 -0
  130. data/test/regression/images/happy.jpg +0 -0
  131. data/test/regression/images/zero_dpi.jpg +0 -0
  132. data/test/regression/test_array_formula03.rb +36 -0
  133. data/test/regression/test_autofilter08.rb +110 -0
  134. data/test/regression/test_autofilter09.rb +110 -0
  135. data/test/regression/test_autofilter10.rb +110 -0
  136. data/test/regression/test_chart_axis26.rb +10 -8
  137. data/test/regression/test_chart_axis27.rb +1 -1
  138. data/test/regression/test_chart_axis28.rb +1 -1
  139. data/test/regression/test_chart_axis29.rb +1 -1
  140. data/test/regression/test_chart_axis33.rb +1 -1
  141. data/test/regression/test_chart_axis42.rb +44 -0
  142. data/test/regression/test_chart_axis43.rb +44 -0
  143. data/test/regression/test_chart_axis44.rb +54 -0
  144. data/test/regression/test_chart_axis45.rb +54 -0
  145. data/test/regression/test_chart_axis46.rb +54 -0
  146. data/test/regression/test_chart_bar08.rb +3 -0
  147. data/test/regression/test_chart_bar11.rb +3 -0
  148. data/test/regression/test_chart_bar14.rb +3 -0
  149. data/test/regression/test_chart_chartarea05.rb +16 -17
  150. data/test/regression/test_chart_chartarea06.rb +49 -0
  151. data/test/regression/test_chart_combined10.rb +43 -0
  152. data/test/regression/test_chart_combined11.rb +63 -0
  153. data/test/regression/test_chart_data_labels25.rb +61 -0
  154. data/test/regression/test_chart_doughnut07.rb +37 -0
  155. data/test/regression/test_chart_font09.rb +1 -1
  156. data/test/regression/test_chart_format26.rb +48 -0
  157. data/test/regression/test_chart_format27.rb +58 -0
  158. data/test/regression/test_chart_format28.rb +52 -0
  159. data/test/regression/test_chart_format29.rb +59 -0
  160. data/test/regression/test_chart_format30.rb +53 -0
  161. data/test/regression/test_chart_format31.rb +60 -0
  162. data/test/regression/test_chart_legend03.rb +41 -0
  163. data/test/regression/test_chart_legend04.rb +41 -0
  164. data/test/regression/test_chart_legend05.rb +41 -0
  165. data/test/regression/test_chart_legend06.rb +41 -0
  166. data/test/regression/test_chart_legend07.rb +38 -0
  167. data/test/regression/test_chart_size03.rb +4 -1
  168. data/test/regression/test_chart_table03.rb +56 -0
  169. data/test/regression/test_comment13.rb +36 -0
  170. data/test/regression/test_comment14.rb +29 -0
  171. data/test/regression/test_cond_format14.rb +42 -0
  172. data/test/regression/test_cond_format15.rb +53 -0
  173. data/test/regression/test_cond_format16.rb +53 -0
  174. data/test/regression/test_cond_format17.rb +37 -0
  175. data/test/regression/test_cond_format18.rb +136 -0
  176. data/test/regression/test_cond_format19.rb +64 -0
  177. data/test/regression/test_cond_format20.rb +43 -0
  178. data/test/regression/test_date_1904_01.rb +1 -1
  179. data/test/regression/test_escapes04.rb +3 -0
  180. data/test/regression/test_escapes05.rb +3 -0
  181. data/test/regression/test_escapes07.rb +3 -0
  182. data/test/regression/test_escapes08.rb +3 -0
  183. data/test/regression/test_format15.rb +26 -0
  184. data/test/regression/test_hyperlink01.rb +3 -0
  185. data/test/regression/test_hyperlink02.rb +3 -0
  186. data/test/regression/test_hyperlink03.rb +4 -0
  187. data/test/regression/test_hyperlink04.rb +3 -0
  188. data/test/regression/test_hyperlink05.rb +3 -0
  189. data/test/regression/test_hyperlink06.rb +3 -0
  190. data/test/regression/test_hyperlink07.rb +3 -0
  191. data/test/regression/test_hyperlink08.rb +3 -0
  192. data/test/regression/test_hyperlink09.rb +3 -0
  193. data/test/regression/test_hyperlink10.rb +3 -0
  194. data/test/regression/test_hyperlink11.rb +3 -0
  195. data/test/regression/test_hyperlink12.rb +3 -0
  196. data/test/regression/test_hyperlink13.rb +3 -0
  197. data/test/regression/test_hyperlink14.rb +3 -0
  198. data/test/regression/test_hyperlink15.rb +3 -0
  199. data/test/regression/test_hyperlink16.rb +3 -0
  200. data/test/regression/test_hyperlink17.rb +3 -0
  201. data/test/regression/test_hyperlink18.rb +3 -0
  202. data/test/regression/test_hyperlink20.rb +3 -0
  203. data/test/regression/test_hyperlink21.rb +3 -0
  204. data/test/regression/test_hyperlink22.rb +3 -0
  205. data/test/regression/test_hyperlink23.rb +3 -0
  206. data/test/regression/test_hyperlink24.rb +3 -0
  207. data/test/regression/test_hyperlink25.rb +3 -0
  208. data/test/regression/test_hyperlink26.rb +3 -0
  209. data/test/regression/test_hyperlink27.rb +27 -0
  210. data/test/regression/test_hyperlink28.rb +50 -0
  211. data/test/regression/test_hyperlink29.rb +27 -0
  212. data/test/regression/test_hyperlink30.rb +36 -0
  213. data/test/regression/test_image08.rb +5 -4
  214. data/test/regression/test_image15.rb +4 -2
  215. data/test/regression/test_image28.rb +1 -1
  216. data/test/regression/test_image35.rb +26 -0
  217. data/test/regression/test_image36.rb +26 -0
  218. data/test/regression/test_image44.rb +28 -0
  219. data/test/regression/test_image45.rb +28 -0
  220. data/test/regression/test_image46.rb +29 -0
  221. data/test/regression/test_image47.rb +28 -0
  222. data/test/regression/test_object_position01.rb +26 -0
  223. data/test/regression/test_object_position02.rb +26 -0
  224. data/test/regression/test_object_position03.rb +26 -0
  225. data/test/regression/test_object_position04.rb +44 -0
  226. data/test/regression/test_object_position06.rb +28 -0
  227. data/test/regression/test_object_position07.rb +28 -0
  228. data/test/regression/test_object_position08.rb +47 -0
  229. data/test/regression/test_object_position09.rb +50 -0
  230. data/test/regression/test_object_position10.rb +28 -0
  231. data/test/regression/test_properties01.rb +1 -4
  232. data/test/regression/test_properties02.rb +1 -4
  233. data/test/regression/test_properties03.rb +26 -0
  234. data/test/regression/test_properties04.rb +61 -0
  235. data/test/regression/test_properties05.rb +30 -0
  236. data/test/regression/test_shape_connect01.rb +4 -2
  237. data/test/regression/test_table03.rb +3 -0
  238. data/test/regression/test_table04.rb +3 -0
  239. data/test/regression/test_table05.rb +3 -0
  240. data/test/regression/test_table06.rb +3 -0
  241. data/test/regression/test_table20.rb +34 -0
  242. data/test/regression/test_table21.rb +36 -0
  243. data/test/regression/test_table22.rb +32 -0
  244. data/test/regression/test_table23.rb +56 -0
  245. data/test/regression/test_utf8_11.rb +23 -0
  246. data/test/regression/xlsx_files/array_formula03.xlsx +0 -0
  247. data/test/regression/xlsx_files/autofilter08.xlsx +0 -0
  248. data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
  249. data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
  250. data/test/regression/xlsx_files/chart_axis26.xlsx +0 -0
  251. data/test/regression/xlsx_files/chart_axis27.xlsx +0 -0
  252. data/test/regression/xlsx_files/chart_axis28.xlsx +0 -0
  253. data/test/regression/xlsx_files/chart_axis29.xlsx +0 -0
  254. data/test/regression/xlsx_files/chart_axis33.xlsx +0 -0
  255. data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
  256. data/test/regression/xlsx_files/chart_axis43.xlsx +0 -0
  257. data/test/regression/xlsx_files/chart_axis44.xlsx +0 -0
  258. data/test/regression/xlsx_files/chart_axis45.xlsx +0 -0
  259. data/test/regression/xlsx_files/chart_axis46.xlsx +0 -0
  260. data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
  261. data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
  262. data/test/regression/xlsx_files/chart_combined10.xlsx +0 -0
  263. data/test/regression/xlsx_files/chart_combined11.xlsx +0 -0
  264. data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
  265. data/test/regression/xlsx_files/chart_doughnut07.xlsx +0 -0
  266. data/test/regression/xlsx_files/chart_font09.xlsx +0 -0
  267. data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
  268. data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
  269. data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
  270. data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
  271. data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
  272. data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
  273. data/test/regression/xlsx_files/chart_legend03.xlsx +0 -0
  274. data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
  275. data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
  276. data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
  277. data/test/regression/xlsx_files/chart_legend07.xlsx +0 -0
  278. data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
  279. data/test/regression/xlsx_files/comment13.xlsx +0 -0
  280. data/test/regression/xlsx_files/comment14.xlsx +0 -0
  281. data/test/regression/xlsx_files/cond_format14.xlsx +0 -0
  282. data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
  283. data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
  284. data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
  285. data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
  286. data/test/regression/xlsx_files/cond_format19.xlsx +0 -0
  287. data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
  288. data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
  289. data/test/regression/xlsx_files/format15.xlsx +0 -0
  290. data/test/regression/xlsx_files/hyperlink27.xlsx +0 -0
  291. data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
  292. data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
  293. data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
  294. data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
  295. data/test/regression/xlsx_files/image35.xlsx +0 -0
  296. data/test/regression/xlsx_files/image36.xlsx +0 -0
  297. data/test/regression/xlsx_files/image44.xlsx +0 -0
  298. data/test/regression/xlsx_files/image45.xlsx +0 -0
  299. data/test/regression/xlsx_files/image46.xlsx +0 -0
  300. data/test/regression/xlsx_files/image47.xlsx +0 -0
  301. data/test/regression/xlsx_files/object_position01.xlsx +0 -0
  302. data/test/regression/xlsx_files/object_position02.xlsx +0 -0
  303. data/test/regression/xlsx_files/object_position03.xlsx +0 -0
  304. data/test/regression/xlsx_files/object_position04.xlsx +0 -0
  305. data/test/regression/xlsx_files/object_position06.xlsx +0 -0
  306. data/test/regression/xlsx_files/object_position07.xlsx +0 -0
  307. data/test/regression/xlsx_files/object_position08.xlsx +0 -0
  308. data/test/regression/xlsx_files/object_position09.xlsx +0 -0
  309. data/test/regression/xlsx_files/object_position10.xlsx +0 -0
  310. data/test/regression/xlsx_files/properties03.xlsx +0 -0
  311. data/test/regression/xlsx_files/properties04.xlsx +0 -0
  312. data/test/regression/xlsx_files/properties05.xlsx +0 -0
  313. data/test/regression/xlsx_files/table21.xlsx +0 -0
  314. data/test/regression/xlsx_files/table22.xlsx +0 -0
  315. data/test/regression/xlsx_files/table23.xlsx +0 -0
  316. data/test/regression/xlsx_files/utf8_11.xlsx +0 -0
  317. data/test/test_example_match.rb +836 -771
  318. data/test/workbook/test_check_sheetname.rb +61 -0
  319. data/test/workbook/test_worksheet_by_name.rb +35 -0
  320. data/test/workbook/test_write_workbook_view.rb +117 -0
  321. data/test/worksheet/test_cond_format_22.rb +266 -0
  322. data/test/worksheet/test_cond_format_23.rb +242 -0
  323. data/test/worksheet/test_cond_format_24.rb +303 -0
  324. data/test/worksheet/test_data_bar_01.rb +53 -0
  325. data/test/worksheet/test_data_bar_02.rb +79 -0
  326. data/test/worksheet/test_data_bar_03.rb +147 -0
  327. data/test/worksheet/test_data_bar_04.rb +145 -0
  328. data/test/worksheet/test_data_bar_05.rb +147 -0
  329. data/test/worksheet/test_data_bar_06.rb +145 -0
  330. data/test/worksheet/test_data_bar_07.rb +146 -0
  331. data/test/worksheet/test_data_bar_08.rb +54 -0
  332. data/test/worksheet/test_data_bar_09.rb +80 -0
  333. data/test/worksheet/test_data_bar_10.rb +165 -0
  334. data/test/worksheet/test_data_bar_11.rb +167 -0
  335. data/test/worksheet/test_data_bar_12.rb +104 -0
  336. data/test/worksheet/test_write_data_validation_02.rb +44 -0
  337. data/test/worksheet/test_write_hyperlink.rb +0 -7
  338. data/test/worksheet/test_write_sheet_view.rb +19 -1
  339. metadata +308 -5
  340. data/test/package/comments/test_write_text_t.rb +0 -44
@@ -219,10 +219,17 @@ def check_valid_citeria_types
219
219
  end
220
220
 
221
221
  def convert_date_time_value_if_required
222
- @date_1904 = date_1904?
223
222
  if @validate == 'date' || @validate == 'time'
224
- unless convert_date_time_value(:value) && convert_date_time_value(:maximum)
225
- raise WriteXLSXOptionParameterError, "Invalid date/time value."
223
+ date_time = convert_date_time(@value)
224
+ if date_time
225
+ @value = date_time
226
+ end
227
+
228
+ if @maximum
229
+ date_time = convert_date_time(@maximum)
230
+ if date_time
231
+ @maximum = date_time
232
+ end
226
233
  end
227
234
  end
228
235
  end
@@ -292,17 +299,6 @@ def valid_criteria_type # :nodoc:
292
299
  }
293
300
  end
294
301
 
295
- def convert_date_time_value(key) # :nodoc:
296
- value = instance_variable_get("@#{key}")
297
- if value && value.to_s =~ /T/
298
- date_time = convert_date_time(value)
299
- instance_variable_set("@#{key}", date_time) if date_time
300
- date_time
301
- else
302
- true
303
- end
304
- end
305
-
306
302
  def date_1904?
307
303
  @date_1904
308
304
  end
@@ -27,13 +27,7 @@ def initialize(url, str, tip)
27
27
  normalized_str = str.sub(/^mailto:/, '')
28
28
 
29
29
  # Split url into the link and optional anchor/location.
30
- url, *anchors = url.split(/#/)
31
- url ||= ''
32
- if anchors.empty?
33
- @url_str = nil
34
- else
35
- @url_str = anchors.join('#')
36
- end
30
+ url, @url_str = url.split(/#/, 2)
37
31
 
38
32
  # Escape URL unless it looks already escaped.
39
33
  url = escape_url(url)
@@ -135,15 +129,12 @@ def initialize(url, str, tip)
135
129
  # Strip the mailto header.
136
130
  str.sub!(/^mailto:/, '')
137
131
 
132
+ # Split url into the link and optional anchor/location.
133
+ url, url_str = url.split(/#/, 2)
134
+
138
135
  # Escape URL unless it looks already escaped.
139
136
  url = escape_url(url)
140
137
 
141
- # External Workbook links need to be modified into the right format.
142
- # The URL will look something like 'c:\temp\file.xlsx#Sheet!A1'.
143
- # We need the part to the left of the # as the URL and the part to
144
- # the right as the "location" string (if it exists).
145
- url, url_str = url.split(/#/)
146
-
147
138
  # Add the file:/// URI to the url if non-local.
148
139
  if url =~ %r![:]! || # Windows style "C:/" link.
149
140
  url =~ %r!^\\\\! # Network share.
@@ -7,9 +7,17 @@ def setup
7
7
  @chart = Writexlsx::Chart.new('Bar')
8
8
  end
9
9
 
10
- def test_write_legend_pos
10
+ def test_write_legend_pos_default
11
11
  expected = '<c:legendPos val="r"/>'
12
12
  result = @chart.__send__('write_legend_pos', 'r')
13
13
  assert_equal(expected, result)
14
14
  end
15
+
16
+ def test_write_legend_overlay_top_right
17
+ expected = '<c:legend><c:legendPos val="tr"/><c:layout/><c:overlay val="1"/></c:legend>'
18
+ @chart.set_legend(:position => 'overlay_top_right')
19
+ @chart.__send__('write_legend')
20
+ result = @chart.instance_variable_get(:@writer).string
21
+ assert_equal(expected, result)
22
+ end
15
23
  end
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestChartsheetWriteSheetProtection < Minitest::Test
5
+ def setup
6
+ workbook = WriteXLSX.new(StringIO.new)
7
+ workbook.add_chart(:type => 'line')
8
+ @chartsheet = workbook.sheets.first
9
+ end
10
+
11
+ def test_chartsheet_write_sheet_protection
12
+ expected = '<sheetProtection password="83AF" content="1" objects="1"/>'
13
+
14
+ @chartsheet.protect('', {})
15
+ result = @chartsheet.__send__(:write_sheet_protection)
16
+ assert_equal(expected_to_array(expected), got_to_array(result))
17
+ end
18
+
19
+ def test_chartsheet_write_sheet_protection
20
+ expected = '<sheetProtection password="83AF" content="1" objects="1"/>'
21
+
22
+ @chartsheet.protect('password', {})
23
+ result = @chartsheet.__send__(:write_sheet_protection)
24
+ assert_equal(expected_to_array(expected), got_to_array(result))
25
+ end
26
+
27
+ def test_chartsheet_write_sheet_protection_without_password_and_content
28
+ expected = '<sheetProtection content="1"/>'
29
+
30
+ @chartsheet.protect('', {:objects => 0})
31
+ result = @chartsheet.__send__(:write_sheet_protection)
32
+ assert_equal(expected_to_array(expected), got_to_array(result))
33
+ end
34
+
35
+ def test_chartsheet_write_sheet_protection_with_opjects0_option
36
+ expected = '<sheetProtection password="83AF" content="1"/>'
37
+
38
+ @chartsheet.protect('password', { :objects => 0 })
39
+ result = @chartsheet.__send__(:write_sheet_protection)
40
+ assert_equal(expected_to_array(expected), got_to_array(result))
41
+ end
42
+
43
+ def test_chartsheet_write_sheet_protection_without_password
44
+ expected = '<sheetProtection objects="1"/>'
45
+
46
+ @chartsheet.protect('', { :content => 0 })
47
+ result = @chartsheet.__send__(:write_sheet_protection)
48
+ assert_equal(expected_to_array(expected), got_to_array(result))
49
+ end
50
+
51
+ def test_chartsheet_write_sheet_protection_without_password_and_content_option
52
+ expected = ''
53
+
54
+ @chartsheet.protect('', { :content => 0, :objects => 0 })
55
+ result = @chartsheet.__send__(:write_sheet_protection) || ''
56
+ assert_equal(expected_to_array(expected), got_to_array(result))
57
+ end
58
+
59
+ def test_chartsheet_write_sheet_protection_with_password_and_content_objects_option
60
+ expected = '<sheetProtection password="83AF"/>'
61
+
62
+ @chartsheet.protect('password', { :content => 0, :objects => 0 })
63
+ result = @chartsheet.__send__(:write_sheet_protection)
64
+ assert_equal(expected_to_array(expected), got_to_array(result))
65
+ end
66
+
67
+ def test_chartsheet_write_sheet_protection_with_password_full_options
68
+ expected = '<sheetProtection password="83AF" content="1" objects="1"/>'
69
+
70
+ options = {
71
+ :objects => 1,
72
+ :scenarios => 1,
73
+ :format_cells => 1,
74
+ :format_columns => 1,
75
+ :format_rows => 1,
76
+ :insert_columns => 1,
77
+ :insert_rows => 1,
78
+ :insert_hyperlinks => 1,
79
+ :delete_columns => 1,
80
+ :delete_rows => 1,
81
+ :select_locked_cells => 0,
82
+ :sort => 1,
83
+ :autofilter => 1,
84
+ :pivot_tables => 1,
85
+ :select_unlocked_cells => 0
86
+ }
87
+ @chartsheet.protect('password', options)
88
+ result = @chartsheet.__send__(:write_sheet_protection)
89
+ assert_equal(expected_to_array(expected), got_to_array(result))
90
+ end
91
+ end
@@ -4,8 +4,12 @@
4
4
 
5
5
  class DrawingChart011 < Minitest::Test
6
6
  def test_drawing_chart_01
7
- @obj = Writexlsx::Drawing.new
8
- @obj.add_drawing_object(1, 4, 8, 457200, 104775, 12, 22, 152400, 180975)
7
+ @obj = Writexlsx::Drawings.new
8
+ dimensions = [4, 8, 457200, 104775, 12, 22, 152400, 180975]
9
+ drawing = Writexlsx::Drawing.new(
10
+ 1, dimensions, nil, nil, nil, nil, 1
11
+ )
12
+ @obj.add_drawing_object(drawing)
9
13
  @obj.embedded = true
10
14
  @obj.assemble_xml_file
11
15
  result = got_to_array(@obj.xml_str)
@@ -4,9 +4,18 @@
4
4
 
5
5
  class DrawingImage011 < Minitest::Test
6
6
  def test_drawing_image_01
7
- @obj = Writexlsx::Drawing.new
8
- @obj.add_drawing_object(2, 2, 1, 0, 0, 3, 6, 533257, 190357,
9
- 1219200, 190500, 1142857, 1142857, 'republic.png')
7
+ @obj = Writexlsx::Drawings.new
8
+ dimensions = [
9
+ 2, 1, 0, 0, 3, 6, 533257, 190357, 1219200, 190500
10
+ ]
11
+ drawing = Writexlsx::Drawing.new(
12
+ 2, dimensions, 1142857, 1142857, 'republic.png', nil, 2
13
+ )
14
+ @obj.add_drawing_object(drawing)
15
+ # @obj.add_drawing_object(
16
+ # 2, 2, 1, 0, 0, 3, 6, 533257, 190357,
17
+ # 1219200, 190500, 1142857, 1142857, 'republic.png', nil, 2
18
+ # )
10
19
  @obj.embedded = true
11
20
  @obj.assemble_xml_file
12
21
  result = got_to_array(@obj.xml_str)
@@ -8,12 +8,15 @@ def test_drawing_shape_01
8
8
  shape = Writexlsx::Shape.new
9
9
  shape.id = 1000
10
10
 
11
- @obj = Writexlsx::Drawing.new
11
+ @obj = Writexlsx::Drawings.new
12
12
  @obj.embedded = 1
13
- @obj.add_drawing_object(
14
- 3, 4, 8, 209550, 95250, 12, 22, 209660,
15
- 96260, 10000, 20000, 95250, 190500, 'rect 1', shape
16
- )
13
+ dimensions = [
14
+ 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000
15
+ ]
16
+ drawing = Writexlsx::Drawing.new(
17
+ 3, dimensions, 95250, 190500, 'rect 1', shape, 1
18
+ )
19
+ @obj.add_drawing_object(drawing)
17
20
  @obj.assemble_xml_file
18
21
  result = got_to_array(@obj.xml_str)
19
22
  expected = expected_to_array(<<EOS
@@ -13,12 +13,19 @@ def test_drawing_shape_02
13
13
  # Set bulk shape properties via set_properties method
14
14
  shape.set_properties(:type => 'straightConnector1', :connect => 1)
15
15
 
16
- @obj = Writexlsx::Drawing.new
16
+ @obj = Writexlsx::Drawings.new
17
17
  @obj.embedded = 1
18
- @obj.add_drawing_object(
19
- 3, 4, 8, 209550, 95250, 12, 22, 209660,
20
- 96260, 10000, 20000, 95250, 190500, 'Connector 1', shape
21
- )
18
+ dimensions = [
19
+ 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000
20
+ ]
21
+ drawing = Writexlsx::Drawing.new(
22
+ 3, dimensions, 95250, 190500, 'Connector 1', shape, 1
23
+ )
24
+ @obj.add_drawing_object(drawing)
25
+ # @obj.add_drawing_object(
26
+ # 3, 4, 8, 209550, 95250, 12, 22, 209660,
27
+ # 96260, 10000, 20000, 95250, 190500, 'Connector 1', shape, 1
28
+ # )
22
29
  @obj.assemble_xml_file
23
30
  result = got_to_array(@obj.xml_str)
24
31
  expected = expected_to_array(<<EOS
@@ -13,12 +13,15 @@ def test_drawing_shape_03
13
13
  shape.end = 1002
14
14
  shape.end_index = 4
15
15
 
16
- @obj = Writexlsx::Drawing.new
16
+ @obj = Writexlsx::Drawings.new
17
17
  @obj.embedded = 1
18
- @obj.add_drawing_object(
19
- 3, 4, 8, 209550, 95250, 12, 22, 209660,
20
- 96260, 10000, 20000, 95250, 190500, '', shape
21
- )
18
+ dimensions = [
19
+ 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000
20
+ ]
21
+ drawing = Writexlsx::Drawing.new(
22
+ 3, dimensions, 95250, 190500, '', shape, 1
23
+ )
24
+ @obj.add_drawing_object(drawing)
22
25
  @obj.__send__('write_nv_cxn_sp_pr', 1, shape)
23
26
 
24
27
  result = got_to_array(@obj.xml_str)
@@ -19,36 +19,20 @@ def test_drawing_shape_04
19
19
  shape.palette[0] = [0x00, 0x00, 0x00, 0x00]
20
20
  shape.palette[7] = [0x00, 0x00, 0x00, 0x00]
21
21
 
22
- @obj = Writexlsx::Drawing.new
22
+ @obj = Writexlsx::Drawings.new
23
23
  @obj.embedded = 2
24
- @obj.add_drawing_object(
25
- 3, 4, 8, 209550, 95250, 12, 22, 209660,
26
- 96260, 10000, 20000, 95250, 190500, 'rect 1', shape
27
- )
24
+ dimensions = [
25
+ 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000
26
+ ]
27
+ drawing = Writexlsx::Drawing.new(
28
+ 3, dimensions, 95250, 190500, 'rect 1', shape, 1
29
+ )
30
+ @obj.add_drawing_object(drawing)
28
31
  @obj.assemble_xml_file
29
32
 
30
33
  result = got_to_array(@obj.xml_str)
31
34
  expected = expected_to_array(expected_str)
32
35
  assert_equal(expected, result)
33
-
34
- drawing1 = Writexlsx::Drawing.new
35
- @worksheet.instance_variable_set(:@drawing, drawing1)
36
- inserted = @worksheet.insert_shape(4, 8, shape, 300, 400)
37
-
38
- # Force the shape cell x offset to be non-integer
39
- inserted.x_offset += 0.5
40
- @worksheet.__send__(:prepare_shape, 0, 1)
41
-
42
- # Truncate drawing object to just the dimensions
43
- drawing1.instance_variable_get(:@drawings)[0] =
44
- drawing1.instance_variable_get(:@drawings)[0][0..12]
45
-
46
- # Verify fractional dimensions have been rounded
47
- expected = [
48
- 3, 12, 24, 423862, 0, 13, 26, 290512,
49
- 95250, 7739062, 4572000, 476250, 476250
50
- ]
51
- assert_equal(expected, drawing1.instance_variable_get(:@drawings)[0])
52
36
  end
53
37
 
54
38
  def expected_str
@@ -19,14 +19,17 @@ def test_drawing_shape_05
19
19
  shape.flip_h = 1
20
20
  shape.rotation = 90
21
21
 
22
- @obj = Writexlsx::Drawing.new
22
+ @obj = Writexlsx::Drawings.new
23
23
  @obj.instance_variable_set(:@palette, @worksheet.instance_variable_get(:@palette))
24
24
  @obj.embedded = 1
25
25
 
26
- @obj.add_drawing_object(
27
- 3, 4, 8, 209550, 95250, 12, 22, 209660,
28
- 96260, 10000, 20000, 95250, 190500, '', shape
29
- )
26
+ dimensions = [
27
+ 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000
28
+ ]
29
+ drawing = Writexlsx::Drawing.new(
30
+ 3, dimensions, 95250, 190500, '', shape, 1
31
+ )
32
+ @obj.add_drawing_object(drawing)
30
33
  @obj.__send__(:write_a_xfrm, 100, 200, 10, 20, shape)
31
34
 
32
35
  result = got_to_array(@obj.xml_str)
@@ -16,13 +16,18 @@ def test_drawing_shape_06
16
16
  shape = Writexlsx::Shape.new
17
17
  shape.adjustments = -10, 100, 20
18
18
 
19
- @obj = Writexlsx::Drawing.new
19
+ @obj = Writexlsx::Drawings.new
20
20
  @obj.embedded = 1
21
-
22
- @obj.add_drawing_object(
23
- 3, 4, 8, 209550, 95250, 12, 22, 209660,
24
- 96260, 10000, 20000, 95250, 190500, '', shape
25
- )
21
+ dimensions = [
22
+ 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000
23
+ ]
24
+ drawing = Writexlsx::Drawing.new(
25
+ 3, dimensions, 95250, 190500, '', shape, 1
26
+ )
27
+ @obj.add_drawing_object(drawing)
28
+ # 3, 4, 8, 209550, 95250, 12, 22, 209660,
29
+ # 96260, 10000, 20000, 95250, 190500, '', shape
30
+ # )
26
31
  @obj.__send__(:write_a_av_lst, shape)
27
32
 
28
33
  result = got_to_array(@obj.xml_str)
@@ -17,13 +17,18 @@ def test_drawing_shape_07
17
17
  shape.line_weight = 5
18
18
  shape.line_type = 'lgDashDot'
19
19
 
20
- @obj = Writexlsx::Drawing.new
20
+ @obj = Writexlsx::Drawings.new
21
21
  @obj.embedded = 1
22
-
23
- @obj.add_drawing_object(
24
- 3, 4, 8, 209550, 95250, 12, 22, 209660,
25
- 96260, 10000, 20000, 95250, 190500, '', shape
26
- )
22
+ dimensions = [
23
+ 4, 8, 209550, 95250, 12, 22, 209660, 96260, 10000, 20000
24
+ ]
25
+ drawing = Writexlsx::Drawing.new(
26
+ 3, dimensions, 95250, 190500, '', shape, 1
27
+ )
28
+ @obj.add_drawing_object(drawing)
29
+ # 3, 4, 8, 209550, 95250, 12, 22, 209660,
30
+ # 96260, 10000, 20000, 95250, 190500, '', shape
31
+ # )
27
32
  @obj.__send__(:write_a_ln, shape)
28
33
 
29
34
  result = got_to_array(@obj.xml_str)
@@ -4,7 +4,7 @@
4
4
 
5
5
  class TestWriteAGraphicFrameLocks < Minitest::Test
6
6
  def setup
7
- @drawing = Writexlsx::Drawing.new
7
+ @drawing = Writexlsx::Drawings.new
8
8
  end
9
9
 
10
10
  def test_write_a_graphic_frame_locks
@@ -4,7 +4,7 @@
4
4
 
5
5
  class TestWriteCChart < Minitest::Test
6
6
  def setup
7
- @drawing = Writexlsx::Drawing.new
7
+ @drawing = Writexlsx::Drawings.new
8
8
  end
9
9
 
10
10
  def test_write_c_chart
@@ -4,7 +4,7 @@
4
4
 
5
5
  class TestWriteCNvGraphicFramePr < Minitest::Test
6
6
  def setup
7
- @drawing = Writexlsx::Drawing.new
7
+ @drawing = Writexlsx::Drawings.new
8
8
  end
9
9
 
10
10
  def test_write_c_nv_graphic_frame_pr_01