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,244 +1,244 @@
1
- module Axlsx
2
-
3
- # When multiple values are chosen to filter by, or when a group of date values are chosen to filter by,
4
- # this object groups those criteria together.
5
- class Filters
6
- include Axlsx::OptionsParser
7
- include Axlsx::SerializedAttributes
8
-
9
- # Creates a new Filters object
10
- # @param [Hash] options Options used to set this objects attributes and
11
- # create filter and/or date group items
12
- # @option [Boolean] blank @see blank
13
- # @option [String] calendar_type @see calendar_type
14
- # @option [Array] filter_items An array of values that will be used to create filter objects.
15
- # @option [Array] date_group_items An array of hases defining date group item filters to apply.
16
- # @note The recommended way to interact with filter objects is via AutoFilter#add_column
17
- # @example
18
- # ws.auto_filter.add_column(0, :filters, :blank => true, :calendar_type => 'japan', :filter_items => [100, 'a'])
19
- def initialize(options={})
20
- parse_options options
21
- end
22
-
23
- serializable_attributes :blank, :calendar_type
24
-
25
- # Allowed calendar types
26
- CALENDAR_TYPES = %w(gregorian gregorianUs gregorianMeFrench gregorianArabic hijri hebrew taiwan japan thai korea saka gregorianXlitEnglish gregorianXlitFrench none)
27
-
28
- # Flag indicating whether to filter by blank.
29
- # @return [Boolean]
30
- attr_reader :blank
31
-
32
- # Calendar type for date grouped items.
33
- # Used to interpret the values in dateGroupItem.
34
- # This is the calendar type used to evaluate all dates in the filter column,
35
- # even when those dates are not using the same calendar system / date formatting.
36
- attr_reader :calendar_type
37
-
38
- # Tells us if the row of the cell provided should be filterd as it
39
- # does not meet any of the specified filter_items or
40
- # date_group_items restrictions.
41
- # @param [Cell] cell The cell to test against items
42
- # TODO implement this for date filters as well!
43
- def apply(cell)
44
- return false unless cell
45
- filter_items.each do |filter|
46
- return false if cell.value == filter.val
47
- end
48
- true
49
- end
50
-
51
- # The filter values in this filters object
52
- def filter_items
53
- @filter_items ||= []
54
- end
55
-
56
- # the date group values in this filters object
57
- def date_group_items
58
- @date_group_items ||= []
59
- end
60
-
61
- # @see calendar_type
62
- # @param [String] calendar The calendar type to use. This must be one of the types defined in CALENDAR_TYPES
63
- # @return [String]
64
- def calendar_type=(calendar)
65
- RestrictionValidator.validate 'Filters.calendar_type', CALENDAR_TYPES, calendar
66
- @calendar_type = calendar
67
- end
68
-
69
- # Set the value for blank
70
- # @see blank
71
- def blank=(use_blank)
72
- Axlsx.validate_boolean use_blank
73
- @blank = use_blank
74
- end
75
-
76
- # Serialize the object to xml
77
- def to_xml_string(str = '')
78
- str << "<filters #{serialized_attributes}>"
79
- filter_items.each { |filter| filter.to_xml_string(str) }
80
- date_group_items.each { |date_group_item| date_group_item.to_xml_string(str) }
81
- str << '</filters>'
82
- end
83
-
84
- # not entirely happy with this.
85
- # filter_items should be a simple typed list that overrides << etc
86
- # to create Filter objects from the inserted values. However this
87
- # is most likely so rarely used...(really? do you know that?)
88
- def filter_items=(values)
89
- values.each do |value|
90
- filter_items << Filter.new(value)
91
- end
92
- end
93
-
94
- # Date group items are date group filter items where you specify the
95
- # date_group and a value for that option as part of the auto_filter
96
- # @note This can be specified, but will not be applied to the date
97
- # values in your workbook at this time.
98
- def date_group_items=(options)
99
- options.each do |date_group|
100
- raise ArgumentError, "date_group_items should be an array of hashes specifying the options for each date_group_item" unless date_group.is_a?(Hash)
101
- date_group_items << DateGroupItem.new(date_group)
102
- end
103
- end
104
-
105
- # This class expresses a filter criteria value.
106
- class Filter
107
-
108
- # Creates a new filter value object
109
- # @param [Any] value The value of the filter. This is not restricted, but
110
- # will be serialized via to_s so if you are passing an object
111
- # be careful.
112
- def initialize(value)
113
- @val = value
114
- end
115
-
116
-
117
- #Filter value used in the criteria.
118
- attr_accessor :val
119
-
120
- # Serializes the filter value object
121
- # @param [String] str The string to concact the serialization information to.
122
- def to_xml_string(str = '')
123
- str << "<filter val='#{@val.to_s}' />"
124
- end
125
- end
126
-
127
-
128
- # This collection is used to express a group of dates or times which are
129
- # used in an AutoFilter criteria. Values are always written in the calendar
130
- # type of the first date encountered in the filter range, so that all
131
- # subsequent dates, even when formatted or represented by other calendar
132
- # types, can be correctly compared for the purposes of filtering.
133
- class DateGroupItem
134
- include Axlsx::OptionsParser
135
- include Axlsx::SerializedAttributes
136
-
137
- # Creates a new DateGroupItem
138
- # @param [Hash] options A hash of options to use when
139
- # instanciating the object
140
- # @option [String] date_time_grouping the part of the date this
141
- # filter should apply for grouping
142
- # @option [Integer|String] year @see year
143
- # @option [Integer] month @see month
144
- # @option [Integer] day @see day
145
- # @option [Integer] hour @see hour
146
- # @option [Integer] minute @see minute
147
- # @option [Integer] second @see second
148
- def initialize(options={})
149
- raise ArgumentError, "You must specify a year for date time grouping" unless options[:year]
150
- raise ArgumentError, "You must specify a date_time_grouping when creating a DateGroupItem for auto filter" unless options[:date_time_grouping]
151
- parse_options options
152
- end
153
-
154
- serializable_attributes :date_time_grouping, :year, :month, :day, :hour, :minute, :second
155
-
156
- # Allowed date time groupings
157
- DATE_TIME_GROUPING = %w(year month day hour minute second)
158
-
159
- # Grouping level
160
- # This must be one of year, month, day, hour, minute or second.
161
- # @return [String]
162
- attr_reader :date_time_grouping
163
-
164
- # Year (4 digits)
165
- # @return [Integer|String]
166
- attr_reader :year
167
-
168
- # Month (1..12)
169
- # @return [Integer]
170
- attr_reader :month
171
-
172
- # Day (1-31)
173
- # @return [Integer]
174
- attr_reader :day
175
-
176
- # Hour (0..23)
177
- # @return [Integer]
178
- attr_reader :hour
179
-
180
- # Minute (0..59(
181
- # @return [Integer]
182
- attr_reader :minute
183
-
184
- # Second (0..59)
185
- # @return [Integer]
186
- attr_reader :second
187
-
188
- # The year value for the date group item
189
- # This must be a four digit value
190
- def year=(value)
191
- RegexValidator.validate "DateGroupItem.year", /\d{4}/, value
192
- @year = value
193
- end
194
-
195
- # The month value for the date group item
196
- # This must be between 1 and 12
197
- def month=(value)
198
- RangeValidator.validate "DateGroupItem.month", 0, 12, value
199
- @month = value
200
- end
201
-
202
- # The day value for the date group item
203
- # This must be between 1 and 31
204
- # @note no attempt is made to ensure the date value is valid for any given month
205
- def day=(value)
206
- RangeValidator.validate "DateGroupItem.day", 0, 31, value
207
- @day = value
208
- end
209
-
210
- # The hour value for the date group item
211
- # # this must be between 0 and 23
212
- def hour=(value)
213
- RangeValidator.validate "DateGroupItem.hour", 0, 23, value
214
- @hour = value
215
- end
216
-
217
- # The minute value for the date group item
218
- # This must be between 0 and 59
219
- def minute=(value)
220
- RangeValidator.validate "DateGroupItem.minute", 0, 59, value
221
- @minute = value
222
- end
223
-
224
- # The second value for the date group item
225
- # This must be between 0 and 59
226
- def second=(value)
227
- RangeValidator.validate "DateGroupItem.second", 0, 59, value
228
- @second = value
229
- end
230
-
231
- # The date time grouping for this filter.
232
- def date_time_grouping=(grouping)
233
- RestrictionValidator.validate 'DateGroupItem.date_time_grouping', DATE_TIME_GROUPING, grouping.to_s
234
- @date_time_grouping = grouping.to_s
235
- end
236
-
237
- # Serialize the object to xml
238
- # @param [String] str The string object this serialization will be concatenated to.
239
- def to_xml_string(str = '')
240
- serialized_tag('dateGroupItem', str)
241
- end
242
- end
243
- end
244
- end
1
+ module Axlsx
2
+
3
+ # When multiple values are chosen to filter by, or when a group of date values are chosen to filter by,
4
+ # this object groups those criteria together.
5
+ class Filters
6
+ include Axlsx::OptionsParser
7
+ include Axlsx::SerializedAttributes
8
+
9
+ # Creates a new Filters object
10
+ # @param [Hash] options Options used to set this objects attributes and
11
+ # create filter and/or date group items
12
+ # @option [Boolean] blank @see blank
13
+ # @option [String] calendar_type @see calendar_type
14
+ # @option [Array] filter_items An array of values that will be used to create filter objects.
15
+ # @option [Array] date_group_items An array of hases defining date group item filters to apply.
16
+ # @note The recommended way to interact with filter objects is via AutoFilter#add_column
17
+ # @example
18
+ # ws.auto_filter.add_column(0, :filters, :blank => true, :calendar_type => 'japan', :filter_items => [100, 'a'])
19
+ def initialize(options={})
20
+ parse_options options
21
+ end
22
+
23
+ serializable_attributes :blank, :calendar_type
24
+
25
+ # Allowed calendar types
26
+ CALENDAR_TYPES = %w(gregorian gregorianUs gregorianMeFrench gregorianArabic hijri hebrew taiwan japan thai korea saka gregorianXlitEnglish gregorianXlitFrench none)
27
+
28
+ # Flag indicating whether to filter by blank.
29
+ # @return [Boolean]
30
+ attr_reader :blank
31
+
32
+ # Calendar type for date grouped items.
33
+ # Used to interpret the values in dateGroupItem.
34
+ # This is the calendar type used to evaluate all dates in the filter column,
35
+ # even when those dates are not using the same calendar system / date formatting.
36
+ attr_reader :calendar_type
37
+
38
+ # Tells us if the row of the cell provided should be filterd as it
39
+ # does not meet any of the specified filter_items or
40
+ # date_group_items restrictions.
41
+ # @param [Cell] cell The cell to test against items
42
+ # TODO implement this for date filters as well!
43
+ def apply(cell)
44
+ return false unless cell
45
+ filter_items.each do |filter|
46
+ return false if cell.value == filter.val
47
+ end
48
+ true
49
+ end
50
+
51
+ # The filter values in this filters object
52
+ def filter_items
53
+ @filter_items ||= []
54
+ end
55
+
56
+ # the date group values in this filters object
57
+ def date_group_items
58
+ @date_group_items ||= []
59
+ end
60
+
61
+ # @see calendar_type
62
+ # @param [String] calendar The calendar type to use. This must be one of the types defined in CALENDAR_TYPES
63
+ # @return [String]
64
+ def calendar_type=(calendar)
65
+ RestrictionValidator.validate 'Filters.calendar_type', CALENDAR_TYPES, calendar
66
+ @calendar_type = calendar
67
+ end
68
+
69
+ # Set the value for blank
70
+ # @see blank
71
+ def blank=(use_blank)
72
+ Axlsx.validate_boolean use_blank
73
+ @blank = use_blank
74
+ end
75
+
76
+ # Serialize the object to xml
77
+ def to_xml_string(str = '')
78
+ str << "<filters #{serialized_attributes}>"
79
+ filter_items.each { |filter| filter.to_xml_string(str) }
80
+ date_group_items.each { |date_group_item| date_group_item.to_xml_string(str) }
81
+ str << '</filters>'
82
+ end
83
+
84
+ # not entirely happy with this.
85
+ # filter_items should be a simple typed list that overrides << etc
86
+ # to create Filter objects from the inserted values. However this
87
+ # is most likely so rarely used...(really? do you know that?)
88
+ def filter_items=(values)
89
+ values.each do |value|
90
+ filter_items << Filter.new(value)
91
+ end
92
+ end
93
+
94
+ # Date group items are date group filter items where you specify the
95
+ # date_group and a value for that option as part of the auto_filter
96
+ # @note This can be specified, but will not be applied to the date
97
+ # values in your workbook at this time.
98
+ def date_group_items=(options)
99
+ options.each do |date_group|
100
+ raise ArgumentError, "date_group_items should be an array of hashes specifying the options for each date_group_item" unless date_group.is_a?(Hash)
101
+ date_group_items << DateGroupItem.new(date_group)
102
+ end
103
+ end
104
+
105
+ # This class expresses a filter criteria value.
106
+ class Filter
107
+
108
+ # Creates a new filter value object
109
+ # @param [Any] value The value of the filter. This is not restricted, but
110
+ # will be serialized via to_s so if you are passing an object
111
+ # be careful.
112
+ def initialize(value)
113
+ @val = value
114
+ end
115
+
116
+
117
+ #Filter value used in the criteria.
118
+ attr_accessor :val
119
+
120
+ # Serializes the filter value object
121
+ # @param [String] str The string to concact the serialization information to.
122
+ def to_xml_string(str = '')
123
+ str << "<filter val='#{@val.to_s}' />"
124
+ end
125
+ end
126
+
127
+
128
+ # This collection is used to express a group of dates or times which are
129
+ # used in an AutoFilter criteria. Values are always written in the calendar
130
+ # type of the first date encountered in the filter range, so that all
131
+ # subsequent dates, even when formatted or represented by other calendar
132
+ # types, can be correctly compared for the purposes of filtering.
133
+ class DateGroupItem
134
+ include Axlsx::OptionsParser
135
+ include Axlsx::SerializedAttributes
136
+
137
+ # Creates a new DateGroupItem
138
+ # @param [Hash] options A hash of options to use when
139
+ # instanciating the object
140
+ # @option [String] date_time_grouping the part of the date this
141
+ # filter should apply for grouping
142
+ # @option [Integer|String] year @see year
143
+ # @option [Integer] month @see month
144
+ # @option [Integer] day @see day
145
+ # @option [Integer] hour @see hour
146
+ # @option [Integer] minute @see minute
147
+ # @option [Integer] second @see second
148
+ def initialize(options={})
149
+ raise ArgumentError, "You must specify a year for date time grouping" unless options[:year]
150
+ raise ArgumentError, "You must specify a date_time_grouping when creating a DateGroupItem for auto filter" unless options[:date_time_grouping]
151
+ parse_options options
152
+ end
153
+
154
+ serializable_attributes :date_time_grouping, :year, :month, :day, :hour, :minute, :second
155
+
156
+ # Allowed date time groupings
157
+ DATE_TIME_GROUPING = %w(year month day hour minute second)
158
+
159
+ # Grouping level
160
+ # This must be one of year, month, day, hour, minute or second.
161
+ # @return [String]
162
+ attr_reader :date_time_grouping
163
+
164
+ # Year (4 digits)
165
+ # @return [Integer|String]
166
+ attr_reader :year
167
+
168
+ # Month (1..12)
169
+ # @return [Integer]
170
+ attr_reader :month
171
+
172
+ # Day (1-31)
173
+ # @return [Integer]
174
+ attr_reader :day
175
+
176
+ # Hour (0..23)
177
+ # @return [Integer]
178
+ attr_reader :hour
179
+
180
+ # Minute (0..59(
181
+ # @return [Integer]
182
+ attr_reader :minute
183
+
184
+ # Second (0..59)
185
+ # @return [Integer]
186
+ attr_reader :second
187
+
188
+ # The year value for the date group item
189
+ # This must be a four digit value
190
+ def year=(value)
191
+ RegexValidator.validate "DateGroupItem.year", /\d{4}/, value
192
+ @year = value
193
+ end
194
+
195
+ # The month value for the date group item
196
+ # This must be between 1 and 12
197
+ def month=(value)
198
+ RangeValidator.validate "DateGroupItem.month", 0, 12, value
199
+ @month = value
200
+ end
201
+
202
+ # The day value for the date group item
203
+ # This must be between 1 and 31
204
+ # @note no attempt is made to ensure the date value is valid for any given month
205
+ def day=(value)
206
+ RangeValidator.validate "DateGroupItem.day", 0, 31, value
207
+ @day = value
208
+ end
209
+
210
+ # The hour value for the date group item
211
+ # # this must be between 0 and 23
212
+ def hour=(value)
213
+ RangeValidator.validate "DateGroupItem.hour", 0, 23, value
214
+ @hour = value
215
+ end
216
+
217
+ # The minute value for the date group item
218
+ # This must be between 0 and 59
219
+ def minute=(value)
220
+ RangeValidator.validate "DateGroupItem.minute", 0, 59, value
221
+ @minute = value
222
+ end
223
+
224
+ # The second value for the date group item
225
+ # This must be between 0 and 59
226
+ def second=(value)
227
+ RangeValidator.validate "DateGroupItem.second", 0, 59, value
228
+ @second = value
229
+ end
230
+
231
+ # The date time grouping for this filter.
232
+ def date_time_grouping=(grouping)
233
+ RestrictionValidator.validate 'DateGroupItem.date_time_grouping', DATE_TIME_GROUPING, grouping.to_s
234
+ @date_time_grouping = grouping.to_s
235
+ end
236
+
237
+ # Serialize the object to xml
238
+ # @param [String] str The string object this serialization will be concatenated to.
239
+ def to_xml_string(str = '')
240
+ serialized_tag('dateGroupItem', str)
241
+ end
242
+ end
243
+ end
244
+ end
@@ -1,35 +1,35 @@
1
- module Axlsx
2
-
3
- # The Break class stores the details for row and column page breaks.
4
- # @see RowBreaks, ColBreaks
5
- class Break
6
-
7
- include Axlsx::OptionsParser
8
- include Axlsx::Accessors
9
- include Axlsx::SerializedAttributes
10
-
11
- # Creates a new Break object
12
- # @param options A hash of attribute options for this break.
13
- # @option options [Integer] id Zero-based row or column Id of the page break. Breaks occur above the specified row and left of the specified column.
14
- # @option options [Integer] min Zero-based index of start row or column of the break. For row breaks, specifies column index; for column breaks, specifies row index.
15
- # @option options [Integer] max Zero-based index of end row or column of the break. For row breaks, specifies column index; for column breaks, specifies row index.
16
- # @option options [Boolean] man Manual Break flag. 1 means the break is a manually inserted break.
17
- # @option option [Boolean] pt Flag indicating that a PivotTable created this break.
18
- def initialize(options={})
19
- parse_options options
20
- yield self if block_given?
21
- end
22
-
23
- unsigned_int_attr_accessor :id, :min, :max
24
-
25
- boolean_attr_accessor :man, :pt
26
-
27
- serializable_attributes :id, :min, :max, :man, :pt
28
-
29
- # serializes the break to xml
30
- def to_xml_string(str='')
31
- serialized_tag('brk', str)
32
- end
33
- end
34
- end
35
-
1
+ module Axlsx
2
+
3
+ # The Break class stores the details for row and column page breaks.
4
+ # @see RowBreaks, ColBreaks
5
+ class Break
6
+
7
+ include Axlsx::OptionsParser
8
+ include Axlsx::Accessors
9
+ include Axlsx::SerializedAttributes
10
+
11
+ # Creates a new Break object
12
+ # @param options A hash of attribute options for this break.
13
+ # @option options [Integer] id Zero-based row or column Id of the page break. Breaks occur above the specified row and left of the specified column.
14
+ # @option options [Integer] min Zero-based index of start row or column of the break. For row breaks, specifies column index; for column breaks, specifies row index.
15
+ # @option options [Integer] max Zero-based index of end row or column of the break. For row breaks, specifies column index; for column breaks, specifies row index.
16
+ # @option options [Boolean] man Manual Break flag. 1 means the break is a manually inserted break.
17
+ # @option option [Boolean] pt Flag indicating that a PivotTable created this break.
18
+ def initialize(options={})
19
+ parse_options options
20
+ yield self if block_given?
21
+ end
22
+
23
+ unsigned_int_attr_accessor :id, :min, :max
24
+
25
+ boolean_attr_accessor :man, :pt
26
+
27
+ serializable_attributes :id, :min, :max, :man, :pt
28
+
29
+ # serializes the break to xml
30
+ def to_xml_string(str='')
31
+ serialized_tag('brk', str)
32
+ end
33
+ end
34
+ end
35
+