caxlsx 3.0.4 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -98
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +97 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +388 -363
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -71
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +494 -420
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +410 -401
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +395 -370
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
@@ -1,130 +1,130 @@
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
+ # 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,32 +1,32 @@
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
+ # 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,71 +1,73 @@
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
- # 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
-
70
- end
71
- end
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,71 +1,71 @@
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
+ # 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