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.
- checksums.yaml +4 -4
- data/.yardopts +9 -9
- data/.yardopts_guide +18 -18
- data/CHANGELOG.md +385 -354
- data/LICENSE +21 -21
- data/README.md +165 -168
- data/Rakefile +29 -29
- data/examples/generate.rb +15 -15
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
- data/lib/axlsx/content_type/content_type.rb +26 -26
- data/lib/axlsx/content_type/default.rb +25 -25
- data/lib/axlsx/content_type/override.rb +25 -25
- data/lib/axlsx/doc_props/app.rb +235 -235
- data/lib/axlsx/doc_props/core.rb +39 -39
- data/lib/axlsx/drawing/area_chart.rb +99 -99
- data/lib/axlsx/drawing/area_series.rb +110 -110
- data/lib/axlsx/drawing/ax_data_source.rb +26 -26
- data/lib/axlsx/drawing/axes.rb +61 -61
- data/lib/axlsx/drawing/axis.rb +190 -190
- data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
- data/lib/axlsx/drawing/bar_chart.rb +138 -138
- data/lib/axlsx/drawing/bar_series.rb +97 -97
- data/lib/axlsx/drawing/bubble_chart.rb +59 -59
- data/lib/axlsx/drawing/bubble_series.rb +63 -63
- data/lib/axlsx/drawing/cat_axis.rb +85 -85
- data/lib/axlsx/drawing/chart.rb +299 -276
- data/lib/axlsx/drawing/d_lbls.rb +91 -90
- data/lib/axlsx/drawing/drawing.rb +167 -167
- data/lib/axlsx/drawing/graphic_frame.rb +54 -54
- data/lib/axlsx/drawing/hyperlink.rb +100 -100
- data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
- data/lib/axlsx/drawing/line_chart.rb +99 -99
- data/lib/axlsx/drawing/line_series.rb +110 -110
- data/lib/axlsx/drawing/marker.rb +84 -84
- data/lib/axlsx/drawing/num_data.rb +52 -52
- data/lib/axlsx/drawing/num_data_source.rb +62 -62
- data/lib/axlsx/drawing/num_val.rb +34 -34
- data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
- data/lib/axlsx/drawing/pic.rb +211 -211
- data/lib/axlsx/drawing/picture_locking.rb +42 -42
- data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
- data/lib/axlsx/drawing/pie_series.rb +74 -74
- data/lib/axlsx/drawing/scaling.rb +60 -60
- data/lib/axlsx/drawing/scatter_chart.rb +74 -74
- data/lib/axlsx/drawing/scatter_series.rb +129 -129
- data/lib/axlsx/drawing/ser_axis.rb +45 -45
- data/lib/axlsx/drawing/series.rb +69 -69
- data/lib/axlsx/drawing/series_title.rb +25 -25
- data/lib/axlsx/drawing/str_data.rb +42 -42
- data/lib/axlsx/drawing/str_val.rb +34 -34
- data/lib/axlsx/drawing/title.rb +107 -97
- data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
- data/lib/axlsx/drawing/val_axis.rb +37 -37
- data/lib/axlsx/drawing/view_3D.rb +115 -115
- data/lib/axlsx/drawing/vml_drawing.rb +42 -42
- data/lib/axlsx/drawing/vml_shape.rb +66 -66
- data/lib/axlsx/package.rb +398 -388
- data/lib/axlsx/rels/relationship.rb +130 -130
- data/lib/axlsx/rels/relationships.rb +32 -32
- data/lib/axlsx/stylesheet/border.rb +73 -73
- data/lib/axlsx/stylesheet/border_pr.rb +71 -71
- data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
- data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
- data/lib/axlsx/stylesheet/cell_style.rb +72 -72
- data/lib/axlsx/stylesheet/color.rb +76 -76
- data/lib/axlsx/stylesheet/dxf.rb +79 -79
- data/lib/axlsx/stylesheet/fill.rb +35 -35
- data/lib/axlsx/stylesheet/font.rb +156 -156
- data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
- data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
- data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
- data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
- data/lib/axlsx/stylesheet/styles.rb +535 -494
- data/lib/axlsx/stylesheet/table_style.rb +54 -54
- data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
- data/lib/axlsx/stylesheet/table_styles.rb +46 -46
- data/lib/axlsx/stylesheet/xf.rb +147 -147
- data/lib/axlsx/util/accessors.rb +64 -64
- data/lib/axlsx/util/constants.rb +416 -410
- data/lib/axlsx/util/mime_type_utils.rb +11 -11
- data/lib/axlsx/util/options_parser.rb +16 -16
- data/lib/axlsx/util/serialized_attributes.rb +89 -89
- data/lib/axlsx/util/simple_typed_list.rb +179 -179
- data/lib/axlsx/util/storage.rb +146 -146
- data/lib/axlsx/util/validators.rb +312 -312
- data/lib/axlsx/util/zip_command.rb +73 -73
- data/lib/axlsx/version.rb +5 -5
- data/lib/axlsx/workbook/defined_name.rb +128 -128
- data/lib/axlsx/workbook/defined_names.rb +21 -21
- data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
- data/lib/axlsx/workbook/workbook.rb +425 -395
- data/lib/axlsx/workbook/workbook_view.rb +80 -80
- data/lib/axlsx/workbook/workbook_views.rb +22 -22
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
- data/lib/axlsx/workbook/worksheet/border_creator.rb +76 -0
- data/lib/axlsx/workbook/worksheet/break.rb +35 -35
- data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
- data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
- data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
- data/lib/axlsx/workbook/worksheet/col.rb +145 -145
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
- data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
- data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
- data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
- data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
- data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
- data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
- data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
- data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
- data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
- data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
- data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
- data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
- data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
- data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
- data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
- data/lib/axlsx/workbook/worksheet/row.rb +164 -164
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
- data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
- data/lib/axlsx/workbook/worksheet/table.rb +102 -102
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
- data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
- data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
- data/lib/axlsx.rb +204 -185
- data/lib/caxlsx.rb +2 -2
- data/lib/schema/dc.xsd +118 -118
- data/lib/schema/dcmitype.xsd +51 -51
- data/lib/schema/dcterms.xsd +331 -331
- data/lib/schema/dml-chartDrawing.xsd +146 -146
- data/lib/schema/dml-compatibility.xsd +14 -14
- data/lib/schema/dml-lockedCanvas.xsd +11 -11
- data/lib/schema/dml-main.xsd +3048 -3048
- data/lib/schema/dml-picture.xsd +23 -23
- data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
- data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
- data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
- data/lib/schema/shared-bibliography.xsd +144 -144
- data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
- data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
- data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
- data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
- data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
- data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
- data/lib/schema/shared-relationshipReference.xsd +25 -25
- data/lib/schema/vml-main.xsd +569 -569
- data/lib/schema/vml-officeDrawing.xsd +509 -509
- data/lib/schema/vml-presentationDrawing.xsd +12 -12
- data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
- data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
- data/lib/schema/xml.xsd +116 -116
- metadata +5 -252
- data/test/benchmark.rb +0 -72
- data/test/content_type/tc_content_type.rb +0 -76
- data/test/content_type/tc_default.rb +0 -16
- data/test/content_type/tc_override.rb +0 -14
- data/test/doc_props/tc_app.rb +0 -43
- data/test/doc_props/tc_core.rb +0 -42
- data/test/drawing/tc_area_chart.rb +0 -39
- data/test/drawing/tc_area_series.rb +0 -71
- data/test/drawing/tc_axes.rb +0 -8
- data/test/drawing/tc_axis.rb +0 -112
- data/test/drawing/tc_bar_3D_chart.rb +0 -86
- data/test/drawing/tc_bar_chart.rb +0 -86
- data/test/drawing/tc_bar_series.rb +0 -46
- data/test/drawing/tc_bubble_chart.rb +0 -44
- data/test/drawing/tc_bubble_series.rb +0 -21
- data/test/drawing/tc_cat_axis.rb +0 -31
- data/test/drawing/tc_cat_axis_data.rb +0 -27
- data/test/drawing/tc_chart.rb +0 -123
- data/test/drawing/tc_d_lbls.rb +0 -57
- data/test/drawing/tc_data_source.rb +0 -23
- data/test/drawing/tc_drawing.rb +0 -80
- data/test/drawing/tc_graphic_frame.rb +0 -27
- data/test/drawing/tc_hyperlink.rb +0 -64
- data/test/drawing/tc_line_3d_chart.rb +0 -47
- data/test/drawing/tc_line_chart.rb +0 -39
- data/test/drawing/tc_line_series.rb +0 -71
- data/test/drawing/tc_marker.rb +0 -44
- data/test/drawing/tc_named_axis_data.rb +0 -27
- data/test/drawing/tc_num_data.rb +0 -31
- data/test/drawing/tc_num_val.rb +0 -29
- data/test/drawing/tc_one_cell_anchor.rb +0 -66
- data/test/drawing/tc_pic.rb +0 -103
- data/test/drawing/tc_picture_locking.rb +0 -72
- data/test/drawing/tc_pie_3D_chart.rb +0 -28
- data/test/drawing/tc_pie_series.rb +0 -33
- data/test/drawing/tc_scaling.rb +0 -36
- data/test/drawing/tc_scatter_chart.rb +0 -48
- data/test/drawing/tc_scatter_series.rb +0 -74
- data/test/drawing/tc_ser_axis.rb +0 -31
- data/test/drawing/tc_series.rb +0 -23
- data/test/drawing/tc_series_title.rb +0 -54
- data/test/drawing/tc_str_data.rb +0 -18
- data/test/drawing/tc_str_val.rb +0 -30
- data/test/drawing/tc_title.rb +0 -70
- data/test/drawing/tc_two_cell_anchor.rb +0 -36
- data/test/drawing/tc_val_axis.rb +0 -24
- data/test/drawing/tc_view_3D.rb +0 -54
- data/test/drawing/tc_vml_drawing.rb +0 -25
- data/test/drawing/tc_vml_shape.rb +0 -106
- data/test/fixtures/image1.gif +0 -0
- data/test/fixtures/image1.jpeg +0 -0
- data/test/fixtures/image1.jpg +0 -0
- data/test/fixtures/image1.png +0 -0
- data/test/fixtures/image1_fake.jpg +0 -0
- data/test/profile.rb +0 -24
- data/test/rels/tc_relationship.rb +0 -52
- data/test/rels/tc_relationships.rb +0 -37
- data/test/stylesheet/tc_border.rb +0 -37
- data/test/stylesheet/tc_border_pr.rb +0 -32
- data/test/stylesheet/tc_cell_alignment.rb +0 -81
- data/test/stylesheet/tc_cell_protection.rb +0 -29
- data/test/stylesheet/tc_cell_style.rb +0 -57
- data/test/stylesheet/tc_color.rb +0 -43
- data/test/stylesheet/tc_dxf.rb +0 -81
- data/test/stylesheet/tc_fill.rb +0 -18
- data/test/stylesheet/tc_font.rb +0 -133
- data/test/stylesheet/tc_gradient_fill.rb +0 -72
- data/test/stylesheet/tc_gradient_stop.rb +0 -31
- data/test/stylesheet/tc_num_fmt.rb +0 -30
- data/test/stylesheet/tc_pattern_fill.rb +0 -43
- data/test/stylesheet/tc_styles.rb +0 -309
- data/test/stylesheet/tc_table_style.rb +0 -44
- data/test/stylesheet/tc_table_style_element.rb +0 -45
- data/test/stylesheet/tc_table_styles.rb +0 -29
- data/test/stylesheet/tc_xf.rb +0 -120
- data/test/tc_axlsx.rb +0 -109
- data/test/tc_helper.rb +0 -10
- data/test/tc_package.rb +0 -317
- data/test/util/tc_mime_type_utils.rb +0 -13
- data/test/util/tc_serialized_attributes.rb +0 -19
- data/test/util/tc_simple_typed_list.rb +0 -77
- data/test/util/tc_validators.rb +0 -210
- data/test/workbook/tc_defined_name.rb +0 -49
- data/test/workbook/tc_shared_strings_table.rb +0 -59
- data/test/workbook/tc_workbook.rb +0 -165
- data/test/workbook/tc_workbook_view.rb +0 -50
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
- data/test/workbook/worksheet/tc_break.rb +0 -49
- data/test/workbook/worksheet/tc_cell.rb +0 -465
- data/test/workbook/worksheet/tc_cfvo.rb +0 -31
- data/test/workbook/worksheet/tc_col.rb +0 -93
- data/test/workbook/worksheet/tc_color_scale.rb +0 -58
- data/test/workbook/worksheet/tc_comment.rb +0 -72
- data/test/workbook/worksheet/tc_comments.rb +0 -57
- data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
- data/test/workbook/worksheet/tc_data_bar.rb +0 -46
- data/test/workbook/worksheet/tc_data_validation.rb +0 -265
- data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
- data/test/workbook/worksheet/tc_header_footer.rb +0 -151
- data/test/workbook/worksheet/tc_icon_set.rb +0 -45
- data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
- data/test/workbook/worksheet/tc_page_margins.rb +0 -97
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
- data/test/workbook/worksheet/tc_page_setup.rb +0 -143
- data/test/workbook/worksheet/tc_pane.rb +0 -54
- data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
- data/test/workbook/worksheet/tc_print_options.rb +0 -72
- data/test/workbook/worksheet/tc_protected_range.rb +0 -17
- data/test/workbook/worksheet/tc_rich_text.rb +0 -44
- data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
- data/test/workbook/worksheet/tc_row.rb +0 -160
- data/test/workbook/worksheet/tc_selection.rb +0 -55
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
- data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
- data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
- data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
- data/test/workbook/worksheet/tc_table.rb +0 -77
- data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
- data/test/workbook/worksheet/tc_worksheet.rb +0 -632
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
|
@@ -1,312 +1,312 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
module Axlsx
|
|
3
|
-
# Validate a value against a specific list of allowed values.
|
|
4
|
-
class RestrictionValidator
|
|
5
|
-
# Perform validation
|
|
6
|
-
# @param [String] name The name of what is being validatied. This is included in the error message
|
|
7
|
-
# @param [Array] choices The list of choices to validate against
|
|
8
|
-
# @param [Any] v The value to be validated
|
|
9
|
-
# @raise [ArgumentError] Raised if the value provided is not in the list of choices.
|
|
10
|
-
# @return [Boolean] true if validation succeeds.
|
|
11
|
-
def self.validate(name, choices, v)
|
|
12
|
-
raise ArgumentError, (ERR_RESTRICTION % [v.to_s, name, choices.inspect]) unless choices.include?(v)
|
|
13
|
-
true
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# Validate that the value provided is between a specific range
|
|
18
|
-
# Note that no data conversions will be done for you!
|
|
19
|
-
# Comparisons will be made using < and > or <= and <= when the inclusive parameter is true
|
|
20
|
-
class RangeValidator
|
|
21
|
-
# @param [String] name The name of what is being validated
|
|
22
|
-
# @param [Any] min The minimum allowed value
|
|
23
|
-
# @param [Any] max The maximum allowed value
|
|
24
|
-
# @param [Any] value The value to be validated
|
|
25
|
-
# @param [Boolean] inclusive Flag indicating if the comparison should be inclusive.
|
|
26
|
-
def self.validate(name, min, max, value, inclusive = true)
|
|
27
|
-
passes = if inclusive
|
|
28
|
-
min <= value && value <= max
|
|
29
|
-
else
|
|
30
|
-
min < value && value < max
|
|
31
|
-
end
|
|
32
|
-
raise ArgumentError, (ERR_RANGE % [value.inspect, min.to_s, max.to_s, inclusive]) unless passes
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
# Validates the value against the regular expression provided.
|
|
36
|
-
class RegexValidator
|
|
37
|
-
# @param [String] name The name of what is being validated. This is included in the output when the value is invalid
|
|
38
|
-
# @param [Regexp] regex The regular expression to evaluate
|
|
39
|
-
# @param [Any] v The value to validate.
|
|
40
|
-
def self.validate(name, regex, v)
|
|
41
|
-
raise ArgumentError, (ERR_REGEX % [v.inspect, regex.to_s]) unless (v.respond_to?(:to_s) && v.to_s.match(regex))
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Validate that the class of the value provided is either an instance or the class of the allowed types and that any specified additional validation returns true.
|
|
46
|
-
class DataTypeValidator
|
|
47
|
-
# Perform validation
|
|
48
|
-
# @param [String] name The name of what is being validated. This is included in the error message
|
|
49
|
-
# @param [Array, Class] types A single class or array of classes that the value is validated against.
|
|
50
|
-
# @param [Block] other Any block that must evaluate to true for the value to be valid
|
|
51
|
-
# @raise [ArugumentError] Raised if the class of the value provided is not in the specified array of types or the block passed returns false
|
|
52
|
-
# @return [Boolean] true if validation succeeds.
|
|
53
|
-
# @see validate_boolean
|
|
54
|
-
def self.validate(name, types, v, other=false)
|
|
55
|
-
if other.is_a?(Proc)
|
|
56
|
-
raise ArgumentError, (ERR_TYPE % [v.inspect, name, types.inspect]) unless other.call(v)
|
|
57
|
-
end
|
|
58
|
-
v_class = v.is_a?(Class) ? v : v.class
|
|
59
|
-
Array(types).each do |t|
|
|
60
|
-
return if v_class <= t
|
|
61
|
-
end
|
|
62
|
-
raise ArgumentError, (ERR_TYPE % [v.inspect, name, types.inspect])
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
# Requires that the value can be converted to an integer
|
|
68
|
-
# @para, [Any] v the value to validate
|
|
69
|
-
# @raise [ArgumentError] raised if the value cannot be converted to an integer
|
|
70
|
-
def self.validate_integerish(v)
|
|
71
|
-
raise ArgumentError, (ERR_INTEGERISH % v.inspect) unless (v.respond_to?(:to_i) && v.to_i.is_a?(Integer))
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Requires that the value is between -54000000 and 54000000
|
|
75
|
-
# @param [Any] v The value validated
|
|
76
|
-
# @raise [ArgumentError] raised if the value cannot be converted to an integer between the allowed angle values for chart label rotation.
|
|
77
|
-
# @return [Boolean] true if the data is valid
|
|
78
|
-
def self.validate_angle(v)
|
|
79
|
-
raise ArgumentError, (ERR_ANGLE % v.inspect) unless (v.to_i >= -5400000 && v.to_i <= 5400000)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# Validates an unsigned intger
|
|
83
|
-
UINT_VALIDATOR = lambda { |arg| arg.respond_to?(:>=) && arg >= 0 }
|
|
84
|
-
|
|
85
|
-
# Requires that the value is a Integer and is greater or equal to 0
|
|
86
|
-
# @param [Any] v The value validated
|
|
87
|
-
# @raise [ArgumentError] raised if the value is not a Integer value greater or equal to 0
|
|
88
|
-
# @return [Boolean] true if the data is valid
|
|
89
|
-
def self.validate_unsigned_int(v)
|
|
90
|
-
DataTypeValidator.validate(:unsigned_int, Integer, v, UINT_VALIDATOR)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Requires that the value is a Integer or Float and is greater or equal to 0
|
|
94
|
-
# @param [Any] v The value validated
|
|
95
|
-
# @raise [ArgumentError] raised if the value is not a Integer, Float value greater or equal to 0
|
|
96
|
-
# @return [Boolean] true if the data is valid
|
|
97
|
-
def self.validate_unsigned_numeric(v)
|
|
98
|
-
DataTypeValidator.validate(:unsigned_numeric, Numeric, v, UINT_VALIDATOR)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Requires that the value is a Integer
|
|
102
|
-
# @param [Any] v The value validated
|
|
103
|
-
def self.validate_int(v)
|
|
104
|
-
DataTypeValidator.validate :signed_int, Integer, v
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Requires that the value is a form that can be evaluated as a boolean in an xml document.
|
|
108
|
-
# The value must be an instance of String, Integer, Symbol, TrueClass or FalseClass and
|
|
109
|
-
# it must be one of 0, 1, "true", "false", :true, :false, true, false, "0", or "1"
|
|
110
|
-
# @param [Any] v The value validated
|
|
111
|
-
def self.validate_boolean(v)
|
|
112
|
-
DataTypeValidator.validate(:boolean, [String, Integer, Symbol, TrueClass, FalseClass], v, lambda { |arg| [0, 1, "true", "false", :true, :false, true, false, "0", "1"].include?(arg) })
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# Requires that the value is a String
|
|
116
|
-
# @param [Any] v The value validated
|
|
117
|
-
def self.validate_string(v)
|
|
118
|
-
DataTypeValidator.validate :string, String, v
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
# Requires that the value is a Float
|
|
122
|
-
# @param [Any] v The value validated
|
|
123
|
-
def self.validate_float(v)
|
|
124
|
-
DataTypeValidator.validate :float, Float, v
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
# Requires that the value is a string containing a positive decimal number followed by one of the following units:
|
|
128
|
-
# "mm", "cm", "in", "pt", "pc", "pi"
|
|
129
|
-
def self.validate_number_with_unit(v)
|
|
130
|
-
RegexValidator.validate "number_with_unit", /\A[0-9]+(\.[0-9]+)?(mm|cm|in|pt|pc|pi)\Z/, v
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# Requires that the value is an integer ranging from 10 to 400.
|
|
134
|
-
def self.validate_scale_10_400(v)
|
|
135
|
-
DataTypeValidator.validate "page_scale", Integer, v, lambda { |arg| arg >= 10 && arg <= 400 }
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# Requires that the value is an integer ranging from 10 to 400 or 0.
|
|
139
|
-
def self.validate_scale_0_10_400(v)
|
|
140
|
-
DataTypeValidator.validate "page_scale", Integer, v, lambda { |arg| arg == 0 || (arg >= 10 && arg <= 400) }
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# Requires that the value is one of :default, :landscape, or :portrait.
|
|
144
|
-
def self.validate_page_orientation(v)
|
|
145
|
-
RestrictionValidator.validate "page_orientation", [:default, :landscape, :portrait], v
|
|
146
|
-
end
|
|
147
|
-
# Requires that the value is one of :none, :single, :double, :singleAccounting, :doubleAccounting
|
|
148
|
-
def self.validate_cell_u(v)
|
|
149
|
-
RestrictionValidator.validate "cell run style u", [:none, :single, :double, :singleAccounting, :doubleAccounting], v
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
# validates cell style family which must be between 1 and 5
|
|
153
|
-
def self.validate_family(v)
|
|
154
|
-
RestrictionValidator.validate "cell run style family", 1..5, v
|
|
155
|
-
end
|
|
156
|
-
# Requires that the value is valid pattern type.
|
|
157
|
-
# valid pattern types must be one of :none, :solid, :mediumGray, :darkGray, :lightGray, :darkHorizontal, :darkVertical, :darkDown,
|
|
158
|
-
# :darkUp, :darkGrid, :darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, or :gray0625.
|
|
159
|
-
# @param [Any] v The value validated
|
|
160
|
-
def self.validate_pattern_type(v)
|
|
161
|
-
RestrictionValidator.validate :pattern_type, [:none, :solid, :mediumGray, :darkGray, :lightGray, :darkHorizontal, :darkVertical, :darkDown, :darkUp, :darkGrid,
|
|
162
|
-
:darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, :gray0625], v
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
# Requires that the value is one of the ST_TimePeriod types
|
|
166
|
-
# valid time period types are today, yesterday, tomorrow, last7Days,
|
|
167
|
-
# thisMonth, lastMonth, nextMonth, thisWeek, lastWeek, nextWeek
|
|
168
|
-
def self.validate_time_period_type(v)
|
|
169
|
-
RestrictionValidator.validate :time_period_type, [:today, :yesterday, :tomorrow, :last7Days, :thisMonth, :lastMonth, :nextMonth, :thisWeek, :lastWeek, :nextWeek], v
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
# Requires that the value is one of the valid ST_IconSet types
|
|
173
|
-
# Allowed values are: 3Arrows, 3ArrowsGray, 3Flags, 3TrafficLights1, 3TrafficLights2, 3Signs, 3Symbols, 3Symbols2, 4Arrows, 4ArrowsGray, 4RedToBlack, 4Rating, 4TrafficLights, 5Arrows, 5ArrowsGray, 5Rating, 5Quarters
|
|
174
|
-
def self.validate_icon_set(v)
|
|
175
|
-
RestrictionValidator.validate :iconSet, ["3Arrows", "3ArrowsGray", "3Flags", "3TrafficLights1", "3TrafficLights2", "3Signs", "3Symbols", "3Symbols2", "4Arrows", "4ArrowsGray", "4RedToBlack", "4Rating", "4TrafficLights", "5Arrows", "5ArrowsGray", "5Rating", "5Quarters"], v
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
# Requires that the value is valid conditional formatting type.
|
|
179
|
-
# valid types must be one of expression, cellIs, colorScale,
|
|
180
|
-
# dataBar, iconSet, top10, uniqueValues, duplicateValues,
|
|
181
|
-
# containsText, notContainsText, beginsWith, endsWith,
|
|
182
|
-
# containsBlanks, notContainsBlanks, containsErrors,
|
|
183
|
-
# notContainsErrors, timePeriod, aboveAverage
|
|
184
|
-
# @param [Any] v The value validated
|
|
185
|
-
def self.validate_conditional_formatting_type(v)
|
|
186
|
-
RestrictionValidator.validate :conditional_formatting_type, [:expression, :cellIs, :colorScale, :dataBar, :iconSet, :top10, :uniqueValues, :duplicateValues, :containsText, :notContainsText, :beginsWith, :endsWith, :containsBlanks, :notContainsBlanks, :containsErrors, :notContainsErrors, :timePeriod, :aboveAverage], v
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
# Requires thatt he value is a valid conditional formatting value object type.
|
|
190
|
-
# valid types must be one of num, percent, max, min, formula and percentile
|
|
191
|
-
def self.validate_conditional_formatting_value_object_type(v)
|
|
192
|
-
RestrictionValidator.validate :conditional_formatting_value_object_type, [:num, :percent, :max, :min, :formula, :percentile], v
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
# Requires that the value is valid conditional formatting operator.
|
|
196
|
-
# valid operators must be one of lessThan, lessThanOrEqual, equal,
|
|
197
|
-
# notEqual, greaterThanOrEqual, greaterThan, between, notBetween,
|
|
198
|
-
# containsText, notContains, beginsWith, endsWith
|
|
199
|
-
# @param [Any] v The value validated
|
|
200
|
-
def self.validate_conditional_formatting_operator(v)
|
|
201
|
-
RestrictionValidator.validate :conditional_formatting_type, [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween, :containsText, :notContains, :beginsWith, :endsWith], v
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
# Requires that the value is a gradient_type.
|
|
205
|
-
# valid types are :linear and :path
|
|
206
|
-
# @param [Any] v The value validated
|
|
207
|
-
def self.validate_gradient_type(v)
|
|
208
|
-
RestrictionValidator.validate :gradient_type, [:linear, :path], v
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
# Requires that the value is a valid scatterStyle
|
|
212
|
-
# must be one of :none | :line | :lineMarker | :marker | :smooth | :smoothMarker
|
|
213
|
-
# must be one of "none" | "line" | "lineMarker" | "marker" | "smooth" | "smoothMarker"
|
|
214
|
-
# @param [Symbol|String] v the value to validate
|
|
215
|
-
def self.validate_scatter_style(v)
|
|
216
|
-
Axlsx::RestrictionValidator.validate "ScatterChart.scatterStyle", [:none, :line, :lineMarker, :marker, :smooth, :smoothMarker], v.to_sym
|
|
217
|
-
end
|
|
218
|
-
# Requires that the value is a valid horizontal_alignment
|
|
219
|
-
# :general, :left, :center, :right, :fill, :justify, :centerContinuous, :distributed are allowed
|
|
220
|
-
# @param [Any] v The value validated
|
|
221
|
-
def self.validate_horizontal_alignment(v)
|
|
222
|
-
RestrictionValidator.validate :horizontal_alignment, [:general, :left, :center, :right, :fill, :justify, :centerContinuous, :distributed], v
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
# Requires that the value is a valid vertical_alignment
|
|
226
|
-
# :top, :center, :bottom, :justify, :distributed are allowed
|
|
227
|
-
# @param [Any] v The value validated
|
|
228
|
-
def self.validate_vertical_alignment(v)
|
|
229
|
-
RestrictionValidator.validate :vertical_alignment, [:top, :center, :bottom, :justify, :distributed], v
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
# Requires that the value is a valid content_type
|
|
233
|
-
# TABLE_CT, WORKBOOK_CT, APP_CT, RELS_CT, STYLES_CT, XML_CT, WORKSHEET_CT, SHARED_STRINGS_CT, CORE_CT, CHART_CT, DRAWING_CT, COMMENT_CT are allowed
|
|
234
|
-
# @param [Any] v The value validated
|
|
235
|
-
def self.validate_content_type(v)
|
|
236
|
-
RestrictionValidator.validate :content_type, [TABLE_CT, WORKBOOK_CT, APP_CT, RELS_CT, STYLES_CT, XML_CT, WORKSHEET_CT, SHARED_STRINGS_CT, CORE_CT, CHART_CT, JPEG_CT, GIF_CT, PNG_CT, DRAWING_CT, COMMENT_CT, VML_DRAWING_CT, PIVOT_TABLE_CT, PIVOT_TABLE_CACHE_DEFINITION_CT], v
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
# Requires that the value is a valid relationship_type
|
|
240
|
-
# XML_NS_R, TABLE_R, WORKBOOK_R, WORKSHEET_R, APP_R, RELS_R, CORE_R, STYLES_R, CHART_R, DRAWING_R, IMAGE_R, HYPERLINK_R, SHARED_STRINGS_R are allowed
|
|
241
|
-
# @param [Any] v The value validated
|
|
242
|
-
def self.validate_relationship_type(v)
|
|
243
|
-
RestrictionValidator.validate :relationship_type, [XML_NS_R, TABLE_R, WORKBOOK_R, WORKSHEET_R, APP_R, RELS_R, CORE_R, STYLES_R, CHART_R, DRAWING_R, IMAGE_R, HYPERLINK_R, SHARED_STRINGS_R, COMMENT_R, VML_DRAWING_R, COMMENT_R_NULL, PIVOT_TABLE_R, PIVOT_TABLE_CACHE_DEFINITION_R], v
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
# Requires that the value is a valid table element type
|
|
247
|
-
# :wholeTable, :headerRow, :totalRow, :firstColumn, :lastColumn, :firstRowStripe, :secondRowStripe, :firstColumnStripe, :secondColumnStripe, :firstHeaderCell, :lastHeaderCell, :firstTotalCell, :lastTotalCell, :firstSubtotalColumn, :secondSubtotalColumn, :thirdSubtotalColumn, :firstSubtotalRow, :secondSubtotalRow, :thirdSubtotalRow, :blankRow, :firstColumnSubheading, :secondColumnSubheading, :thirdColumnSubheading, :firstRowSubheading, :secondRowSubheading, :thirdRowSubheading, :pageFieldLabels, :pageFieldValues are allowed
|
|
248
|
-
# @param [Any] v The value validated
|
|
249
|
-
def self.validate_table_element_type(v)
|
|
250
|
-
RestrictionValidator.validate :table_element_type, [:wholeTable, :headerRow, :totalRow, :firstColumn, :lastColumn, :firstRowStripe, :secondRowStripe, :firstColumnStripe, :secondColumnStripe, :firstHeaderCell, :lastHeaderCell, :firstTotalCell, :lastTotalCell, :firstSubtotalColumn, :secondSubtotalColumn, :thirdSubtotalColumn, :firstSubtotalRow, :secondSubtotalRow, :thirdSubtotalRow, :blankRow, :firstColumnSubheading, :secondColumnSubheading, :thirdColumnSubheading, :firstRowSubheading, :secondRowSubheading, :thirdRowSubheading, :pageFieldLabels, :pageFieldValues], v
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
# Requires that the value is a valid data_validation_error_style
|
|
254
|
-
# :information, :stop, :warning
|
|
255
|
-
# @param [Any] v The value validated
|
|
256
|
-
def self.validate_data_validation_error_style(v)
|
|
257
|
-
RestrictionValidator.validate :validate_data_validation_error_style, [:information, :stop, :warning], v
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
# Requires that the value is valid data validation operator.
|
|
261
|
-
# valid operators must be one of lessThan, lessThanOrEqual, equal,
|
|
262
|
-
# notEqual, greaterThanOrEqual, greaterThan, between, notBetween
|
|
263
|
-
# @param [Any] v The value validated
|
|
264
|
-
def self.validate_data_validation_operator(v)
|
|
265
|
-
RestrictionValidator.validate :data_validation_operator, [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween], v
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
# Requires that the value is valid data validation type.
|
|
269
|
-
# valid types must be one of custom, data, decimal, list, none, textLength, time, whole
|
|
270
|
-
# @param [Any] v The value validated
|
|
271
|
-
def self.validate_data_validation_type(v)
|
|
272
|
-
RestrictionValidator.validate :data_validation_type, [:custom, :data, :decimal, :list, :none, :textLength, :date, :time, :whole], v
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
# Requires that the value is a valid sheet view type.
|
|
276
|
-
# valid types must be one of normal, page_break_preview, page_layout
|
|
277
|
-
# @param [Any] v The value validated
|
|
278
|
-
def self.validate_sheet_view_type(v)
|
|
279
|
-
RestrictionValidator.validate :sheet_view_type, [:normal, :page_break_preview, :page_layout], v
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
# Requires that the value is a valid active pane type.
|
|
283
|
-
# valid types must be one of bottom_left, bottom_right, top_left, top_right
|
|
284
|
-
# @param [Any] v The value validated
|
|
285
|
-
def self.validate_pane_type(v)
|
|
286
|
-
RestrictionValidator.validate :active_pane_type, [:bottom_left, :bottom_right, :top_left, :top_right], v
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
# Requires that the value is a valid split state type.
|
|
290
|
-
# valid types must be one of frozen, frozen_split, split
|
|
291
|
-
# @param [Any] v The value validated
|
|
292
|
-
def self.validate_split_state_type(v)
|
|
293
|
-
RestrictionValidator.validate :split_state_type, [:frozen, :frozen_split, :split], v
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
# Requires that the value is a valid "display blanks as" type.
|
|
297
|
-
# valid types must be one of gap, span, zero
|
|
298
|
-
# @param [Any] v The value validated
|
|
299
|
-
def self.validate_display_blanks_as(v)
|
|
300
|
-
RestrictionValidator.validate :display_blanks_as, [:gap, :span, :zero], v
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
# Requires that the value is one of :visible, :hidden, :very_hidden
|
|
304
|
-
def self.validate_view_visibility(v)
|
|
305
|
-
RestrictionValidator.validate :visibility, [:visible, :hidden, :very_hidden], v
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
# Requires that the value is one of :default, :circle, :dash, :diamond, :dot, :picture, :plus, :square, :star, :triangle, :x
|
|
309
|
-
def self.validate_marker_symbol(v)
|
|
310
|
-
RestrictionValidator.validate :marker_symbol, [:default, :circle, :dash, :diamond, :dot, :picture, :plus, :square, :star, :triangle, :x], v
|
|
311
|
-
end
|
|
312
|
-
end
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# Validate a value against a specific list of allowed values.
|
|
4
|
+
class RestrictionValidator
|
|
5
|
+
# Perform validation
|
|
6
|
+
# @param [String] name The name of what is being validatied. This is included in the error message
|
|
7
|
+
# @param [Array] choices The list of choices to validate against
|
|
8
|
+
# @param [Any] v The value to be validated
|
|
9
|
+
# @raise [ArgumentError] Raised if the value provided is not in the list of choices.
|
|
10
|
+
# @return [Boolean] true if validation succeeds.
|
|
11
|
+
def self.validate(name, choices, v)
|
|
12
|
+
raise ArgumentError, (ERR_RESTRICTION % [v.to_s, name, choices.inspect]) unless choices.include?(v)
|
|
13
|
+
true
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Validate that the value provided is between a specific range
|
|
18
|
+
# Note that no data conversions will be done for you!
|
|
19
|
+
# Comparisons will be made using < and > or <= and <= when the inclusive parameter is true
|
|
20
|
+
class RangeValidator
|
|
21
|
+
# @param [String] name The name of what is being validated
|
|
22
|
+
# @param [Any] min The minimum allowed value
|
|
23
|
+
# @param [Any] max The maximum allowed value
|
|
24
|
+
# @param [Any] value The value to be validated
|
|
25
|
+
# @param [Boolean] inclusive Flag indicating if the comparison should be inclusive.
|
|
26
|
+
def self.validate(name, min, max, value, inclusive = true)
|
|
27
|
+
passes = if inclusive
|
|
28
|
+
min <= value && value <= max
|
|
29
|
+
else
|
|
30
|
+
min < value && value < max
|
|
31
|
+
end
|
|
32
|
+
raise ArgumentError, (ERR_RANGE % [value.inspect, min.to_s, max.to_s, inclusive]) unless passes
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
# Validates the value against the regular expression provided.
|
|
36
|
+
class RegexValidator
|
|
37
|
+
# @param [String] name The name of what is being validated. This is included in the output when the value is invalid
|
|
38
|
+
# @param [Regexp] regex The regular expression to evaluate
|
|
39
|
+
# @param [Any] v The value to validate.
|
|
40
|
+
def self.validate(name, regex, v)
|
|
41
|
+
raise ArgumentError, (ERR_REGEX % [v.inspect, regex.to_s]) unless (v.respond_to?(:to_s) && v.to_s.match(regex))
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Validate that the class of the value provided is either an instance or the class of the allowed types and that any specified additional validation returns true.
|
|
46
|
+
class DataTypeValidator
|
|
47
|
+
# Perform validation
|
|
48
|
+
# @param [String] name The name of what is being validated. This is included in the error message
|
|
49
|
+
# @param [Array, Class] types A single class or array of classes that the value is validated against.
|
|
50
|
+
# @param [Block] other Any block that must evaluate to true for the value to be valid
|
|
51
|
+
# @raise [ArugumentError] Raised if the class of the value provided is not in the specified array of types or the block passed returns false
|
|
52
|
+
# @return [Boolean] true if validation succeeds.
|
|
53
|
+
# @see validate_boolean
|
|
54
|
+
def self.validate(name, types, v, other=false)
|
|
55
|
+
if other.is_a?(Proc)
|
|
56
|
+
raise ArgumentError, (ERR_TYPE % [v.inspect, name, types.inspect]) unless other.call(v)
|
|
57
|
+
end
|
|
58
|
+
v_class = v.is_a?(Class) ? v : v.class
|
|
59
|
+
Array(types).each do |t|
|
|
60
|
+
return if v_class <= t
|
|
61
|
+
end
|
|
62
|
+
raise ArgumentError, (ERR_TYPE % [v.inspect, name, types.inspect])
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# Requires that the value can be converted to an integer
|
|
68
|
+
# @para, [Any] v the value to validate
|
|
69
|
+
# @raise [ArgumentError] raised if the value cannot be converted to an integer
|
|
70
|
+
def self.validate_integerish(v)
|
|
71
|
+
raise ArgumentError, (ERR_INTEGERISH % v.inspect) unless (v.respond_to?(:to_i) && v.to_i.is_a?(Integer))
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Requires that the value is between -54000000 and 54000000
|
|
75
|
+
# @param [Any] v The value validated
|
|
76
|
+
# @raise [ArgumentError] raised if the value cannot be converted to an integer between the allowed angle values for chart label rotation.
|
|
77
|
+
# @return [Boolean] true if the data is valid
|
|
78
|
+
def self.validate_angle(v)
|
|
79
|
+
raise ArgumentError, (ERR_ANGLE % v.inspect) unless (v.to_i >= -5400000 && v.to_i <= 5400000)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Validates an unsigned intger
|
|
83
|
+
UINT_VALIDATOR = lambda { |arg| arg.respond_to?(:>=) && arg >= 0 }
|
|
84
|
+
|
|
85
|
+
# Requires that the value is a Integer and is greater or equal to 0
|
|
86
|
+
# @param [Any] v The value validated
|
|
87
|
+
# @raise [ArgumentError] raised if the value is not a Integer value greater or equal to 0
|
|
88
|
+
# @return [Boolean] true if the data is valid
|
|
89
|
+
def self.validate_unsigned_int(v)
|
|
90
|
+
DataTypeValidator.validate(:unsigned_int, Integer, v, UINT_VALIDATOR)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Requires that the value is a Integer or Float and is greater or equal to 0
|
|
94
|
+
# @param [Any] v The value validated
|
|
95
|
+
# @raise [ArgumentError] raised if the value is not a Integer, Float value greater or equal to 0
|
|
96
|
+
# @return [Boolean] true if the data is valid
|
|
97
|
+
def self.validate_unsigned_numeric(v)
|
|
98
|
+
DataTypeValidator.validate(:unsigned_numeric, Numeric, v, UINT_VALIDATOR)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Requires that the value is a Integer
|
|
102
|
+
# @param [Any] v The value validated
|
|
103
|
+
def self.validate_int(v)
|
|
104
|
+
DataTypeValidator.validate :signed_int, Integer, v
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Requires that the value is a form that can be evaluated as a boolean in an xml document.
|
|
108
|
+
# The value must be an instance of String, Integer, Symbol, TrueClass or FalseClass and
|
|
109
|
+
# it must be one of 0, 1, "true", "false", :true, :false, true, false, "0", or "1"
|
|
110
|
+
# @param [Any] v The value validated
|
|
111
|
+
def self.validate_boolean(v)
|
|
112
|
+
DataTypeValidator.validate(:boolean, [String, Integer, Symbol, TrueClass, FalseClass], v, lambda { |arg| [0, 1, "true", "false", :true, :false, true, false, "0", "1"].include?(arg) })
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Requires that the value is a String
|
|
116
|
+
# @param [Any] v The value validated
|
|
117
|
+
def self.validate_string(v)
|
|
118
|
+
DataTypeValidator.validate :string, String, v
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Requires that the value is a Float
|
|
122
|
+
# @param [Any] v The value validated
|
|
123
|
+
def self.validate_float(v)
|
|
124
|
+
DataTypeValidator.validate :float, Float, v
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Requires that the value is a string containing a positive decimal number followed by one of the following units:
|
|
128
|
+
# "mm", "cm", "in", "pt", "pc", "pi"
|
|
129
|
+
def self.validate_number_with_unit(v)
|
|
130
|
+
RegexValidator.validate "number_with_unit", /\A[0-9]+(\.[0-9]+)?(mm|cm|in|pt|pc|pi)\Z/, v
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Requires that the value is an integer ranging from 10 to 400.
|
|
134
|
+
def self.validate_scale_10_400(v)
|
|
135
|
+
DataTypeValidator.validate "page_scale", Integer, v, lambda { |arg| arg >= 10 && arg <= 400 }
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Requires that the value is an integer ranging from 10 to 400 or 0.
|
|
139
|
+
def self.validate_scale_0_10_400(v)
|
|
140
|
+
DataTypeValidator.validate "page_scale", Integer, v, lambda { |arg| arg == 0 || (arg >= 10 && arg <= 400) }
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Requires that the value is one of :default, :landscape, or :portrait.
|
|
144
|
+
def self.validate_page_orientation(v)
|
|
145
|
+
RestrictionValidator.validate "page_orientation", [:default, :landscape, :portrait], v
|
|
146
|
+
end
|
|
147
|
+
# Requires that the value is one of :none, :single, :double, :singleAccounting, :doubleAccounting
|
|
148
|
+
def self.validate_cell_u(v)
|
|
149
|
+
RestrictionValidator.validate "cell run style u", [:none, :single, :double, :singleAccounting, :doubleAccounting], v
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# validates cell style family which must be between 1 and 5
|
|
153
|
+
def self.validate_family(v)
|
|
154
|
+
RestrictionValidator.validate "cell run style family", 1..5, v
|
|
155
|
+
end
|
|
156
|
+
# Requires that the value is valid pattern type.
|
|
157
|
+
# valid pattern types must be one of :none, :solid, :mediumGray, :darkGray, :lightGray, :darkHorizontal, :darkVertical, :darkDown,
|
|
158
|
+
# :darkUp, :darkGrid, :darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, or :gray0625.
|
|
159
|
+
# @param [Any] v The value validated
|
|
160
|
+
def self.validate_pattern_type(v)
|
|
161
|
+
RestrictionValidator.validate :pattern_type, [:none, :solid, :mediumGray, :darkGray, :lightGray, :darkHorizontal, :darkVertical, :darkDown, :darkUp, :darkGrid,
|
|
162
|
+
:darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, :gray0625], v
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Requires that the value is one of the ST_TimePeriod types
|
|
166
|
+
# valid time period types are today, yesterday, tomorrow, last7Days,
|
|
167
|
+
# thisMonth, lastMonth, nextMonth, thisWeek, lastWeek, nextWeek
|
|
168
|
+
def self.validate_time_period_type(v)
|
|
169
|
+
RestrictionValidator.validate :time_period_type, [:today, :yesterday, :tomorrow, :last7Days, :thisMonth, :lastMonth, :nextMonth, :thisWeek, :lastWeek, :nextWeek], v
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Requires that the value is one of the valid ST_IconSet types
|
|
173
|
+
# Allowed values are: 3Arrows, 3ArrowsGray, 3Flags, 3TrafficLights1, 3TrafficLights2, 3Signs, 3Symbols, 3Symbols2, 4Arrows, 4ArrowsGray, 4RedToBlack, 4Rating, 4TrafficLights, 5Arrows, 5ArrowsGray, 5Rating, 5Quarters
|
|
174
|
+
def self.validate_icon_set(v)
|
|
175
|
+
RestrictionValidator.validate :iconSet, ["3Arrows", "3ArrowsGray", "3Flags", "3TrafficLights1", "3TrafficLights2", "3Signs", "3Symbols", "3Symbols2", "4Arrows", "4ArrowsGray", "4RedToBlack", "4Rating", "4TrafficLights", "5Arrows", "5ArrowsGray", "5Rating", "5Quarters"], v
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Requires that the value is valid conditional formatting type.
|
|
179
|
+
# valid types must be one of expression, cellIs, colorScale,
|
|
180
|
+
# dataBar, iconSet, top10, uniqueValues, duplicateValues,
|
|
181
|
+
# containsText, notContainsText, beginsWith, endsWith,
|
|
182
|
+
# containsBlanks, notContainsBlanks, containsErrors,
|
|
183
|
+
# notContainsErrors, timePeriod, aboveAverage
|
|
184
|
+
# @param [Any] v The value validated
|
|
185
|
+
def self.validate_conditional_formatting_type(v)
|
|
186
|
+
RestrictionValidator.validate :conditional_formatting_type, [:expression, :cellIs, :colorScale, :dataBar, :iconSet, :top10, :uniqueValues, :duplicateValues, :containsText, :notContainsText, :beginsWith, :endsWith, :containsBlanks, :notContainsBlanks, :containsErrors, :notContainsErrors, :timePeriod, :aboveAverage], v
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Requires thatt he value is a valid conditional formatting value object type.
|
|
190
|
+
# valid types must be one of num, percent, max, min, formula and percentile
|
|
191
|
+
def self.validate_conditional_formatting_value_object_type(v)
|
|
192
|
+
RestrictionValidator.validate :conditional_formatting_value_object_type, [:num, :percent, :max, :min, :formula, :percentile], v
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Requires that the value is valid conditional formatting operator.
|
|
196
|
+
# valid operators must be one of lessThan, lessThanOrEqual, equal,
|
|
197
|
+
# notEqual, greaterThanOrEqual, greaterThan, between, notBetween,
|
|
198
|
+
# containsText, notContains, beginsWith, endsWith
|
|
199
|
+
# @param [Any] v The value validated
|
|
200
|
+
def self.validate_conditional_formatting_operator(v)
|
|
201
|
+
RestrictionValidator.validate :conditional_formatting_type, [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween, :containsText, :notContains, :beginsWith, :endsWith], v
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Requires that the value is a gradient_type.
|
|
205
|
+
# valid types are :linear and :path
|
|
206
|
+
# @param [Any] v The value validated
|
|
207
|
+
def self.validate_gradient_type(v)
|
|
208
|
+
RestrictionValidator.validate :gradient_type, [:linear, :path], v
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Requires that the value is a valid scatterStyle
|
|
212
|
+
# must be one of :none | :line | :lineMarker | :marker | :smooth | :smoothMarker
|
|
213
|
+
# must be one of "none" | "line" | "lineMarker" | "marker" | "smooth" | "smoothMarker"
|
|
214
|
+
# @param [Symbol|String] v the value to validate
|
|
215
|
+
def self.validate_scatter_style(v)
|
|
216
|
+
Axlsx::RestrictionValidator.validate "ScatterChart.scatterStyle", [:none, :line, :lineMarker, :marker, :smooth, :smoothMarker], v.to_sym
|
|
217
|
+
end
|
|
218
|
+
# Requires that the value is a valid horizontal_alignment
|
|
219
|
+
# :general, :left, :center, :right, :fill, :justify, :centerContinuous, :distributed are allowed
|
|
220
|
+
# @param [Any] v The value validated
|
|
221
|
+
def self.validate_horizontal_alignment(v)
|
|
222
|
+
RestrictionValidator.validate :horizontal_alignment, [:general, :left, :center, :right, :fill, :justify, :centerContinuous, :distributed], v
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Requires that the value is a valid vertical_alignment
|
|
226
|
+
# :top, :center, :bottom, :justify, :distributed are allowed
|
|
227
|
+
# @param [Any] v The value validated
|
|
228
|
+
def self.validate_vertical_alignment(v)
|
|
229
|
+
RestrictionValidator.validate :vertical_alignment, [:top, :center, :bottom, :justify, :distributed], v
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# Requires that the value is a valid content_type
|
|
233
|
+
# TABLE_CT, WORKBOOK_CT, APP_CT, RELS_CT, STYLES_CT, XML_CT, WORKSHEET_CT, SHARED_STRINGS_CT, CORE_CT, CHART_CT, DRAWING_CT, COMMENT_CT are allowed
|
|
234
|
+
# @param [Any] v The value validated
|
|
235
|
+
def self.validate_content_type(v)
|
|
236
|
+
RestrictionValidator.validate :content_type, [TABLE_CT, WORKBOOK_CT, APP_CT, RELS_CT, STYLES_CT, XML_CT, WORKSHEET_CT, SHARED_STRINGS_CT, CORE_CT, CHART_CT, JPEG_CT, GIF_CT, PNG_CT, DRAWING_CT, COMMENT_CT, VML_DRAWING_CT, PIVOT_TABLE_CT, PIVOT_TABLE_CACHE_DEFINITION_CT], v
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Requires that the value is a valid relationship_type
|
|
240
|
+
# XML_NS_R, TABLE_R, WORKBOOK_R, WORKSHEET_R, APP_R, RELS_R, CORE_R, STYLES_R, CHART_R, DRAWING_R, IMAGE_R, HYPERLINK_R, SHARED_STRINGS_R are allowed
|
|
241
|
+
# @param [Any] v The value validated
|
|
242
|
+
def self.validate_relationship_type(v)
|
|
243
|
+
RestrictionValidator.validate :relationship_type, [XML_NS_R, TABLE_R, WORKBOOK_R, WORKSHEET_R, APP_R, RELS_R, CORE_R, STYLES_R, CHART_R, DRAWING_R, IMAGE_R, HYPERLINK_R, SHARED_STRINGS_R, COMMENT_R, VML_DRAWING_R, COMMENT_R_NULL, PIVOT_TABLE_R, PIVOT_TABLE_CACHE_DEFINITION_R], v
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Requires that the value is a valid table element type
|
|
247
|
+
# :wholeTable, :headerRow, :totalRow, :firstColumn, :lastColumn, :firstRowStripe, :secondRowStripe, :firstColumnStripe, :secondColumnStripe, :firstHeaderCell, :lastHeaderCell, :firstTotalCell, :lastTotalCell, :firstSubtotalColumn, :secondSubtotalColumn, :thirdSubtotalColumn, :firstSubtotalRow, :secondSubtotalRow, :thirdSubtotalRow, :blankRow, :firstColumnSubheading, :secondColumnSubheading, :thirdColumnSubheading, :firstRowSubheading, :secondRowSubheading, :thirdRowSubheading, :pageFieldLabels, :pageFieldValues are allowed
|
|
248
|
+
# @param [Any] v The value validated
|
|
249
|
+
def self.validate_table_element_type(v)
|
|
250
|
+
RestrictionValidator.validate :table_element_type, [:wholeTable, :headerRow, :totalRow, :firstColumn, :lastColumn, :firstRowStripe, :secondRowStripe, :firstColumnStripe, :secondColumnStripe, :firstHeaderCell, :lastHeaderCell, :firstTotalCell, :lastTotalCell, :firstSubtotalColumn, :secondSubtotalColumn, :thirdSubtotalColumn, :firstSubtotalRow, :secondSubtotalRow, :thirdSubtotalRow, :blankRow, :firstColumnSubheading, :secondColumnSubheading, :thirdColumnSubheading, :firstRowSubheading, :secondRowSubheading, :thirdRowSubheading, :pageFieldLabels, :pageFieldValues], v
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Requires that the value is a valid data_validation_error_style
|
|
254
|
+
# :information, :stop, :warning
|
|
255
|
+
# @param [Any] v The value validated
|
|
256
|
+
def self.validate_data_validation_error_style(v)
|
|
257
|
+
RestrictionValidator.validate :validate_data_validation_error_style, [:information, :stop, :warning], v
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
# Requires that the value is valid data validation operator.
|
|
261
|
+
# valid operators must be one of lessThan, lessThanOrEqual, equal,
|
|
262
|
+
# notEqual, greaterThanOrEqual, greaterThan, between, notBetween
|
|
263
|
+
# @param [Any] v The value validated
|
|
264
|
+
def self.validate_data_validation_operator(v)
|
|
265
|
+
RestrictionValidator.validate :data_validation_operator, [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween], v
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
# Requires that the value is valid data validation type.
|
|
269
|
+
# valid types must be one of custom, data, decimal, list, none, textLength, time, whole
|
|
270
|
+
# @param [Any] v The value validated
|
|
271
|
+
def self.validate_data_validation_type(v)
|
|
272
|
+
RestrictionValidator.validate :data_validation_type, [:custom, :data, :decimal, :list, :none, :textLength, :date, :time, :whole], v
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Requires that the value is a valid sheet view type.
|
|
276
|
+
# valid types must be one of normal, page_break_preview, page_layout
|
|
277
|
+
# @param [Any] v The value validated
|
|
278
|
+
def self.validate_sheet_view_type(v)
|
|
279
|
+
RestrictionValidator.validate :sheet_view_type, [:normal, :page_break_preview, :page_layout], v
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# Requires that the value is a valid active pane type.
|
|
283
|
+
# valid types must be one of bottom_left, bottom_right, top_left, top_right
|
|
284
|
+
# @param [Any] v The value validated
|
|
285
|
+
def self.validate_pane_type(v)
|
|
286
|
+
RestrictionValidator.validate :active_pane_type, [:bottom_left, :bottom_right, :top_left, :top_right], v
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# Requires that the value is a valid split state type.
|
|
290
|
+
# valid types must be one of frozen, frozen_split, split
|
|
291
|
+
# @param [Any] v The value validated
|
|
292
|
+
def self.validate_split_state_type(v)
|
|
293
|
+
RestrictionValidator.validate :split_state_type, [:frozen, :frozen_split, :split], v
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Requires that the value is a valid "display blanks as" type.
|
|
297
|
+
# valid types must be one of gap, span, zero
|
|
298
|
+
# @param [Any] v The value validated
|
|
299
|
+
def self.validate_display_blanks_as(v)
|
|
300
|
+
RestrictionValidator.validate :display_blanks_as, [:gap, :span, :zero], v
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# Requires that the value is one of :visible, :hidden, :very_hidden
|
|
304
|
+
def self.validate_view_visibility(v)
|
|
305
|
+
RestrictionValidator.validate :visibility, [:visible, :hidden, :very_hidden], v
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# Requires that the value is one of :default, :circle, :dash, :diamond, :dot, :picture, :plus, :square, :star, :triangle, :x
|
|
309
|
+
def self.validate_marker_symbol(v)
|
|
310
|
+
RestrictionValidator.validate :marker_symbol, [:default, :circle, :dash, :diamond, :dot, :picture, :plus, :square, :star, :triangle, :x], v
|
|
311
|
+
end
|
|
312
|
+
end
|