caxlsx 3.2.0 → 3.4.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 (301) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +394 -354
  5. data/LICENSE +21 -21
  6. data/README.md +184 -168
  7. data/Rakefile +28 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +29 -32
  10. data/lib/axlsx/content_type/content_type.rb +22 -26
  11. data/lib/axlsx/content_type/default.rb +21 -25
  12. data/lib/axlsx/content_type/override.rb +21 -25
  13. data/lib/axlsx/doc_props/app.rb +230 -235
  14. data/lib/axlsx/doc_props/core.rb +34 -39
  15. data/lib/axlsx/drawing/area_chart.rb +96 -99
  16. data/lib/axlsx/drawing/area_series.rb +107 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +21 -26
  18. data/lib/axlsx/drawing/axes.rb +60 -61
  19. data/lib/axlsx/drawing/axis.rb +185 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +145 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +135 -138
  22. data/lib/axlsx/drawing/bar_series.rb +91 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +56 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +60 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +80 -85
  26. data/lib/axlsx/drawing/chart.rb +294 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +92 -90
  28. data/lib/axlsx/drawing/drawing.rb +163 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +51 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +97 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +64 -68
  32. data/lib/axlsx/drawing/line_chart.rb +96 -99
  33. data/lib/axlsx/drawing/line_series.rb +107 -110
  34. data/lib/axlsx/drawing/marker.rb +80 -84
  35. data/lib/axlsx/drawing/num_data.rb +47 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +58 -62
  37. data/lib/axlsx/drawing/num_val.rb +31 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +97 -99
  39. data/lib/axlsx/drawing/pic.rb +244 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +39 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +42 -47
  42. data/lib/axlsx/drawing/pie_series.rb +69 -74
  43. data/lib/axlsx/drawing/scaling.rb +57 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +71 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +126 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +41 -45
  47. data/lib/axlsx/drawing/series.rb +67 -69
  48. data/lib/axlsx/drawing/series_title.rb +23 -25
  49. data/lib/axlsx/drawing/str_data.rb +37 -42
  50. data/lib/axlsx/drawing/str_val.rb +31 -34
  51. data/lib/axlsx/drawing/title.rb +104 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +95 -97
  53. data/lib/axlsx/drawing/val_axis.rb +34 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +39 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +63 -66
  57. data/lib/axlsx/package.rb +397 -388
  58. data/lib/axlsx/rels/relationship.rb +127 -130
  59. data/lib/axlsx/rels/relationships.rb +29 -32
  60. data/lib/axlsx/stylesheet/border.rb +70 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +69 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +124 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +38 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +68 -72
  65. data/lib/axlsx/stylesheet/color.rb +77 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +75 -79
  67. data/lib/axlsx/stylesheet/fill.rb +31 -35
  68. data/lib/axlsx/stylesheet/font.rb +157 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +101 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +36 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +83 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +71 -73
  73. data/lib/axlsx/stylesheet/styles.rb +543 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +51 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +74 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +42 -46
  77. data/lib/axlsx/stylesheet/xf.rb +144 -147
  78. data/lib/axlsx/util/accessors.rb +62 -64
  79. data/lib/axlsx/util/constants.rb +414 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +24 -11
  81. data/lib/axlsx/util/options_parser.rb +15 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +88 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +180 -179
  84. data/lib/axlsx/util/storage.rb +142 -146
  85. data/lib/axlsx/util/validators.rb +315 -312
  86. data/lib/axlsx/util/zip_command.rb +71 -73
  87. data/lib/axlsx/version.rb +4 -5
  88. data/lib/axlsx/workbook/defined_name.rb +129 -128
  89. data/lib/axlsx/workbook/defined_names.rb +20 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +74 -77
  91. data/lib/axlsx/workbook/workbook.rb +430 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +75 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +20 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +78 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +243 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +79 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +32 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +552 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +16 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +142 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +34 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +108 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +90 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +78 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +81 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +216 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +23 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +127 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +266 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +25 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +28 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +65 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +51 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +80 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +32 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +42 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +237 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +138 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +332 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +63 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +23 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +38 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +53 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +266 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +173 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +32 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +99 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +28 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +18 -18
  139. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  140. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +117 -118
  141. data/lib/axlsx/workbook/worksheet/sheet_view.rb +206 -213
  142. data/lib/axlsx/workbook/worksheet/table.rb +100 -102
  143. data/lib/axlsx/workbook/worksheet/table_style_info.rb +48 -49
  144. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  145. data/lib/axlsx/workbook/worksheet/worksheet.rb +857 -786
  146. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +59 -58
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +73 -74
  149. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  150. data/lib/axlsx.rb +218 -185
  151. data/lib/caxlsx.rb +1 -2
  152. data/lib/schema/dc.xsd +118 -118
  153. data/lib/schema/dcmitype.xsd +51 -51
  154. data/lib/schema/dcterms.xsd +331 -331
  155. data/lib/schema/dml-chartDrawing.xsd +146 -146
  156. data/lib/schema/dml-compatibility.xsd +14 -14
  157. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  158. data/lib/schema/dml-main.xsd +3048 -3048
  159. data/lib/schema/dml-picture.xsd +23 -23
  160. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  161. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  162. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  163. data/lib/schema/shared-bibliography.xsd +144 -144
  164. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  165. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  166. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  167. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  168. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  169. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  170. data/lib/schema/shared-relationshipReference.xsd +25 -25
  171. data/lib/schema/vml-main.xsd +569 -569
  172. data/lib/schema/vml-officeDrawing.xsd +509 -509
  173. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  174. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  175. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  176. data/lib/schema/xml.xsd +116 -116
  177. metadata +5 -252
  178. data/test/benchmark.rb +0 -72
  179. data/test/content_type/tc_content_type.rb +0 -76
  180. data/test/content_type/tc_default.rb +0 -16
  181. data/test/content_type/tc_override.rb +0 -14
  182. data/test/doc_props/tc_app.rb +0 -43
  183. data/test/doc_props/tc_core.rb +0 -42
  184. data/test/drawing/tc_area_chart.rb +0 -39
  185. data/test/drawing/tc_area_series.rb +0 -71
  186. data/test/drawing/tc_axes.rb +0 -8
  187. data/test/drawing/tc_axis.rb +0 -112
  188. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  189. data/test/drawing/tc_bar_chart.rb +0 -86
  190. data/test/drawing/tc_bar_series.rb +0 -46
  191. data/test/drawing/tc_bubble_chart.rb +0 -44
  192. data/test/drawing/tc_bubble_series.rb +0 -21
  193. data/test/drawing/tc_cat_axis.rb +0 -31
  194. data/test/drawing/tc_cat_axis_data.rb +0 -27
  195. data/test/drawing/tc_chart.rb +0 -123
  196. data/test/drawing/tc_d_lbls.rb +0 -57
  197. data/test/drawing/tc_data_source.rb +0 -23
  198. data/test/drawing/tc_drawing.rb +0 -80
  199. data/test/drawing/tc_graphic_frame.rb +0 -27
  200. data/test/drawing/tc_hyperlink.rb +0 -64
  201. data/test/drawing/tc_line_3d_chart.rb +0 -47
  202. data/test/drawing/tc_line_chart.rb +0 -39
  203. data/test/drawing/tc_line_series.rb +0 -71
  204. data/test/drawing/tc_marker.rb +0 -44
  205. data/test/drawing/tc_named_axis_data.rb +0 -27
  206. data/test/drawing/tc_num_data.rb +0 -31
  207. data/test/drawing/tc_num_val.rb +0 -29
  208. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  209. data/test/drawing/tc_pic.rb +0 -103
  210. data/test/drawing/tc_picture_locking.rb +0 -72
  211. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  212. data/test/drawing/tc_pie_series.rb +0 -33
  213. data/test/drawing/tc_scaling.rb +0 -36
  214. data/test/drawing/tc_scatter_chart.rb +0 -48
  215. data/test/drawing/tc_scatter_series.rb +0 -74
  216. data/test/drawing/tc_ser_axis.rb +0 -31
  217. data/test/drawing/tc_series.rb +0 -23
  218. data/test/drawing/tc_series_title.rb +0 -54
  219. data/test/drawing/tc_str_data.rb +0 -18
  220. data/test/drawing/tc_str_val.rb +0 -30
  221. data/test/drawing/tc_title.rb +0 -70
  222. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  223. data/test/drawing/tc_val_axis.rb +0 -24
  224. data/test/drawing/tc_view_3D.rb +0 -54
  225. data/test/drawing/tc_vml_drawing.rb +0 -25
  226. data/test/drawing/tc_vml_shape.rb +0 -106
  227. data/test/fixtures/image1.gif +0 -0
  228. data/test/fixtures/image1.jpeg +0 -0
  229. data/test/fixtures/image1.jpg +0 -0
  230. data/test/fixtures/image1.png +0 -0
  231. data/test/fixtures/image1_fake.jpg +0 -0
  232. data/test/profile.rb +0 -24
  233. data/test/rels/tc_relationship.rb +0 -52
  234. data/test/rels/tc_relationships.rb +0 -37
  235. data/test/stylesheet/tc_border.rb +0 -37
  236. data/test/stylesheet/tc_border_pr.rb +0 -32
  237. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  238. data/test/stylesheet/tc_cell_protection.rb +0 -29
  239. data/test/stylesheet/tc_cell_style.rb +0 -57
  240. data/test/stylesheet/tc_color.rb +0 -43
  241. data/test/stylesheet/tc_dxf.rb +0 -81
  242. data/test/stylesheet/tc_fill.rb +0 -18
  243. data/test/stylesheet/tc_font.rb +0 -133
  244. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  245. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  246. data/test/stylesheet/tc_num_fmt.rb +0 -30
  247. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  248. data/test/stylesheet/tc_styles.rb +0 -309
  249. data/test/stylesheet/tc_table_style.rb +0 -44
  250. data/test/stylesheet/tc_table_style_element.rb +0 -45
  251. data/test/stylesheet/tc_table_styles.rb +0 -29
  252. data/test/stylesheet/tc_xf.rb +0 -120
  253. data/test/tc_axlsx.rb +0 -109
  254. data/test/tc_helper.rb +0 -10
  255. data/test/tc_package.rb +0 -317
  256. data/test/util/tc_mime_type_utils.rb +0 -13
  257. data/test/util/tc_serialized_attributes.rb +0 -19
  258. data/test/util/tc_simple_typed_list.rb +0 -77
  259. data/test/util/tc_validators.rb +0 -210
  260. data/test/workbook/tc_defined_name.rb +0 -49
  261. data/test/workbook/tc_shared_strings_table.rb +0 -59
  262. data/test/workbook/tc_workbook.rb +0 -165
  263. data/test/workbook/tc_workbook_view.rb +0 -50
  264. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  265. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  266. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  267. data/test/workbook/worksheet/tc_break.rb +0 -49
  268. data/test/workbook/worksheet/tc_cell.rb +0 -465
  269. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  270. data/test/workbook/worksheet/tc_col.rb +0 -93
  271. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  272. data/test/workbook/worksheet/tc_comment.rb +0 -72
  273. data/test/workbook/worksheet/tc_comments.rb +0 -57
  274. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  275. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  276. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  277. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  278. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  279. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  280. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  281. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  282. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  283. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  284. data/test/workbook/worksheet/tc_pane.rb +0 -54
  285. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  286. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  287. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  288. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  289. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  290. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  291. data/test/workbook/worksheet/tc_row.rb +0 -160
  292. data/test/workbook/worksheet/tc_selection.rb +0 -55
  293. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  294. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  295. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  296. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  297. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  298. data/test/workbook/worksheet/tc_table.rb +0 -77
  299. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  300. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  301. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,130 +1,127 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- # A relationship defines a reference between package parts.
