caxlsx 3.2.0 → 3.3.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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  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 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  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 +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -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 -129
  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 +107 -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 +398 -388
  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 -73
  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 +535 -494
  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 +416 -410
  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 +425 -395
  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/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -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 +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -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 = Axlsx.instance_values_for(self).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,73 +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
- 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
+ # 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