caxlsx 3.4.1 → 4.0.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/CHANGELOG.md +16 -1
- data/README.md +9 -11
- data/Rakefile +7 -5
- data/lib/axlsx/content_type/abstract_content_type.rb +9 -4
- data/lib/axlsx/content_type/content_type.rb +7 -5
- data/lib/axlsx/content_type/default.rb +4 -2
- data/lib/axlsx/content_type/override.rb +4 -2
- data/lib/axlsx/doc_props/app.rb +26 -24
- data/lib/axlsx/doc_props/core.rb +8 -6
- data/lib/axlsx/drawing/area_chart.rb +10 -8
- data/lib/axlsx/drawing/area_series.rb +12 -10
- data/lib/axlsx/drawing/ax_data_source.rb +2 -0
- data/lib/axlsx/drawing/axes.rb +6 -4
- data/lib/axlsx/drawing/axis.rb +21 -19
- data/lib/axlsx/drawing/bar_3D_chart.rb +14 -12
- data/lib/axlsx/drawing/bar_chart.rb +13 -11
- data/lib/axlsx/drawing/bar_series.rb +8 -6
- data/lib/axlsx/drawing/bubble_chart.rb +6 -4
- data/lib/axlsx/drawing/bubble_series.rb +8 -6
- data/lib/axlsx/drawing/cat_axis.rb +12 -10
- data/lib/axlsx/drawing/chart.rb +20 -18
- data/lib/axlsx/drawing/d_lbls.rb +7 -5
- data/lib/axlsx/drawing/drawing.rb +58 -56
- data/lib/axlsx/drawing/graphic_frame.rb +6 -4
- data/lib/axlsx/drawing/hyperlink.rb +10 -8
- data/lib/axlsx/drawing/line_3D_chart.rb +7 -5
- data/lib/axlsx/drawing/line_chart.rb +10 -8
- data/lib/axlsx/drawing/line_series.rb +12 -10
- data/lib/axlsx/drawing/marker.rb +9 -7
- data/lib/axlsx/drawing/num_data.rb +9 -7
- data/lib/axlsx/drawing/num_data_source.rb +9 -7
- data/lib/axlsx/drawing/num_val.rb +7 -5
- data/lib/axlsx/drawing/one_cell_anchor.rb +7 -5
- data/lib/axlsx/drawing/pic.rb +16 -14
- data/lib/axlsx/drawing/picture_locking.rb +3 -1
- data/lib/axlsx/drawing/pie_3D_chart.rb +5 -3
- data/lib/axlsx/drawing/pie_series.rb +8 -6
- data/lib/axlsx/drawing/scaling.rb +8 -6
- data/lib/axlsx/drawing/scatter_chart.rb +7 -5
- data/lib/axlsx/drawing/scatter_series.rb +14 -12
- data/lib/axlsx/drawing/ser_axis.rb +7 -5
- data/lib/axlsx/drawing/series.rb +6 -4
- data/lib/axlsx/drawing/series_title.rb +6 -4
- data/lib/axlsx/drawing/str_data.rb +7 -5
- data/lib/axlsx/drawing/str_val.rb +6 -4
- data/lib/axlsx/drawing/title.rb +13 -14
- data/lib/axlsx/drawing/two_cell_anchor.rb +4 -2
- data/lib/axlsx/drawing/val_axis.rb +4 -2
- data/lib/axlsx/drawing/view_3D.rb +9 -7
- data/lib/axlsx/drawing/vml_drawing.rb +18 -16
- data/lib/axlsx/drawing/vml_shape.rb +24 -22
- data/lib/axlsx/package.rb +69 -66
- data/lib/axlsx/rels/relationship.rb +10 -5
- data/lib/axlsx/rels/relationships.rb +5 -3
- data/lib/axlsx/stylesheet/border.rb +6 -4
- data/lib/axlsx/stylesheet/border_pr.rb +5 -3
- data/lib/axlsx/stylesheet/cell_alignment.rb +12 -10
- data/lib/axlsx/stylesheet/cell_protection.rb +5 -3
- data/lib/axlsx/stylesheet/cell_style.rb +10 -8
- data/lib/axlsx/stylesheet/color.rb +9 -7
- data/lib/axlsx/stylesheet/dxf.rb +5 -3
- data/lib/axlsx/stylesheet/fill.rb +3 -1
- data/lib/axlsx/stylesheet/font.rb +18 -16
- data/lib/axlsx/stylesheet/gradient_fill.rb +6 -4
- data/lib/axlsx/stylesheet/gradient_stop.rb +6 -4
- data/lib/axlsx/stylesheet/num_fmt.rb +8 -10
- data/lib/axlsx/stylesheet/pattern_fill.rb +5 -3
- data/lib/axlsx/stylesheet/styles.rb +69 -71
- data/lib/axlsx/stylesheet/table_style.rb +7 -5
- data/lib/axlsx/stylesheet/table_style_element.rb +6 -4
- data/lib/axlsx/stylesheet/table_styles.rb +6 -4
- data/lib/axlsx/stylesheet/xf.rb +18 -16
- data/lib/axlsx/util/accessors.rb +4 -2
- data/lib/axlsx/util/buffered_zip_output_stream.rb +60 -0
- data/lib/axlsx/util/constants.rb +117 -104
- data/lib/axlsx/util/mime_type_utils.rb +3 -5
- data/lib/axlsx/util/options_parser.rb +3 -1
- data/lib/axlsx/util/serialized_attributes.rb +42 -17
- data/lib/axlsx/util/simple_typed_list.rb +47 -47
- data/lib/axlsx/util/storage.rb +11 -10
- data/lib/axlsx/util/validators.rb +101 -41
- data/lib/axlsx/util/zip_command.rb +10 -10
- data/lib/axlsx/version.rb +3 -1
- data/lib/axlsx/workbook/defined_name.rb +6 -4
- data/lib/axlsx/workbook/defined_names.rb +3 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +8 -6
- data/lib/axlsx/workbook/workbook.rb +78 -76
- data/lib/axlsx/workbook/workbook_view.rb +3 -1
- data/lib/axlsx/workbook/workbook_views.rb +3 -1
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +65 -8
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +7 -3
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +11 -7
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +51 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +56 -0
- data/lib/axlsx/workbook/worksheet/border_creator.rb +5 -3
- data/lib/axlsx/workbook/worksheet/break.rb +3 -1
- data/lib/axlsx/workbook/worksheet/cell.rb +53 -54
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +31 -27
- data/lib/axlsx/workbook/worksheet/cfvo.rb +5 -3
- data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -1
- data/lib/axlsx/workbook/worksheet/col.rb +5 -3
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +5 -3
- data/lib/axlsx/workbook/worksheet/color_scale.rb +12 -10
- data/lib/axlsx/workbook/worksheet/cols.rb +3 -1
- data/lib/axlsx/workbook/worksheet/comment.rb +8 -6
- data/lib/axlsx/workbook/worksheet/comments.rb +6 -4
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +9 -4
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +18 -16
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +3 -1
- data/lib/axlsx/workbook/worksheet/data_bar.rb +14 -13
- data/lib/axlsx/workbook/worksheet/data_validation.rb +30 -28
- data/lib/axlsx/workbook/worksheet/data_validations.rb +3 -1
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +7 -5
- data/lib/axlsx/workbook/worksheet/dimension.rb +4 -2
- data/lib/axlsx/workbook/worksheet/header_footer.rb +4 -2
- data/lib/axlsx/workbook/worksheet/icon_set.rb +23 -6
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +5 -5
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/page_margins.rb +15 -10
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/page_setup.rb +11 -9
- data/lib/axlsx/workbook/worksheet/pane.rb +11 -9
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +20 -19
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -6
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +2 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +3 -1
- data/lib/axlsx/workbook/worksheet/protected_range.rb +3 -1
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -3
- data/lib/axlsx/workbook/worksheet/rich_text.rb +3 -1
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +16 -14
- data/lib/axlsx/workbook/worksheet/row.rb +6 -7
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +6 -4
- data/lib/axlsx/workbook/worksheet/selection.rb +9 -7
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +8 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +10 -8
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +15 -13
- data/lib/axlsx/workbook/worksheet/table.rb +9 -7
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +4 -2
- data/lib/axlsx/workbook/worksheet/tables.rb +3 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +38 -37
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +4 -2
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +8 -2
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +6 -4
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -2
- data/lib/axlsx.rb +56 -42
- data/lib/caxlsx.rb +3 -1
- metadata +49 -43
|
@@ -1,12 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# A SimpleTypedList is a type restrictive collection that allows some of the methods from Array and supports basic xml serialization.
|
|
3
5
|
# @private
|
|
4
|
-
class SimpleTypedList
|
|
6
|
+
class SimpleTypedList < Array
|
|
7
|
+
DESTRUCTIVE = [
|
|
8
|
+
'replace', 'insert', 'collect!', 'map!', 'pop', 'delete_if',
|
|
9
|
+
'reverse!', 'shift', 'shuffle!', 'slice!', 'sort!', 'uniq!',
|
|
10
|
+
'unshift', 'zip', 'flatten!', 'fill', 'drop', 'drop_while',
|
|
11
|
+
'clear'
|
|
12
|
+
].freeze
|
|
13
|
+
|
|
14
|
+
DESTRUCTIVE.each do |name|
|
|
15
|
+
undef_method name
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# We often call index(element) on instances of SimpleTypedList. Thus, we do not want to inherit Array
|
|
19
|
+
# implementation of == / eql? which walks the elements calling == / eql?. Instead we want the fast
|
|
20
|
+
# and original versions from BasicObject.
|
|
21
|
+
alias :== :equal?
|
|
22
|
+
alias :eql? :equal?
|
|
23
|
+
|
|
5
24
|
# Creats a new typed list
|
|
6
25
|
# @param [Array, Class] type An array of Class objects or a single Class object
|
|
7
26
|
# @param [String] serialize_as The tag name to use in serialization
|
|
8
27
|
# @raise [ArgumentError] if all members of type are not Class objects
|
|
9
|
-
def initialize
|
|
28
|
+
def initialize(type, serialize_as = nil, start_size = 0)
|
|
29
|
+
super(start_size)
|
|
30
|
+
|
|
10
31
|
if type.is_a? Array
|
|
11
32
|
type.each { |item| raise ArgumentError, "All members of type must be Class objects" unless item.is_a? Class }
|
|
12
33
|
@allowed_types = type
|
|
@@ -16,7 +37,6 @@ module Axlsx
|
|
|
16
37
|
@allowed_types = [type]
|
|
17
38
|
end
|
|
18
39
|
@serialize_as = serialize_as unless serialize_as.nil?
|
|
19
|
-
@list = Array.new(start_size)
|
|
20
40
|
end
|
|
21
41
|
|
|
22
42
|
# The class constants of allowed types
|
|
@@ -37,16 +57,16 @@ module Axlsx
|
|
|
37
57
|
# Transposes the list (without blowing up like ruby does)
|
|
38
58
|
# any non populated cell in the matrix will be a nil value
|
|
39
59
|
def transpose
|
|
40
|
-
return
|
|
60
|
+
return clone if size.zero?
|
|
41
61
|
|
|
42
|
-
row_count =
|
|
43
|
-
max_column_count =
|
|
62
|
+
row_count = size
|
|
63
|
+
max_column_count = map { |row| row.cells.size }.max
|
|
44
64
|
result = Array.new(max_column_count) { Array.new(row_count) }
|
|
45
65
|
# yes, I know it is silly, but that warning is really annoying
|
|
46
66
|
row_count.times do |row_index|
|
|
47
67
|
max_column_count.times do |column_index|
|
|
48
|
-
datum = if
|
|
49
|
-
|
|
68
|
+
datum = if self[row_index].cells.size >= max_column_count
|
|
69
|
+
self[row_index].cells[column_index]
|
|
50
70
|
elsif block_given?
|
|
51
71
|
yield(column_index, row_index)
|
|
52
72
|
end
|
|
@@ -59,7 +79,7 @@ module Axlsx
|
|
|
59
79
|
# Lock this list at the current size
|
|
60
80
|
# @return [self]
|
|
61
81
|
def lock
|
|
62
|
-
@locked_at =
|
|
82
|
+
@locked_at = size
|
|
63
83
|
self
|
|
64
84
|
end
|
|
65
85
|
|
|
@@ -70,22 +90,16 @@ module Axlsx
|
|
|
70
90
|
self
|
|
71
91
|
end
|
|
72
92
|
|
|
73
|
-
def to_ary
|
|
74
|
-
@list
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
alias :to_a :to_ary
|
|
78
|
-
|
|
79
93
|
# join operator
|
|
80
|
-
# @param [Array]
|
|
94
|
+
# @param [Array] other the array to join
|
|
81
95
|
# @raise [ArgumentError] if any of the values being joined are not
|
|
82
96
|
# one of the allowed types
|
|
83
97
|
# @return [SimpleTypedList]
|
|
84
|
-
def +(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
@list << item
|
|
98
|
+
def +(other)
|
|
99
|
+
other.each do |item|
|
|
100
|
+
self << item
|
|
88
101
|
end
|
|
102
|
+
super
|
|
89
103
|
end
|
|
90
104
|
|
|
91
105
|
# Concat operator
|
|
@@ -94,8 +108,8 @@ module Axlsx
|
|
|
94
108
|
# @return [Integer] returns the index of the item added.
|
|
95
109
|
def <<(v)
|
|
96
110
|
DataTypeValidator.validate :SimpleTypedList_push, @allowed_types, v
|
|
97
|
-
|
|
98
|
-
|
|
111
|
+
super
|
|
112
|
+
size - 1
|
|
99
113
|
end
|
|
100
114
|
|
|
101
115
|
alias :push :<<
|
|
@@ -108,17 +122,16 @@ module Axlsx
|
|
|
108
122
|
return unless include? v
|
|
109
123
|
raise ArgumentError, "Item is protected and cannot be deleted" if protected? index(v)
|
|
110
124
|
|
|
111
|
-
|
|
125
|
+
super
|
|
112
126
|
end
|
|
113
127
|
|
|
114
128
|
# delete the item from the list at the index position provided
|
|
115
129
|
# @raise [ArgumentError] if the index is protected by locking
|
|
116
130
|
# @return [Any] The item deleted
|
|
117
131
|
def delete_at(index)
|
|
118
|
-
@list[index]
|
|
119
132
|
raise ArgumentError, "Item is protected and cannot be deleted" if protected? index
|
|
120
133
|
|
|
121
|
-
|
|
134
|
+
super
|
|
122
135
|
end
|
|
123
136
|
|
|
124
137
|
# positional assignment. Adds the item at the index specified
|
|
@@ -126,12 +139,12 @@ module Axlsx
|
|
|
126
139
|
# @param [Any] v
|
|
127
140
|
# @raise [ArgumentError] if the index is protected by locking
|
|
128
141
|
# @raise [ArgumentError] if the item is not one of the allowed types
|
|
142
|
+
# @return [Any] The item added
|
|
129
143
|
def []=(index, v)
|
|
130
144
|
DataTypeValidator.validate :SimpleTypedList_insert, @allowed_types, v
|
|
131
145
|
raise ArgumentError, "Item is protected and cannot be changed" if protected? index
|
|
132
146
|
|
|
133
|
-
|
|
134
|
-
v
|
|
147
|
+
super
|
|
135
148
|
end
|
|
136
149
|
|
|
137
150
|
# inserts an item at the index specfied
|
|
@@ -139,42 +152,29 @@ module Axlsx
|
|
|
139
152
|
# @param [Any] v
|
|
140
153
|
# @raise [ArgumentError] if the index is protected by locking
|
|
141
154
|
# @raise [ArgumentError] if the index is not one of the allowed types
|
|
155
|
+
# @return [Any] The item inserted
|
|
142
156
|
def insert(index, v)
|
|
143
157
|
DataTypeValidator.validate :SimpleTypedList_insert, @allowed_types, v
|
|
144
158
|
raise ArgumentError, "Item is protected and cannot be changed" if protected? index
|
|
145
159
|
|
|
146
|
-
|
|
160
|
+
super
|
|
147
161
|
v
|
|
148
162
|
end
|
|
149
163
|
|
|
150
164
|
# determines if the index is protected
|
|
151
165
|
# @param [Integer] index
|
|
152
|
-
def protected?
|
|
166
|
+
def protected?(index)
|
|
153
167
|
return false unless locked_at.is_a? Integer
|
|
154
168
|
|
|
155
169
|
index < locked_at
|
|
156
170
|
end
|
|
157
171
|
|
|
158
|
-
|
|
159
|
-
'reverse!', 'shift', 'shuffle!', 'slice!', 'sort!', 'uniq!',
|
|
160
|
-
'unshift', 'zip', 'flatten!', 'fill', 'drop', 'drop_while',
|
|
161
|
-
'delete_if', 'clear']
|
|
162
|
-
DELEGATES = Array.instance_methods - self.instance_methods - DESTRUCTIVE
|
|
163
|
-
|
|
164
|
-
DELEGATES.each do |method|
|
|
165
|
-
class_eval %{
|
|
166
|
-
def #{method}(*args, &block)
|
|
167
|
-
@list.send(:#{method}, *args, &block)
|
|
168
|
-
end
|
|
169
|
-
}
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def to_xml_string(str = '')
|
|
172
|
+
def to_xml_string(str = +'')
|
|
173
173
|
classname = @allowed_types[0].name.split('::').last
|
|
174
|
-
el_name = serialize_as.to_s || (classname[0, 1].downcase + classname[1
|
|
175
|
-
str <<
|
|
174
|
+
el_name = serialize_as.to_s || (classname[0, 1].downcase + classname[1..])
|
|
175
|
+
str << '<' << el_name << ' count="' << size.to_s << '">'
|
|
176
176
|
each { |item| item.to_xml_string(str) }
|
|
177
|
-
str <<
|
|
177
|
+
str << '</' << el_name << '>'
|
|
178
178
|
end
|
|
179
179
|
end
|
|
180
180
|
end
|
data/lib/axlsx/util/storage.rb
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# The Storage class represents a storage object or stream in a compound file.
|
|
3
5
|
class Storage
|
|
4
6
|
# Packing for the Storage when pushing an array of items into a byte stream
|
|
5
7
|
# Name, name length, type, color, left sibling, right sibling, child, classid, state, created, modified, sector, size
|
|
6
|
-
PACKING = "s32 s1 c2 l3 x16 x4 q2 l q"
|
|
8
|
+
PACKING = "s32 s1 c2 l3 x16 x4 q2 l q"
|
|
7
9
|
|
|
8
10
|
# storage types
|
|
9
11
|
TYPES = {
|
|
10
|
-
:
|
|
11
|
-
:
|
|
12
|
-
:
|
|
12
|
+
root: 5,
|
|
13
|
+
stream: 2,
|
|
14
|
+
storage: 1
|
|
13
15
|
}.freeze
|
|
14
16
|
|
|
15
17
|
# Creates a byte string for this storage
|
|
@@ -31,9 +33,9 @@ module Axlsx
|
|
|
31
33
|
|
|
32
34
|
# storage colors
|
|
33
35
|
COLORS = {
|
|
34
|
-
:
|
|
35
|
-
:
|
|
36
|
-
}
|
|
36
|
+
red: 0,
|
|
37
|
+
black: 1
|
|
38
|
+
}.freeze
|
|
37
39
|
|
|
38
40
|
# The color of this node in the directory tree. Defaults to black if not specified
|
|
39
41
|
# @return [Integer] color
|
|
@@ -61,7 +63,6 @@ module Axlsx
|
|
|
61
63
|
def name=(v)
|
|
62
64
|
@name = v.bytes.to_a << 0
|
|
63
65
|
@name_size = @name.size * 2
|
|
64
|
-
@name
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
# The size of the stream
|
|
@@ -74,7 +75,7 @@ module Axlsx
|
|
|
74
75
|
# @param [String] v The data for this storages stream
|
|
75
76
|
# @return [Array]
|
|
76
77
|
def data=(v)
|
|
77
|
-
Axlsx
|
|
78
|
+
Axlsx.validate_string(v)
|
|
78
79
|
self.type = TYPES[:stream] unless @type
|
|
79
80
|
@size = v.size
|
|
80
81
|
@data = v.bytes.to_a
|
|
@@ -132,7 +133,7 @@ module Axlsx
|
|
|
132
133
|
@left = @right = @child = -1
|
|
133
134
|
@sector = @size = @created = @modified = 0
|
|
134
135
|
options.each do |o|
|
|
135
|
-
|
|
136
|
+
send("#{o[0]}=", o[1]) if respond_to? "#{o[0]}="
|
|
136
137
|
end
|
|
137
138
|
@color ||= COLORS[:black]
|
|
138
139
|
@type ||= (data.nil? ? TYPES[:storage] : TYPES[:stream])
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Validate a value against a specific list of allowed values.
|
|
3
5
|
class RestrictionValidator
|
|
@@ -8,7 +10,7 @@ module Axlsx
|
|
|
8
10
|
# @raise [ArgumentError] Raised if the value provided is not in the list of choices.
|
|
9
11
|
# @return [Boolean] true if validation succeeds.
|
|
10
12
|
def self.validate(name, choices, v)
|
|
11
|
-
raise ArgumentError, (ERR_RESTRICTION
|
|
13
|
+
raise ArgumentError, format(ERR_RESTRICTION, v.to_s, name, choices.inspect) unless choices.include?(v)
|
|
12
14
|
|
|
13
15
|
true
|
|
14
16
|
end
|
|
@@ -29,7 +31,7 @@ module Axlsx
|
|
|
29
31
|
else
|
|
30
32
|
min < value && value < max
|
|
31
33
|
end
|
|
32
|
-
raise ArgumentError, (ERR_RANGE
|
|
34
|
+
raise ArgumentError, format(ERR_RANGE, value.inspect, min.to_s, max.to_s, inclusive) unless passes
|
|
33
35
|
end
|
|
34
36
|
end
|
|
35
37
|
|
|
@@ -39,7 +41,7 @@ module Axlsx
|
|
|
39
41
|
# @param [Regexp] regex The regular expression to evaluate
|
|
40
42
|
# @param [Any] v The value to validate.
|
|
41
43
|
def self.validate(name, regex, v)
|
|
42
|
-
raise ArgumentError, (ERR_REGEX
|
|
44
|
+
raise ArgumentError, format(ERR_REGEX, v.inspect, regex.to_s) unless v.respond_to?(:to_s) && regex.match?(v.to_s)
|
|
43
45
|
end
|
|
44
46
|
end
|
|
45
47
|
|
|
@@ -53,14 +55,14 @@ module Axlsx
|
|
|
53
55
|
# @return [Boolean] true if validation succeeds.
|
|
54
56
|
# @see validate_boolean
|
|
55
57
|
def self.validate(name, types, v, other = false)
|
|
56
|
-
if other.is_a?(Proc)
|
|
57
|
-
raise ArgumentError, (ERR_TYPE
|
|
58
|
+
if other.is_a?(Proc) && !other.call(v)
|
|
59
|
+
raise ArgumentError, format(ERR_TYPE, v.inspect, name, types.inspect)
|
|
58
60
|
end
|
|
61
|
+
|
|
59
62
|
v_class = v.is_a?(Class) ? v : v.class
|
|
60
|
-
Array(types).
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
raise ArgumentError, (ERR_TYPE % [v.inspect, name, types.inspect])
|
|
63
|
+
return if Array(types).any? { |t| v_class <= t }
|
|
64
|
+
|
|
65
|
+
raise ArgumentError, format(ERR_TYPE, v.inspect, name, types.inspect)
|
|
64
66
|
end
|
|
65
67
|
end
|
|
66
68
|
|
|
@@ -68,7 +70,7 @@ module Axlsx
|
|
|
68
70
|
# @para, [Any] v the value to validate
|
|
69
71
|
# @raise [ArgumentError] raised if the value cannot be converted to an integer
|
|
70
72
|
def self.validate_integerish(v)
|
|
71
|
-
raise ArgumentError, (ERR_INTEGERISH
|
|
73
|
+
raise ArgumentError, format(ERR_INTEGERISH, v.inspect) unless v.respond_to?(:to_i) && v.to_i.is_a?(Integer)
|
|
72
74
|
end
|
|
73
75
|
|
|
74
76
|
# Requires that the value is between -54000000 and 54000000
|
|
@@ -76,11 +78,11 @@ module Axlsx
|
|
|
76
78
|
# @raise [ArgumentError] raised if the value cannot be converted to an integer between the allowed angle values for chart label rotation.
|
|
77
79
|
# @return [Boolean] true if the data is valid
|
|
78
80
|
def self.validate_angle(v)
|
|
79
|
-
raise ArgumentError, (ERR_ANGLE
|
|
81
|
+
raise ArgumentError, format(ERR_ANGLE, v.inspect) unless v.to_i >= -5400000 && v.to_i <= 5400000
|
|
80
82
|
end
|
|
81
83
|
|
|
82
84
|
# Validates an unsigned intger
|
|
83
|
-
UINT_VALIDATOR =
|
|
85
|
+
UINT_VALIDATOR = ->(arg) { arg.respond_to?(:>=) && arg >= 0 }
|
|
84
86
|
|
|
85
87
|
# Requires that the value is a Integer and is greater or equal to 0
|
|
86
88
|
# @param [Any] v The value validated
|
|
@@ -104,12 +106,16 @@ module Axlsx
|
|
|
104
106
|
DataTypeValidator.validate :signed_int, Integer, v
|
|
105
107
|
end
|
|
106
108
|
|
|
109
|
+
VALID_BOOLEAN_CLASSES = [TrueClass, FalseClass, Integer, String, Symbol].freeze
|
|
110
|
+
VALID_BOOLEAN_VALUES = [true, false, 1, 0, '1', '0', 'true', 'false', :true, :false].freeze
|
|
111
|
+
BOOLEAN_VALIDATOR = ->(arg) { VALID_BOOLEAN_VALUES.include?(arg) }
|
|
112
|
+
|
|
107
113
|
# Requires that the value is a form that can be evaluated as a boolean in an xml document.
|
|
108
114
|
# The value must be an instance of String, Integer, Symbol, TrueClass or FalseClass and
|
|
109
115
|
# it must be one of 0, 1, "true", "false", :true, :false, true, false, "0", or "1"
|
|
110
116
|
# @param [Any] v The value validated
|
|
111
117
|
def self.validate_boolean(v)
|
|
112
|
-
DataTypeValidator.validate(:boolean,
|
|
118
|
+
DataTypeValidator.validate(:boolean, VALID_BOOLEAN_CLASSES, v, BOOLEAN_VALIDATOR)
|
|
113
119
|
end
|
|
114
120
|
|
|
115
121
|
# Requires that the value is a String
|
|
@@ -130,53 +136,71 @@ module Axlsx
|
|
|
130
136
|
RegexValidator.validate "number_with_unit", /\A[0-9]+(\.[0-9]+)?(mm|cm|in|pt|pc|pi)\Z/, v
|
|
131
137
|
end
|
|
132
138
|
|
|
139
|
+
SCALE_10_400_VALIDATOR = ->(arg) { arg >= 10 && arg <= 400 }
|
|
140
|
+
|
|
133
141
|
# Requires that the value is an integer ranging from 10 to 400.
|
|
134
142
|
def self.validate_scale_10_400(v)
|
|
135
|
-
DataTypeValidator.validate "page_scale", Integer, v,
|
|
143
|
+
DataTypeValidator.validate "page_scale", Integer, v, SCALE_10_400_VALIDATOR
|
|
136
144
|
end
|
|
137
145
|
|
|
146
|
+
SCALE_0_10_400_VALIDATOR = ->(arg) { arg == 0 || (arg >= 10 && arg <= 400) }
|
|
147
|
+
|
|
138
148
|
# Requires that the value is an integer ranging from 10 to 400 or 0.
|
|
139
149
|
def self.validate_scale_0_10_400(v)
|
|
140
|
-
DataTypeValidator.validate "page_scale", Integer, v,
|
|
150
|
+
DataTypeValidator.validate "page_scale", Integer, v, SCALE_0_10_400_VALIDATOR
|
|
141
151
|
end
|
|
142
152
|
|
|
153
|
+
VALID_PAGE_ORIENTATION_VALUES = [:default, :landscape, :portrait].freeze
|
|
154
|
+
|
|
143
155
|
# Requires that the value is one of :default, :landscape, or :portrait.
|
|
144
156
|
def self.validate_page_orientation(v)
|
|
145
|
-
RestrictionValidator.validate "page_orientation",
|
|
157
|
+
RestrictionValidator.validate "page_orientation", VALID_PAGE_ORIENTATION_VALUES, v
|
|
146
158
|
end
|
|
147
159
|
|
|
160
|
+
VALID_CELL_U_VALUES = [:none, :single, :double, :singleAccounting, :doubleAccounting].freeze
|
|
161
|
+
|
|
148
162
|
# Requires that the value is one of :none, :single, :double, :singleAccounting, :doubleAccounting
|
|
149
163
|
def self.validate_cell_u(v)
|
|
150
|
-
RestrictionValidator.validate "cell run style u",
|
|
164
|
+
RestrictionValidator.validate "cell run style u", VALID_CELL_U_VALUES, v
|
|
151
165
|
end
|
|
152
166
|
|
|
167
|
+
VALID_FAMILY_VALUES = (1..5).freeze
|
|
168
|
+
|
|
153
169
|
# validates cell style family which must be between 1 and 5
|
|
154
170
|
def self.validate_family(v)
|
|
155
|
-
RestrictionValidator.validate "cell run style family",
|
|
171
|
+
RestrictionValidator.validate "cell run style family", VALID_FAMILY_VALUES, v
|
|
156
172
|
end
|
|
157
173
|
|
|
174
|
+
VALID_PATTERN_TYPE_VALUES = [:none, :solid, :mediumGray, :darkGray, :lightGray, :darkHorizontal, :darkVertical, :darkDown, :darkUp, :darkGrid,
|
|
175
|
+
:darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, :gray0625].freeze
|
|
176
|
+
|
|
158
177
|
# Requires that the value is valid pattern type.
|
|
159
178
|
# valid pattern types must be one of :none, :solid, :mediumGray, :darkGray, :lightGray, :darkHorizontal, :darkVertical, :darkDown,
|
|
160
179
|
# :darkUp, :darkGrid, :darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, or :gray0625.
|
|
161
180
|
# @param [Any] v The value validated
|
|
162
181
|
def self.validate_pattern_type(v)
|
|
163
|
-
RestrictionValidator.validate :pattern_type,
|
|
164
|
-
:darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, :gray0625], v
|
|
182
|
+
RestrictionValidator.validate :pattern_type, VALID_PATTERN_TYPE_VALUES, v
|
|
165
183
|
end
|
|
166
184
|
|
|
185
|
+
VALID_TIME_PERIOD_TYPE_VALUES = [:today, :yesterday, :tomorrow, :last7Days, :thisMonth, :lastMonth, :nextMonth, :thisWeek, :lastWeek, :nextWeek].freeze
|
|
186
|
+
|
|
167
187
|
# Requires that the value is one of the ST_TimePeriod types
|
|
168
188
|
# valid time period types are today, yesterday, tomorrow, last7Days,
|
|
169
189
|
# thisMonth, lastMonth, nextMonth, thisWeek, lastWeek, nextWeek
|
|
170
190
|
def self.validate_time_period_type(v)
|
|
171
|
-
RestrictionValidator.validate :time_period_type,
|
|
191
|
+
RestrictionValidator.validate :time_period_type, VALID_TIME_PERIOD_TYPE_VALUES, v
|
|
172
192
|
end
|
|
173
193
|
|
|
194
|
+
VALID_ICON_SET_VALUES = ["3Arrows", "3ArrowsGray", "3Flags", "3TrafficLights1", "3TrafficLights2", "3Signs", "3Symbols", "3Symbols2", "4Arrows", "4ArrowsGray", "4RedToBlack", "4Rating", "4TrafficLights", "5Arrows", "5ArrowsGray", "5Rating", "5Quarters"].freeze
|
|
195
|
+
|
|
174
196
|
# Requires that the value is one of the valid ST_IconSet types
|
|
175
197
|
# Allowed values are: 3Arrows, 3ArrowsGray, 3Flags, 3TrafficLights1, 3TrafficLights2, 3Signs, 3Symbols, 3Symbols2, 4Arrows, 4ArrowsGray, 4RedToBlack, 4Rating, 4TrafficLights, 5Arrows, 5ArrowsGray, 5Rating, 5Quarters
|
|
176
198
|
def self.validate_icon_set(v)
|
|
177
|
-
RestrictionValidator.validate :iconSet,
|
|
199
|
+
RestrictionValidator.validate :iconSet, VALID_ICON_SET_VALUES, v
|
|
178
200
|
end
|
|
179
201
|
|
|
202
|
+
VALID_CONDITIONAL_FORMATTING_TYPE_VALUES = [:expression, :cellIs, :colorScale, :dataBar, :iconSet, :top10, :uniqueValues, :duplicateValues, :containsText, :notContainsText, :beginsWith, :endsWith, :containsBlanks, :notContainsBlanks, :containsErrors, :notContainsErrors, :timePeriod, :aboveAverage].freeze
|
|
203
|
+
|
|
180
204
|
# Requires that the value is valid conditional formatting type.
|
|
181
205
|
# valid types must be one of expression, cellIs, colorScale,
|
|
182
206
|
# dataBar, iconSet, top10, uniqueValues, duplicateValues,
|
|
@@ -185,131 +209,167 @@ module Axlsx
|
|
|
185
209
|
# notContainsErrors, timePeriod, aboveAverage
|
|
186
210
|
# @param [Any] v The value validated
|
|
187
211
|
def self.validate_conditional_formatting_type(v)
|
|
188
|
-
RestrictionValidator.validate :conditional_formatting_type,
|
|
212
|
+
RestrictionValidator.validate :conditional_formatting_type, VALID_CONDITIONAL_FORMATTING_TYPE_VALUES, v
|
|
189
213
|
end
|
|
190
214
|
|
|
215
|
+
VALID_CONDITION_FORMATTING_VALUE_OBJECT_TYPE_VALUES = [:num, :percent, :max, :min, :formula, :percentile].freeze
|
|
216
|
+
|
|
191
217
|
# Requires thatt he value is a valid conditional formatting value object type.
|
|
192
218
|
# valid types must be one of num, percent, max, min, formula and percentile
|
|
193
219
|
def self.validate_conditional_formatting_value_object_type(v)
|
|
194
|
-
RestrictionValidator.validate :conditional_formatting_value_object_type,
|
|
220
|
+
RestrictionValidator.validate :conditional_formatting_value_object_type, VALID_CONDITION_FORMATTING_VALUE_OBJECT_TYPE_VALUES, v
|
|
195
221
|
end
|
|
196
222
|
|
|
223
|
+
VALID_CONDITIONAL_FORMATTING_OPERATOR_VALUES = [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween, :containsText, :notContains, :beginsWith, :endsWith].freeze
|
|
224
|
+
|
|
197
225
|
# Requires that the value is valid conditional formatting operator.
|
|
198
226
|
# valid operators must be one of lessThan, lessThanOrEqual, equal,
|
|
199
227
|
# notEqual, greaterThanOrEqual, greaterThan, between, notBetween,
|
|
200
228
|
# containsText, notContains, beginsWith, endsWith
|
|
201
229
|
# @param [Any] v The value validated
|
|
202
230
|
def self.validate_conditional_formatting_operator(v)
|
|
203
|
-
RestrictionValidator.validate :conditional_formatting_type,
|
|
231
|
+
RestrictionValidator.validate :conditional_formatting_type, VALID_CONDITIONAL_FORMATTING_OPERATOR_VALUES, v
|
|
204
232
|
end
|
|
205
233
|
|
|
234
|
+
VALID_GRADIENT_TYPE_VALUES = [:linear, :path].freeze
|
|
235
|
+
|
|
206
236
|
# Requires that the value is a gradient_type.
|
|
207
237
|
# valid types are :linear and :path
|
|
208
238
|
# @param [Any] v The value validated
|
|
209
239
|
def self.validate_gradient_type(v)
|
|
210
|
-
RestrictionValidator.validate :gradient_type,
|
|
240
|
+
RestrictionValidator.validate :gradient_type, VALID_GRADIENT_TYPE_VALUES, v
|
|
211
241
|
end
|
|
212
242
|
|
|
243
|
+
VALID_SCATTER_STYLE_VALUES = [:none, :line, :lineMarker, :marker, :smooth, :smoothMarker].freeze
|
|
244
|
+
|
|
213
245
|
# Requires that the value is a valid scatterStyle
|
|
214
246
|
# must be one of :none | :line | :lineMarker | :marker | :smooth | :smoothMarker
|
|
215
247
|
# must be one of "none" | "line" | "lineMarker" | "marker" | "smooth" | "smoothMarker"
|
|
216
248
|
# @param [Symbol|String] v the value to validate
|
|
217
249
|
def self.validate_scatter_style(v)
|
|
218
|
-
Axlsx::RestrictionValidator.validate "ScatterChart.scatterStyle",
|
|
250
|
+
Axlsx::RestrictionValidator.validate "ScatterChart.scatterStyle", VALID_SCATTER_STYLE_VALUES, v.to_sym
|
|
219
251
|
end
|
|
220
252
|
|
|
253
|
+
VALID_HORIZONTAL_ALIGNMENT_VALUES = [:general, :left, :center, :right, :fill, :justify, :centerContinuous, :distributed].freeze
|
|
254
|
+
|
|
221
255
|
# Requires that the value is a valid horizontal_alignment
|
|
222
256
|
# :general, :left, :center, :right, :fill, :justify, :centerContinuous, :distributed are allowed
|
|
223
257
|
# @param [Any] v The value validated
|
|
224
258
|
def self.validate_horizontal_alignment(v)
|
|
225
|
-
RestrictionValidator.validate :horizontal_alignment,
|
|
259
|
+
RestrictionValidator.validate :horizontal_alignment, VALID_HORIZONTAL_ALIGNMENT_VALUES, v
|
|
226
260
|
end
|
|
227
261
|
|
|
262
|
+
VALID_VERTICAL_ALIGNMENT_VALUES = [:top, :center, :bottom, :justify, :distributed].freeze
|
|
263
|
+
|
|
228
264
|
# Requires that the value is a valid vertical_alignment
|
|
229
265
|
# :top, :center, :bottom, :justify, :distributed are allowed
|
|
230
266
|
# @param [Any] v The value validated
|
|
231
267
|
def self.validate_vertical_alignment(v)
|
|
232
|
-
RestrictionValidator.validate :vertical_alignment,
|
|
268
|
+
RestrictionValidator.validate :vertical_alignment, VALID_VERTICAL_ALIGNMENT_VALUES, v
|
|
233
269
|
end
|
|
234
270
|
|
|
271
|
+
VALID_CONTENT_TYPE_VALUES = [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].freeze
|
|
272
|
+
|
|
235
273
|
# Requires that the value is a valid content_type
|
|
236
274
|
# 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
|
|
237
275
|
# @param [Any] v The value validated
|
|
238
276
|
def self.validate_content_type(v)
|
|
239
|
-
RestrictionValidator.validate :content_type,
|
|
277
|
+
RestrictionValidator.validate :content_type, VALID_CONTENT_TYPE_VALUES, v
|
|
240
278
|
end
|
|
241
279
|
|
|
280
|
+
VALID_RELATIONSHIP_TYPE_VALUES = [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].freeze
|
|
281
|
+
|
|
242
282
|
# Requires that the value is a valid relationship_type
|
|
243
283
|
# 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
|
|
244
284
|
# @param [Any] v The value validated
|
|
245
285
|
def self.validate_relationship_type(v)
|
|
246
|
-
RestrictionValidator.validate :relationship_type,
|
|
286
|
+
RestrictionValidator.validate :relationship_type, VALID_RELATIONSHIP_TYPE_VALUES, v
|
|
247
287
|
end
|
|
248
288
|
|
|
289
|
+
VALID_TABLE_ELEMENT_TYPE_VALUES = [: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].freeze
|
|
290
|
+
|
|
249
291
|
# Requires that the value is a valid table element type
|
|
250
292
|
# :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
|
|
251
293
|
# @param [Any] v The value validated
|
|
252
294
|
def self.validate_table_element_type(v)
|
|
253
|
-
RestrictionValidator.validate :table_element_type,
|
|
295
|
+
RestrictionValidator.validate :table_element_type, VALID_TABLE_ELEMENT_TYPE_VALUES, v
|
|
254
296
|
end
|
|
255
297
|
|
|
298
|
+
VALID_DATA_VALIDATION_ERROR_STYLE_VALUES = [:information, :stop, :warning].freeze
|
|
299
|
+
|
|
256
300
|
# Requires that the value is a valid data_validation_error_style
|
|
257
301
|
# :information, :stop, :warning
|
|
258
302
|
# @param [Any] v The value validated
|
|
259
303
|
def self.validate_data_validation_error_style(v)
|
|
260
|
-
RestrictionValidator.validate :validate_data_validation_error_style,
|
|
304
|
+
RestrictionValidator.validate :validate_data_validation_error_style, VALID_DATA_VALIDATION_ERROR_STYLE_VALUES, v
|
|
261
305
|
end
|
|
262
306
|
|
|
307
|
+
VALID_DATA_VALIDATION_OPERATOR_VALUES = [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween].freeze
|
|
308
|
+
|
|
263
309
|
# Requires that the value is valid data validation operator.
|
|
264
310
|
# valid operators must be one of lessThan, lessThanOrEqual, equal,
|
|
265
311
|
# notEqual, greaterThanOrEqual, greaterThan, between, notBetween
|
|
266
312
|
# @param [Any] v The value validated
|
|
267
313
|
def self.validate_data_validation_operator(v)
|
|
268
|
-
RestrictionValidator.validate :data_validation_operator,
|
|
314
|
+
RestrictionValidator.validate :data_validation_operator, VALID_DATA_VALIDATION_OPERATOR_VALUES, v
|
|
269
315
|
end
|
|
270
316
|
|
|
317
|
+
VALID_DATA_VALIDATION_TYPE_VALUES = [:custom, :data, :decimal, :list, :none, :textLength, :date, :time, :whole].freeze
|
|
318
|
+
|
|
271
319
|
# Requires that the value is valid data validation type.
|
|
272
320
|
# valid types must be one of custom, data, decimal, list, none, textLength, time, whole
|
|
273
321
|
# @param [Any] v The value validated
|
|
274
322
|
def self.validate_data_validation_type(v)
|
|
275
|
-
RestrictionValidator.validate :data_validation_type,
|
|
323
|
+
RestrictionValidator.validate :data_validation_type, VALID_DATA_VALIDATION_TYPE_VALUES, v
|
|
276
324
|
end
|
|
277
325
|
|
|
326
|
+
VALID_SHEET_VIEW_TYPE_VALUES = [:normal, :page_break_preview, :page_layout].freeze
|
|
327
|
+
|
|
278
328
|
# Requires that the value is a valid sheet view type.
|
|
279
329
|
# valid types must be one of normal, page_break_preview, page_layout
|
|
280
330
|
# @param [Any] v The value validated
|
|
281
331
|
def self.validate_sheet_view_type(v)
|
|
282
|
-
RestrictionValidator.validate :sheet_view_type,
|
|
332
|
+
RestrictionValidator.validate :sheet_view_type, VALID_SHEET_VIEW_TYPE_VALUES, v
|
|
283
333
|
end
|
|
284
334
|
|
|
335
|
+
VALID_PANE_TYPE_VALUES = [:bottom_left, :bottom_right, :top_left, :top_right].freeze
|
|
336
|
+
|
|
285
337
|
# Requires that the value is a valid active pane type.
|
|
286
338
|
# valid types must be one of bottom_left, bottom_right, top_left, top_right
|
|
287
339
|
# @param [Any] v The value validated
|
|
288
340
|
def self.validate_pane_type(v)
|
|
289
|
-
RestrictionValidator.validate :active_pane_type,
|
|
341
|
+
RestrictionValidator.validate :active_pane_type, VALID_PANE_TYPE_VALUES, v
|
|
290
342
|
end
|
|
291
343
|
|
|
344
|
+
VALID_SPLIT_STATE_TYPE_VALUES = [:frozen, :frozen_split, :split].freeze
|
|
345
|
+
|
|
292
346
|
# Requires that the value is a valid split state type.
|
|
293
347
|
# valid types must be one of frozen, frozen_split, split
|
|
294
348
|
# @param [Any] v The value validated
|
|
295
349
|
def self.validate_split_state_type(v)
|
|
296
|
-
RestrictionValidator.validate :split_state_type,
|
|
350
|
+
RestrictionValidator.validate :split_state_type, VALID_SPLIT_STATE_TYPE_VALUES, v
|
|
297
351
|
end
|
|
298
352
|
|
|
353
|
+
VALID_DISPLAY_BLANK_AS_VALUES = [:gap, :span, :zero].freeze
|
|
354
|
+
|
|
299
355
|
# Requires that the value is a valid "display blanks as" type.
|
|
300
356
|
# valid types must be one of gap, span, zero
|
|
301
357
|
# @param [Any] v The value validated
|
|
302
358
|
def self.validate_display_blanks_as(v)
|
|
303
|
-
RestrictionValidator.validate :display_blanks_as,
|
|
359
|
+
RestrictionValidator.validate :display_blanks_as, VALID_DISPLAY_BLANK_AS_VALUES, v
|
|
304
360
|
end
|
|
305
361
|
|
|
362
|
+
VALID_VIEW_VISIBILITY_VALUES = [:visible, :hidden, :very_hidden].freeze
|
|
363
|
+
|
|
306
364
|
# Requires that the value is one of :visible, :hidden, :very_hidden
|
|
307
365
|
def self.validate_view_visibility(v)
|
|
308
|
-
RestrictionValidator.validate :visibility,
|
|
366
|
+
RestrictionValidator.validate :visibility, VALID_VIEW_VISIBILITY_VALUES, v
|
|
309
367
|
end
|
|
310
368
|
|
|
369
|
+
VALID_MARKER_SYMBOL_VALUES = [:default, :circle, :dash, :diamond, :dot, :picture, :plus, :square, :star, :triangle, :x].freeze
|
|
370
|
+
|
|
311
371
|
# Requires that the value is one of :default, :circle, :dash, :diamond, :dot, :picture, :plus, :square, :star, :triangle, :x
|
|
312
372
|
def self.validate_marker_symbol(v)
|
|
313
|
-
RestrictionValidator.validate :marker_symbol,
|
|
373
|
+
RestrictionValidator.validate :marker_symbol, VALID_MARKER_SYMBOL_VALUES, v
|
|
314
374
|
end
|
|
315
375
|
end
|