4
- # @note Packages automatically manage relationships.
5
- class Relationship
6
-
7
- class << self
8
- # Keeps track of relationship ids in use.
9
- # @return [Array]
10
- def ids_cache
11
- Thread.current[:axlsx_relationship_ids_cache] ||= {}
12
- end
13
-
14
- # Initialize cached ids.
15
- #
16
- # This should be called before serializing a package (see {Package#serialize} and
17
- # {Package#to_stream}) to make sure that serialization is idempotent (i.e.
18
- # Relationship instances are generated with the same IDs everytime the package
19
- # is serialized).
20
- def initialize_ids_cache
21
- Thread.current[:axlsx_relationship_ids_cache] = {}
22
- end
23
-
24
- # Clear cached ids.
25
- #
26
- # This should be called after serializing a package (see {Package#serialize} and
27
- # {Package#to_stream}) to free the memory allocated for cache.
28
- #
29
- # Also, calling this avoids memory leaks (cached ids lingering around
30
- # forever).
31
- def clear_ids_cache
32
- Thread.current[:axlsx_relationship_ids_cache] = nil
33
- end
34
-
35
- # Generate and return a unique id (eg. `rId123`) Used for setting {#Id}.
36
- #
37
- # The generated id depends on the number of previously cached ids, so using
38
- # {clear_ids_cache} will automatically reset the generated ids, too.
39
- # @return [String]
40
- def next_free_id
41
- "rId#{ids_cache.size + 1}"
42
- end
43
- end
44
-
45
- # The id of the relationship (eg. "rId123"). Most instances get their own unique id.
46
- # However, some instances need to share the same id – see {#should_use_same_id_as?}
47
- # for details.
48
- # @return [String]
49
- attr_reader :Id
50
-
51
- # The location of the relationship target
52
- # @return [String]
53
- attr_reader :Target
54
-
55
- # The type of relationship
56
- # @note Supported types are defined as constants in Axlsx:
57
- # @see XML_NS_R
58
- # @see TABLE_R
59
- # @see PIVOT_TABLE_R
60
- # @see WORKBOOK_R
61
- # @see WORKSHEET_R
62
- # @see APP_R
63
- # @see RELS_R
64
- # @see CORE_R
65
- # @see STYLES_R
66
- # @see CHART_R
67
- # @see DRAWING_R
68
- # @return [String]
69
- attr_reader :Type
70
-
71
- # The target mode of the relationship
72
- # used for hyperlink type relationships to mark the relationship to an external resource
73
- # TargetMode can be specified during initialization by passing in a :target_mode option
74
- # Target mode must be :external for now.
75
- attr_reader :TargetMode
76
-
77
- # The source object the relations belongs to (e.g. a hyperlink, drawing, ...). Needed when
78
- # looking up the relationship for a specific object (see {Relationships#for}).
79
- attr_reader :source_obj
80
-
81
- # Initializes a new relationship.
82
- # @param [Object] source_obj see {#source_obj}
83
- # @param [String] type The type of the relationship
84
- # @param [String] target The target for the relationship
85
- # @option [Symbol] :target_mode only accepts :external.
86
- def initialize(source_obj, type, target, options={})
87
- @source_obj = source_obj
88
- self.Target=target
89
- self.Type=type
90
- self.TargetMode = options[:target_mode] if options[:target_mode]
91
- @Id = (self.class.ids_cache[ids_cache_key] ||= self.class.next_free_id)
92
- end
93
-
94
- # @see Target
95
- def Target=(v) Axlsx::validate_string v; @Target = v end
96
- # @see Type
97
- def Type=(v) Axlsx::validate_relationship_type v; @Type = v end
98
-
99
- # @see TargetMode
100
- def TargetMode=(v) RestrictionValidator.validate 'Relationship.TargetMode', [:External, :Internal], v; @TargetMode = v; end
101
-
102
- # serialize relationship
103
- # @param [String] str
104
- # @return [String]
105
- def to_xml_string(str = '')
106
- h = self.instance_values.reject{|k, _| k == "source_obj"}
107
- str << '<Relationship '
108
- str << (h.map { |key, value| '' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"'}.join(' '))
109
- str << '/>'
110
- end
111
-
112
- # A key that determines whether this relationship should use already generated id.
113
- #
114
- # Instances designating the same relationship need to use the same id. We can not simply
115
- # compare the {#Target} attribute, though: `foo/bar.xml`, `../foo/bar.xml`,
116
- # `../../foo/bar.xml` etc. are all different but probably mean the same file (this
117
- # is especially an issue for relationships in the context of pivot tables). So lets
118
- # just ignore this attribute for now (except when {#TargetMode} is set to `:External` –
119
- # then {#Target} will be an absolute URL and thus can safely be compared).
120
- #
121
- # @todo Implement comparison of {#Target} based on normalized path names.
122
- # @return [Array]
123
- def ids_cache_key
124
- key = [source_obj, self.Type, self.TargetMode]
125
- key << self.Target if self.TargetMode == :External
126
- key
127
- end
128
-
129
- end
130
- end
1
+ module Axlsx
2
+ # A relationship defines a reference between package parts.
3
+ # @note Packages automatically manage relationships.
4
+ class Relationship
5
+ class << self
6
+ # Keeps track of relationship ids in use.
7
+ # @return [Array]
8
+ def ids_cache
9
+ Thread.current[:axlsx_relationship_ids_cache] ||= {}
10
+ end
11
+
12
+ # Initialize cached ids.
13
+ #
14
+ # This should be called before serializing a package (see {Package#serialize} and
15
+ # {Package#to_stream}) to make sure that serialization is idempotent (i.e.
16
+ # Relationship instances are generated with the same IDs everytime the package
17
+ # is serialized).
18
+ def initialize_ids_cache
19
+ Thread.current[:axlsx_relationship_ids_cache] = {}
20
+ end
21
+
22
+ # Clear cached ids.
23
+ #
24
+ # This should be called after serializing a package (see {Package#serialize} and
25
+ # {Package#to_stream}) to free the memory allocated for cache.
26
+ #
27
+ # Also, calling this avoids memory leaks (cached ids lingering around
28
+ # forever).
29
+ def clear_ids_cache
30
+ Thread.current[:axlsx_relationship_ids_cache] = nil
31
+ end
32
+
33
+ # Generate and return a unique id (eg. `rId123`) Used for setting {#Id}.
34
+ #
35
+ # The generated id depends on the number of previously cached ids, so using
36
+ # {clear_ids_cache} will automatically reset the generated ids, too.
37
+ # @return [String]
38
+ def next_free_id
39
+ "rId#{ids_cache.size + 1}"
40
+ end
41
+ end
42
+
43
+ # The id of the relationship (eg. "rId123"). Most instances get their own unique id.
44
+ # However, some instances need to share the same id – see {#should_use_same_id_as?}
45
+ # for details.
46
+ # @return [String]
47
+ attr_reader :Id
48
+
49
+ # The location of the relationship target
50
+ # @return [String]
51
+ attr_reader :Target
52
+
53
+ # The type of relationship
54
+ # @note Supported types are defined as constants in Axlsx:
55
+ # @see XML_NS_R
56
+ # @see TABLE_R
57
+ # @see PIVOT_TABLE_R
58
+ # @see WORKBOOK_R
59
+ # @see WORKSHEET_R
60
+ # @see APP_R
61
+ # @see RELS_R
62
+ # @see CORE_R
63
+ # @see STYLES_R
64
+ # @see CHART_R
65
+ # @see DRAWING_R
66
+ # @return [String]
67
+ attr_reader :Type
68
+
69
+ # The target mode of the relationship
70
+ # used for hyperlink type relationships to mark the relationship to an external resource
71
+ # TargetMode can be specified during initialization by passing in a :target_mode option
72
+ # Target mode must be :external for now.
73
+ attr_reader :TargetMode
74
+
75
+ # The source object the relations belongs to (e.g. a hyperlink, drawing, ...). Needed when
76
+ # looking up the relationship for a specific object (see {Relationships#for}).
77
+ attr_reader :source_obj
78
+
79
+ # Initializes a new relationship.
80
+ # @param [Object] source_obj see {#source_obj}
81
+ # @param [String] type The type of the relationship
82
+ # @param [String] target The target for the relationship
83
+ # @option [Symbol] :target_mode only accepts :external.
84
+ def initialize(source_obj, type, target, options = {})
85
+ @source_obj = source_obj
86
+ self.Target = target
87
+ self.Type = type
88
+ self.TargetMode = options[:target_mode] if options[:target_mode]
89
+ @Id = (self.class.ids_cache[ids_cache_key] ||= self.class.next_free_id)
90
+ end
91
+
92
+ # @see Target
93
+ def Target=(v) Axlsx::validate_string v; @Target = v end
94
+ # @see Type
95
+ def Type=(v) Axlsx::validate_relationship_type v; @Type = v end
96
+
97
+ # @see TargetMode
98
+ def TargetMode=(v) RestrictionValidator.validate 'Relationship.TargetMode', [:External, :Internal], v; @TargetMode = v; end
99
+
100
+ # serialize relationship
101
+ # @param [String] str
102
+ # @return [String]
103
+ def to_xml_string(str = '')
104
+ h = Axlsx.instance_values_for(self).reject { |k, _| k == "source_obj" }
105
+ str << '<Relationship '
106
+ str << (h.map { |key, value| '' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"' }.join(' '))
107
+ str << '/>'
108
+ end
109
+
110
+ # A key that determines whether this relationship should use already generated id.
111
+ #
112
+ # Instances designating the same relationship need to use the same id. We can not simply
113
+ # compare the {#Target} attribute, though: `foo/bar.xml`, `../foo/bar.xml`,
114
+ # `../../foo/bar.xml` etc. are all different but probably mean the same file (this
115
+ # is especially an issue for relationships in the context of pivot tables). So lets
116
+ # just ignore this attribute for now (except when {#TargetMode} is set to `:External` –
117
+ # then {#Target} will be an absolute URL and thus can safely be compared).
118
+ #
119
+ # @todo Implement comparison of {#Target} based on normalized path names.
120
+ # @return [Array]
121
+ def ids_cache_key
122
+ key = [source_obj, self.Type, self.TargetMode]
123
+ key << self.Target if self.TargetMode == :External
124
+ key
125
+ end
126
+ end
127
+ end
@@ -1,32 +1,29 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- require 'axlsx/rels/relationship.rb'
4
-
5
- # Relationships are a collection of Relations that define how package parts are related.
6
- # @note The package automatically manages releationships.
7
- class Relationships < SimpleTypedList
8
-
9
- # Creates a new Relationships collection based on SimpleTypedList
10
- def initialize
11
- super Relationship
12
- end
13
-
14
- # The relationship instance for the given source object, or nil if none exists.
15
- # @see Relationship#source_obj
16
- # @return [Relationship]
17
- def for(source_obj)
18
- find{ |rel| rel.source_obj == source_obj }
19
- end
20
-
21
- # serialize relationships
22
- # @param [String] str
23
- # @return [String]
24
- def to_xml_string(str = '')
25
- str << '<?xml version="1.0" encoding="UTF-8"?>'
26
- str << ('<Relationships xmlns="' << RELS_R << '">')
27
- each{ |rel| rel.to_xml_string(str) }
28
- str << '</Relationships>'
29
- end
30
-
31
- end
32
- end
1
+ module Axlsx
2
+ require 'axlsx/rels/relationship.rb'
3
+
4
+ # Relationships are a collection of Relations that define how package parts are related.
5
+ # @note The package automatically manages releationships.
6
+ class Relationships < SimpleTypedList
7
+ # Creates a new Relationships collection based on SimpleTypedList
8
+ def initialize
9
+ super Relationship
10
+ end
11
+
12
+ # The relationship instance for the given source object, or nil if none exists.
13
+ # @see Relationship#source_obj
14
+ # @return [Relationship]
15
+ def for(source_obj)
16
+ find { |rel| rel.source_obj == source_obj }
17
+ end
18
+
19
+ # serialize relationships
20
+ # @param [String] str
21
+ # @return [String]
22
+ def to_xml_string(str = '')
23
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
24
+ str << ('<Relationships xmlns="' << RELS_R << '">')
25
+ each { |rel| rel.to_xml_string(str) }
26
+ str << '</Relationships>'
27
+ end
28
+ end
29
+ end
@@ -1,73 +1,70 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- # This class details a border used in Office Open XML spreadsheet styles.
4
- class Border
5
-
6
- include Axlsx::SerializedAttributes
7
- include Axlsx::OptionsParser
8
-
9
- EDGES = [:left, :right, :top, :bottom].freeze
10
-
11
- # Creates a new Border object
12
- # @option options [Boolean] diagonal_up
13
- # @option options [Boolean] diagonal_down
14
- # @option options [Boolean] outline
15
- # @example - Making a border
16
- # p = Axlsx::Package.new
17
- # red_border = p.workbook.styles.add_style :border => { :style => :thin, :color => "FFFF0000" }
18
- # ws = p.workbook.add_worksheet
19
- # ws.add_row [1,2,3], :style => red_border
20
- # p.serialize('red_border.xlsx')
21
- #
22
- # @note The recommended way to manage borders is with Style#add_style
23
- # @see Style#add_style
24
- def initialize(options={})
25
- @prs = SimpleTypedList.new BorderPr
26
- parse_options options
27
- end
28
-
29
- serializable_attributes :diagonal_up, :diagonal_down, :outline
30
-
31
- # @return [Boolean] The diagonal up property for the border that indicates if the border should include a diagonal line from the bottom left to the top right of the cell.
32
- attr_reader :diagonal_up
33
- alias :diagonalUp :diagonal_up
34
-
35
- # @return [Boolean] The diagonal down property for the border that indicates if the border should include a diagonal line from the top left to the top right of the cell.
36
- attr_reader :diagonal_down
37
- alias :diagonalDown :diagonal_down
38
-
39
- # @return [Boolean] The outline property for the border indicating that top, left, right and bottom borders should only be applied to the outside border of a range of cells.
40
- attr_reader :outline
41
-
42
- # @return [SimpleTypedList] A list of BorderPr objects for this border.
43
- attr_reader :prs
44
-
45
- # @see diagonalUp
46
- def diagonal_up=(v) Axlsx::validate_boolean v; @diagonal_up = v end
47
- alias :diagonalUp= :diagonal_up=
48
-
49
- # @see diagonalDown
50
- def diagonal_down=(v) Axlsx::validate_boolean v; @diagonal_down = v end
51
- alias :diagonalDown= :diagonal_down=
52
-
53
- # @see outline
54
- def outline=(v) Axlsx::validate_boolean v; @outline = v end
55
-
56
- # Serializes the object
57
- # @param [String] str
58
- # @return [String]
59
- def to_xml_string(str = '')
60
- str << '<border '
61
- serialized_attributes str
62
- str << '>'
63
- # enforces order
64
- [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal].each do |k|
65
- @prs.select { |pr| pr.name == k }.each do |part|
66
- part.to_xml_string(str)
67
- end
68
- end
69
- str << '</border>'
70
- end
71
-
72
- end
73
- end
1
+ module Axlsx
2
+ # This class details a border used in Office Open XML spreadsheet styles.
3
+ class Border
4
+ include Axlsx::SerializedAttributes
5
+ include Axlsx::OptionsParser
6
+
7
+ EDGES = [:left, :right, :top, :bottom].freeze
8
+
9
+ # Creates a new Border object
10
+ # @option options [Boolean] diagonal_up
11
+ # @option options [Boolean] diagonal_down
12
+ # @option options [Boolean] outline
13
+ # @example - Making a border
14
+ # p = Axlsx::Package.new
15
+ # red_border = p.workbook.styles.add_style :border => { :style => :thin, :color => "FFFF0000" }
16
+ # ws = p.workbook.add_worksheet
17
+ # ws.add_row [1,2,3], :style => red_border
18
+ # p.serialize('red_border.xlsx')
19
+ #
20
+ # @note The recommended way to manage borders is with Style#add_style
21
+ # @see Style#add_style
22
+ def initialize(options = {})
23
+ @prs = SimpleTypedList.new BorderPr
24
+ parse_options options
25
+ end
26
+
27
+ serializable_attributes :diagonal_up, :diagonal_down, :outline
28
+
29
+ # @return [Boolean] The diagonal up property for the border that indicates if the border should include a diagonal line from the bottom left to the top right of the cell.
30
+ attr_reader :diagonal_up
31
+ alias :diagonalUp :diagonal_up
32
+
33
+ # @return [Boolean] The diagonal down property for the border that indicates if the border should include a diagonal line from the top left to the top right of the cell.
34
+ attr_reader :diagonal_down
35
+ alias :diagonalDown :diagonal_down
36
+
37
+ # @return [Boolean] The outline property for the border indicating that top, left, right and bottom borders should only be applied to the outside border of a range of cells.
38
+ attr_reader :outline
39
+
40
+ # @return [SimpleTypedList] A list of BorderPr objects for this border.
41
+ attr_reader :prs
42
+
43
+ # @see diagonalUp
44
+ def diagonal_up=(v) Axlsx::validate_boolean v; @diagonal_up = v end
45
+ alias :diagonalUp= :diagonal_up=
46
+
47
+ # @see diagonalDown
48
+ def diagonal_down=(v) Axlsx::validate_boolean v; @diagonal_down = v end
49
+ alias :diagonalDown= :diagonal_down=
50
+
51
+ # @see outline
52
+ def outline=(v) Axlsx::validate_boolean v; @outline = v end
53
+
54
+ # Serializes the object
55
+ # @param [String] str
56
+ # @return [String]
57
+ def to_xml_string(str = '')
58
+ str << '<border '
59
+ serialized_attributes str
60
+ str << '>'
61
+ # enforces order
62
+ [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal].each do |k|
63
+ @prs.select { |pr| pr.name == k }.each do |part|
64
+ part.to_xml_string(str)
65
+ end
66
+ end
67
+ str << '</border>'
68
+ end
69
+ end
70
+ end
@@ -1,71 +1,69 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- # A border part.
4
- class BorderPr
5
- include Axlsx::OptionsParser
6
- # @return [Color] The color of this border part.
7
- attr_reader :color
8
-
9
- # @return [Symbol] The syle of this border part.
10
- # @note
11
- # The following are allowed
12
- # :none
13
- # :thin
14
- # :medium
15
- # :dashed
16
- # :dotted
17
- # :thick
18
- # :double
19
- # :hair
20
- # :mediumDashed
21
- # :dashDot
22
- # :mediumDashDot
23
- # :dashDotDot
24
- # :mediumDashDotDot
25
- # :slantDashDot
26
- attr_reader :style
27
-
28
- # @return [Symbol] The name of this border part
29
- # @note
30
- # The following are allowed
31
- # :start
32
- # :end
33
- # :left
34
- # :right
35
- # :top
36
- # :bottom
37
- # :diagonal
38
- # :vertical
39
- # :horizontal
40
- attr_reader :name
41
-
42
- # Creates a new Border Part Object
43
- # @option options [Color] color
44
- # @option options [Symbol] name
45
- # @option options [Symbol] style
46
- # @see Axlsx::Border
47
- def initialize(options={})
48
- parse_options(options)
49
- #options.each do |o|
50
- # self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
51
- #end
52
- end
53
-
54
- # @see name
55
- def name=(v) RestrictionValidator.validate "BorderPr.name", [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal], v; @name = v end
56
- # @see color
57
- def color=(v) DataTypeValidator.validate(:color, Color, v); @color = v end
58
- # @see style
59
- def style=(v) RestrictionValidator.validate "BorderPr.style", [:none, :thin, :medium, :dashed, :dotted, :thick, :double, :hair, :mediumDashed, :dashDot, :mediumDashDot, :dashDotDot, :mediumDashDotDot, :slantDashDot], v; @style = v end
60
-
61
- # Serializes the object
62
- # @param [String] str
63
- # @return [String]
64
- def to_xml_string(str = '')
65
- str << ('<' << @name.to_s << ' style="' << @style.to_s << '">')
66
- @color.to_xml_string(str) if @color.is_a?(Color)
67
- str << ('</' << @name.to_s << '>')
68
- end
69
-
70
- end
71
- end
1
+ module Axlsx
2
+ # A border part.
3
+ class BorderPr
4
+ include Axlsx::OptionsParser
5
+ # @return [Color] The color of this border part.
6
+ attr_reader :color
7
+
8
+ # @return [Symbol] The syle of this border part.
9
+ # @note
10
+ # The following are allowed
11
+ # :none
12
+ # :thin
13
+ # :medium
14
+ # :dashed
15
+ # :dotted
16
+ # :thick
17
+ # :double
18
+ # :hair
19
+ # :mediumDashed
20
+ # :dashDot
21
+ # :mediumDashDot
22
+ # :dashDotDot
23
+ # :mediumDashDotDot
24
+ # :slantDashDot
25
+ attr_reader :style
26
+
27
+ # @return [Symbol] The name of this border part
28
+ # @note
29
+ # The following are allowed
30
+ # :start
31
+ # :end
32
+ # :left
33
+ # :right
34
+ # :top
35
+ # :bottom
36
+ # :diagonal
37
+ # :vertical
38
+ # :horizontal
39
+ attr_reader :name
40
+
41
+ # Creates a new Border Part Object
42
+ # @option options [Color] color
43
+ # @option options [Symbol] name
44
+ # @option options [Symbol] style
45
+ # @see Axlsx::Border
46
+ def initialize(options = {})
47
+ parse_options(options)
48
+ # options.each do |o|
49
+ # self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
50
+ # end
51
+ end
52
+
53
+ # @see name
54
+ def name=(v) RestrictionValidator.validate "BorderPr.name", [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal], v; @name = v end
55
+ # @see color
56
+ def color=(v) DataTypeValidator.validate(:color, Color, v); @color = v end
57
+ # @see style
58
+ def style=(v) RestrictionValidator.validate "BorderPr.style", [:none, :thin, :medium, :dashed, :dotted, :thick, :double, :hair, :mediumDashed, :dashDot, :mediumDashDot, :dashDotDot, :mediumDashDotDot, :slantDashDot], v; @style = v end
59
+
60
+ # Serializes the object
61
+ # @param [String] str
62
+ # @return [String]
63
+ def to_xml_string(str = '')
64
+ str << ('<' << @name.to_s << ' style="' << @style.to_s << '">')
65
+ @color.to_xml_string(str) if @color.is_a?(Color)
66
+ str << ('</' << @name.to_s << '>')
67
+ end
68
+ end
69
+ end