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.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -1
  3. data/README.md +9 -11
  4. data/Rakefile +7 -5
  5. data/lib/axlsx/content_type/abstract_content_type.rb +9 -4
  6. data/lib/axlsx/content_type/content_type.rb +7 -5
  7. data/lib/axlsx/content_type/default.rb +4 -2
  8. data/lib/axlsx/content_type/override.rb +4 -2
  9. data/lib/axlsx/doc_props/app.rb +26 -24
  10. data/lib/axlsx/doc_props/core.rb +8 -6
  11. data/lib/axlsx/drawing/area_chart.rb +10 -8
  12. data/lib/axlsx/drawing/area_series.rb +12 -10
  13. data/lib/axlsx/drawing/ax_data_source.rb +2 -0
  14. data/lib/axlsx/drawing/axes.rb +6 -4
  15. data/lib/axlsx/drawing/axis.rb +21 -19
  16. data/lib/axlsx/drawing/bar_3D_chart.rb +14 -12
  17. data/lib/axlsx/drawing/bar_chart.rb +13 -11
  18. data/lib/axlsx/drawing/bar_series.rb +8 -6
  19. data/lib/axlsx/drawing/bubble_chart.rb +6 -4
  20. data/lib/axlsx/drawing/bubble_series.rb +8 -6
  21. data/lib/axlsx/drawing/cat_axis.rb +12 -10
  22. data/lib/axlsx/drawing/chart.rb +20 -18
  23. data/lib/axlsx/drawing/d_lbls.rb +7 -5
  24. data/lib/axlsx/drawing/drawing.rb +58 -56
  25. data/lib/axlsx/drawing/graphic_frame.rb +6 -4
  26. data/lib/axlsx/drawing/hyperlink.rb +10 -8
  27. data/lib/axlsx/drawing/line_3D_chart.rb +7 -5
  28. data/lib/axlsx/drawing/line_chart.rb +10 -8
  29. data/lib/axlsx/drawing/line_series.rb +12 -10
  30. data/lib/axlsx/drawing/marker.rb +9 -7
  31. data/lib/axlsx/drawing/num_data.rb +9 -7
  32. data/lib/axlsx/drawing/num_data_source.rb +9 -7
  33. data/lib/axlsx/drawing/num_val.rb +7 -5
  34. data/lib/axlsx/drawing/one_cell_anchor.rb +7 -5
  35. data/lib/axlsx/drawing/pic.rb +16 -14
  36. data/lib/axlsx/drawing/picture_locking.rb +3 -1
  37. data/lib/axlsx/drawing/pie_3D_chart.rb +5 -3
  38. data/lib/axlsx/drawing/pie_series.rb +8 -6
  39. data/lib/axlsx/drawing/scaling.rb +8 -6
  40. data/lib/axlsx/drawing/scatter_chart.rb +7 -5
  41. data/lib/axlsx/drawing/scatter_series.rb +14 -12
  42. data/lib/axlsx/drawing/ser_axis.rb +7 -5
  43. data/lib/axlsx/drawing/series.rb +6 -4
  44. data/lib/axlsx/drawing/series_title.rb +6 -4
  45. data/lib/axlsx/drawing/str_data.rb +7 -5
  46. data/lib/axlsx/drawing/str_val.rb +6 -4
  47. data/lib/axlsx/drawing/title.rb +13 -14
  48. data/lib/axlsx/drawing/two_cell_anchor.rb +4 -2
  49. data/lib/axlsx/drawing/val_axis.rb +4 -2
  50. data/lib/axlsx/drawing/view_3D.rb +9 -7
  51. data/lib/axlsx/drawing/vml_drawing.rb +18 -16
  52. data/lib/axlsx/drawing/vml_shape.rb +24 -22
  53. data/lib/axlsx/package.rb +69 -66
  54. data/lib/axlsx/rels/relationship.rb +10 -5
  55. data/lib/axlsx/rels/relationships.rb +5 -3
  56. data/lib/axlsx/stylesheet/border.rb +6 -4
  57. data/lib/axlsx/stylesheet/border_pr.rb +5 -3
  58. data/lib/axlsx/stylesheet/cell_alignment.rb +12 -10
  59. data/lib/axlsx/stylesheet/cell_protection.rb +5 -3
  60. data/lib/axlsx/stylesheet/cell_style.rb +10 -8
  61. data/lib/axlsx/stylesheet/color.rb +9 -7
  62. data/lib/axlsx/stylesheet/dxf.rb +5 -3
  63. data/lib/axlsx/stylesheet/fill.rb +3 -1
  64. data/lib/axlsx/stylesheet/font.rb +18 -16
  65. data/lib/axlsx/stylesheet/gradient_fill.rb +6 -4
  66. data/lib/axlsx/stylesheet/gradient_stop.rb +6 -4
  67. data/lib/axlsx/stylesheet/num_fmt.rb +8 -10
  68. data/lib/axlsx/stylesheet/pattern_fill.rb +5 -3
  69. data/lib/axlsx/stylesheet/styles.rb +69 -71
  70. data/lib/axlsx/stylesheet/table_style.rb +7 -5
  71. data/lib/axlsx/stylesheet/table_style_element.rb +6 -4
  72. data/lib/axlsx/stylesheet/table_styles.rb +6 -4
  73. data/lib/axlsx/stylesheet/xf.rb +18 -16
  74. data/lib/axlsx/util/accessors.rb +4 -2
  75. data/lib/axlsx/util/buffered_zip_output_stream.rb +60 -0
  76. data/lib/axlsx/util/constants.rb +117 -104
  77. data/lib/axlsx/util/mime_type_utils.rb +3 -5
  78. data/lib/axlsx/util/options_parser.rb +3 -1
  79. data/lib/axlsx/util/serialized_attributes.rb +42 -17
  80. data/lib/axlsx/util/simple_typed_list.rb +47 -47
  81. data/lib/axlsx/util/storage.rb +11 -10
  82. data/lib/axlsx/util/validators.rb +101 -41
  83. data/lib/axlsx/util/zip_command.rb +10 -10
  84. data/lib/axlsx/version.rb +3 -1
  85. data/lib/axlsx/workbook/defined_name.rb +6 -4
  86. data/lib/axlsx/workbook/defined_names.rb +3 -1
  87. data/lib/axlsx/workbook/shared_strings_table.rb +8 -6
  88. data/lib/axlsx/workbook/workbook.rb +78 -76
  89. data/lib/axlsx/workbook/workbook_view.rb +3 -1
  90. data/lib/axlsx/workbook/workbook_views.rb +3 -1
  91. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +65 -8
  92. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +7 -3
  93. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +11 -7
  94. data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +51 -0
  95. data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +56 -0
  96. data/lib/axlsx/workbook/worksheet/border_creator.rb +5 -3
  97. data/lib/axlsx/workbook/worksheet/break.rb +3 -1
  98. data/lib/axlsx/workbook/worksheet/cell.rb +53 -54
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +31 -27
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +5 -3
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -1
  102. data/lib/axlsx/workbook/worksheet/col.rb +5 -3
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +5 -3
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +12 -10
  105. data/lib/axlsx/workbook/worksheet/cols.rb +3 -1
  106. data/lib/axlsx/workbook/worksheet/comment.rb +8 -6
  107. data/lib/axlsx/workbook/worksheet/comments.rb +6 -4
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +9 -4
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +18 -16
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +3 -1
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +14 -13
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +30 -28
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +3 -1
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +7 -5
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +4 -2
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +4 -2
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +23 -6
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +5 -5
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +6 -2
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +15 -10
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -2
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +11 -9
  123. data/lib/axlsx/workbook/worksheet/pane.rb +11 -9
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +20 -19
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -6
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +2 -0
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +3 -1
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +3 -1
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -3
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +3 -1
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +16 -14
  132. data/lib/axlsx/workbook/worksheet/row.rb +6 -7
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +6 -4
  134. data/lib/axlsx/workbook/worksheet/selection.rb +9 -7
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -2
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
  137. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +6 -2
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +8 -4
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +10 -8
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +15 -13
  141. data/lib/axlsx/workbook/worksheet/table.rb +9 -7
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +4 -2
  143. data/lib/axlsx/workbook/worksheet/tables.rb +3 -1
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +38 -37
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +4 -2
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +8 -2
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +6 -4
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -2
  149. data/lib/axlsx.rb +56 -42
  150. data/lib/caxlsx.rb +3 -1
  151. metadata +49 -43
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The Bar3DChart is a three dimentional barchart (who would have guessed?) that you can add to your worksheet.
3
5
  # @see Worksheet#add_chart
@@ -75,7 +77,7 @@ module Axlsx
75
77
  @gap_width, @gap_depth, @shape = nil, nil, nil
76
78
  super(frame, options)
77
79
  @series_type = BarSeries
78
- @view_3D = View3D.new({ :r_ang_ax => 1 }.merge(options))
80
+ @view_3D = View3D.new({ r_ang_ax: 1 }.merge(options))
79
81
  @d_lbls = nil
80
82
  end
81
83
 
@@ -97,14 +99,14 @@ module Axlsx
97
99
  # space between bar or column clusters, as a percentage of the bar or column width.
98
100
  def gap_width=(v)
99
101
  RangeValidator.validate "Bar3DChart.gap_width", 0, 500, v
100
- @gap_width = (v)
102
+ @gap_width = v
101
103
  end
102
104
  alias :gapWidth= :gap_width=
103
105
 
104
106
  # space between bar or column clusters, as a percentage of the bar or column width.
105
107
  def gap_depth=(v)
106
108
  RangeValidator.validate "Bar3DChart.gap_depth", 0, 500, v
107
- @gap_depth = (v)
109
+ @gap_depth = v
108
110
  end
109
111
  alias :gapDepth= :gap_depth=
110
112
 
@@ -118,18 +120,18 @@ module Axlsx
118
120
  # Serializes the object
119
121
  # @param [String] str
120
122
  # @return [String]
121
- def to_xml_string(str = '')
123
+ def to_xml_string(str = +'')
122
124
  super(str) do
123
125
  str << '<c:bar3DChart>'
124
- str << ('<c:barDir val="' << bar_dir.to_s << '"/>')
125
- str << ('<c:grouping val="' << grouping.to_s << '"/>')
126
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
126
+ str << '<c:barDir val="' << bar_dir.to_s << '"/>'
127
+ str << '<c:grouping val="' << grouping.to_s << '"/>'
128
+ str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
127
129
  @series.each { |ser| ser.to_xml_string(str) }
128
130
  @d_lbls.to_xml_string(str) if @d_lbls
129
- str << ('<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil?
130
- str << ('<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil?
131
- str << ('<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil?
132
- axes.to_xml_string(str, :ids => true)
131
+ str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
132
+ str << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
133
+ str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
134
+ axes.to_xml_string(str, ids: true)
133
135
  str << '</c:bar3DChart>'
134
136
  axes.to_xml_string(str)
135
137
  end
@@ -139,7 +141,7 @@ module Axlsx
139
141
  # category axes specified via axes[:val_axes] and axes[:cat_axis]
140
142
  # @return [Axes]
141
143
  def axes
142
- @axes ||= Axes.new(:cat_axis => CatAxis, :val_axis => ValAxis)
144
+ @axes ||= Axes.new(cat_axis: CatAxis, val_axis: ValAxis)
143
145
  end
144
146
  end
145
147
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The BarChart is a two dimentional barchart that you can add to your worksheet.
3
5
  # @see Worksheet#add_chart
@@ -89,13 +91,13 @@ module Axlsx
89
91
  # space between bar or column clusters, as a percentage of the bar or column width.
90
92
  def gap_width=(v)
91
93
  RangeValidator.validate "BarChart.gap_width", 0, 500, v
92
- @gap_width = (v)
94
+ @gap_width = v
93
95
  end
94
96
  alias :gapWidth= :gap_width=
95
97
 
96
98
  def overlap=(v)
97
99
  RangeValidator.validate "BarChart.overlap", -100, 100, v
98
- @overlap = (v)
100
+ @overlap = v
99
101
  end
100
102
 
101
103
  # The shape of the bars or columns
@@ -108,18 +110,18 @@ module Axlsx
108
110
  # Serializes the object
109
111
  # @param [String] str
110
112
  # @return [String]
111
- def to_xml_string(str = '')
113
+ def to_xml_string(str = +'')
112
114
  super(str) do
113
115
  str << '<c:barChart>'
114
- str << ('<c:barDir val="' << bar_dir.to_s << '"/>')
115
- str << ('<c:grouping val="' << grouping.to_s << '"/>')
116
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
116
+ str << '<c:barDir val="' << bar_dir.to_s << '"/>'
117
+ str << '<c:grouping val="' << grouping.to_s << '"/>'
118
+ str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
117
119
  @series.each { |ser| ser.to_xml_string(str) }
118
120
  @d_lbls.to_xml_string(str) if @d_lbls
119
- str << ('<c:overlap val="' << @overlap.to_s << '"/>') unless @overlap.nil?
120
- str << ('<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil?
121
- str << ('<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil?
122
- axes.to_xml_string(str, :ids => true)
121
+ str << '<c:overlap val="' << @overlap.to_s << '"/>' unless @overlap.nil?
122
+ str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
123
+ str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
124
+ axes.to_xml_string(str, ids: true)
123
125
  str << '</c:barChart>'
124
126
  axes.to_xml_string(str)
125
127
  end
@@ -129,7 +131,7 @@ module Axlsx
129
131
  # category axes specified via axes[:val_axes] and axes[:cat_axis]
130
132
  # @return [Axes]
131
133
  def axes
132
- @axes ||= Axes.new(:cat_axis => CatAxis, :val_axis => ValAxis)
134
+ @axes ||= Axes.new(cat_axis: CatAxis, val_axis: ValAxis)
133
135
  end
134
136
  end
135
137
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A BarSeries defines the title, data and labels for bar charts
3
5
  # @note The recommended way to manage series is to use Chart#add_series
@@ -36,7 +38,7 @@ module Axlsx
36
38
  @shape = :box
37
39
  @colors = []
38
40
  super(chart, options)
39
- self.labels = AxDataSource.new({ :data => options[:labels] }) unless options[:labels].nil?
41
+ self.labels = AxDataSource.new({ data: options[:labels] }) unless options[:labels].nil?
40
42
  self.data = NumDataSource.new(options) unless options[:data].nil?
41
43
  end
42
44
 
@@ -56,19 +58,19 @@ module Axlsx
56
58
  # Serializes the object
57
59
  # @param [String] str
58
60
  # @return [String]
59
- def to_xml_string(str = '')
61
+ def to_xml_string(str = +'')
60
62
  super(str) do
61
63
  colors.each_with_index do |c, index|
62
64
  str << '<c:dPt>'
63
- str << ('<c:idx val="' << index.to_s << '"/>')
65
+ str << '<c:idx val="' << index.to_s << '"/>'
64
66
  str << '<c:spPr><a:solidFill>'
65
- str << ('<a:srgbClr val="' << c << '"/>')
67
+ str << '<a:srgbClr val="' << c << '"/>'
66
68
  str << '</a:solidFill></c:spPr></c:dPt>'
67
69
  end
68
70
 
69
71
  if series_color
70
72
  str << '<c:spPr><a:solidFill>'
71
- str << ('<a:srgbClr val="' << series_color << '"/>')
73
+ str << '<a:srgbClr val="' << series_color << '"/>'
72
74
  str << '</a:solidFill>'
73
75
  str << '</c:spPr>'
74
76
  end
@@ -76,7 +78,7 @@ module Axlsx
76
78
  @labels.to_xml_string(str) unless @labels.nil?
77
79
  @data.to_xml_string(str) unless @data.nil?
78
80
  # this is actually only required for shapes other than box
79
- str << ('<c:shape val="' << shape.to_s << '"></c:shape>')
81
+ str << '<c:shape val="' << shape.to_s << '"></c:shape>'
80
82
  end
81
83
  end
82
84
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # The BubbleChart allows you to insert a bubble chart into your worksheet
3
5
  # @see Worksheet#add_chart
@@ -33,13 +35,13 @@ module Axlsx
33
35
  # Serializes the object
34
36
  # @param [String] str
35
37
  # @return [String]
36
- def to_xml_string(str = '')
38
+ def to_xml_string(str = +'')
37
39
  super(str) do
38
40
  str << '<c:bubbleChart>'
39
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
41
+ str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
40
42
  @series.each { |ser| ser.to_xml_string(str) }
41
43
  d_lbls.to_xml_string(str) if @d_lbls
42
- axes.to_xml_string(str, :ids => true)
44
+ axes.to_xml_string(str, ids: true)
43
45
  str << '</c:bubbleChart>'
44
46
  axes.to_xml_string(str)
45
47
  end
@@ -50,7 +52,7 @@ module Axlsx
50
52
  # a y_val_axis
51
53
  # @return [Axes]
52
54
  def axes
53
- @axes ||= Axes.new(:x_val_axis => ValAxis, :y_val_axis => ValAxis)
55
+ @axes ||= Axes.new(x_val_axis: ValAxis, y_val_axis: ValAxis)
54
56
  end
55
57
  end
56
58
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A BubbleSeries defines the x/y position and bubble size of data in the chart
3
5
  # @note The recommended way to manage series is to use Chart#add_series
@@ -26,9 +28,9 @@ module Axlsx
26
28
  def initialize(chart, options = {})
27
29
  @xData, @yData, @bubbleSize = nil
28
30
  super(chart, options)
29
- @xData = AxDataSource.new(:tag_name => :xVal, :data => options[:xData]) unless options[:xData].nil?
30
- @yData = NumDataSource.new({ :tag_name => :yVal, :data => options[:yData] }) unless options[:yData].nil?
31
- @bubbleSize = NumDataSource.new({ :tag_name => :bubbleSize, :data => options[:bubbleSize] }) unless options[:bubbleSize].nil?
31
+ @xData = AxDataSource.new(tag_name: :xVal, data: options[:xData]) unless options[:xData].nil?
32
+ @yData = NumDataSource.new({ tag_name: :yVal, data: options[:yData] }) unless options[:yData].nil?
33
+ @bubbleSize = NumDataSource.new({ tag_name: :bubbleSize, data: options[:bubbleSize] }) unless options[:bubbleSize].nil?
32
34
  end
33
35
 
34
36
  # @see color
@@ -39,15 +41,15 @@ module Axlsx
39
41
  # Serializes the object
40
42
  # @param [String] str
41
43
  # @return [String]
42
- def to_xml_string(str = '')
44
+ def to_xml_string(str = +'')
43
45
  super(str) do
44
46
  # needs to override the super color here to push in ln/and something else!
45
47
  if color
46
48
  str << '<c:spPr><a:solidFill>'
47
- str << ('<a:srgbClr val="' << color << '"/>')
49
+ str << '<a:srgbClr val="' << color << '"/>'
48
50
  str << '</a:solidFill>'
49
51
  str << '<a:ln><a:solidFill>'
50
- str << ('<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>')
52
+ str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>'
51
53
  str << '</c:spPr>'
52
54
  end
53
55
  @xData.to_xml_string(str) unless @xData.nil?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A CatAxis object defines a chart category axis
3
5
  class CatAxis < Axis
@@ -40,18 +42,18 @@ module Axlsx
40
42
  alias :tickMarkSkip :tick_mark_skip
41
43
 
42
44
  # regex for validating label offset
43
- LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/
45
+ LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/.freeze
44
46
 
45
47
  # @see tick_lbl_skip
46
- def tick_lbl_skip=(v) Axlsx::validate_unsigned_int(v); @tick_lbl_skip = v; end
48
+ def tick_lbl_skip=(v) Axlsx.validate_unsigned_int(v); @tick_lbl_skip = v; end
47
49
  alias :tickLblSkip= :tick_lbl_skip=
48
50
 
49
51
  # @see tick_mark_skip
50
- def tick_mark_skip=(v) Axlsx::validate_unsigned_int(v); @tick_mark_skip = v; end
52
+ def tick_mark_skip=(v) Axlsx.validate_unsigned_int(v); @tick_mark_skip = v; end
51
53
  alias :tickMarkSkip= :tick_mark_skip=
52
54
 
53
55
  # From the docs: This element specifies that this axis is a date or text axis based on the data that is used for the axis labels, not a specific choice.
54
- def auto=(v) Axlsx::validate_boolean(v); @auto = v; end
56
+ def auto=(v) Axlsx.validate_boolean(v); @auto = v; end
55
57
 
56
58
  # specifies how the perpendicular axis is crossed
57
59
  # must be one of [:ctr, :l, :r]
@@ -66,14 +68,14 @@ module Axlsx
66
68
  # Serializes the object
67
69
  # @param [String] str
68
70
  # @return [String]
69
- def to_xml_string(str = '')
71
+ def to_xml_string(str = +'')
70
72
  str << '<c:catAx>'
71
73
  super(str)
72
- str << ('<c:auto val="' << @auto.to_s << '"/>')
73
- str << ('<c:lblAlgn val="' << @lbl_algn.to_s << '"/>')
74
- str << ('<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>')
75
- str << ('<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>')
76
- str << ('<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>')
74
+ str << '<c:auto val="' << @auto.to_s << '"/>'
75
+ str << '<c:lblAlgn val="' << @lbl_algn.to_s << '"/>'
76
+ str << '<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>'
77
+ str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>'
78
+ str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>'
77
79
  str << '</c:catAx>'
78
80
  end
79
81
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A Chart is the superclass for specific charts
3
5
  # @note Worksheet#add_chart is the recommended way to create charts for your worksheets.
@@ -49,7 +51,7 @@ module Axlsx
49
51
  # @return [Series]
50
52
  attr_reader :series_type
51
53
 
52
- # TODO data labels!
54
+ # TODO: data labels!
53
55
  def d_lbls
54
56
  @d_lbls ||= DLbls.new(self.class)
55
57
  end
@@ -60,7 +62,7 @@ module Axlsx
60
62
 
61
63
  # Configures the vary_colors options for this chart
62
64
  # @param [Boolean] v The value to set
63
- def vary_colors=(v) Axlsx::validate_boolean(v); @vary_colors = v; end
65
+ def vary_colors=(v) Axlsx.validate_boolean(v); @vary_colors = v; end
64
66
 
65
67
  # The title object for the chart.
66
68
  # @return [Title]
@@ -122,7 +124,7 @@ module Axlsx
122
124
  # The part name for this chart
123
125
  # @return [String]
124
126
  def pn
125
- "#{CHART_PN % (index + 1)}"
127
+ format(CHART_PN, index + 1)
126
128
  end
127
129
 
128
130
  # The title object for the chart.
@@ -147,18 +149,18 @@ module Axlsx
147
149
  # Show the legend in the chart
148
150
  # @param [Boolean] v
149
151
  # @return [Boolean]
150
- def show_legend=(v) Axlsx::validate_boolean(v); @show_legend = v; end
152
+ def show_legend=(v) Axlsx.validate_boolean(v); @show_legend = v; end
151
153
 
152
154
  # How to display blank values
153
155
  # @see display_blanks_as
154
156
  # @param [Symbol] v
155
157
  # @return [Symbol]
156
- def display_blanks_as=(v) Axlsx::validate_display_blanks_as(v); @display_blanks_as = v; end
158
+ def display_blanks_as=(v) Axlsx.validate_display_blanks_as(v); @display_blanks_as = v; end
157
159
 
158
160
  # The style for the chart.
159
161
  # see ECMA Part 1 §21.2.2.196
160
162
  # @param [Integer] v must be between 1 and 48
161
- def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, lambda { |arg| arg >= 1 && arg <= 48 }; @style = v; end
163
+ def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, ->(arg) { arg >= 1 && arg <= 48 }; @style = v; end
162
164
 
163
165
  # @see legend_position
164
166
  def legend_position=(v) RestrictionValidator.validate "Chart.legend_position", [:b, :l, :r, :t, :tr], v; @legend_position = v; end
@@ -185,32 +187,32 @@ module Axlsx
185
187
 
186
188
  # Assigns a background color to chart area
187
189
  def bg_color=(v)
188
- DataTypeValidator.validate(:color, Color, Color.new(:rgb => v))
190
+ DataTypeValidator.validate(:color, Color, Color.new(rgb: v))
189
191
  @bg_color = v
190
192
  end
191
193
 
192
194
  # Whether only data from visible cells should be plotted.
193
195
  # @param [Boolean] v
194
196
  # @return [Boolean]
195
- def plot_visible_only=(v) Axlsx::validate_boolean(v); @plot_visible_only = v; end
197
+ def plot_visible_only=(v) Axlsx.validate_boolean(v); @plot_visible_only = v; end
196
198
 
197
199
  # Whether the chart area shall have rounded corners.
198
200
  # @param [Boolean] v
199
201
  # @return [Boolean]
200
- def rounded_corners=(v) Axlsx::validate_boolean(v); @rounded_corners = v; end
202
+ def rounded_corners=(v) Axlsx.validate_boolean(v); @rounded_corners = v; end
201
203
 
202
204
  # Serializes the object
203
205
  # @param [String] str
204
206
  # @return [String]
205
- def to_xml_string(str = '')
207
+ def to_xml_string(str = +'')
206
208
  str << '<?xml version="1.0" encoding="UTF-8"?>'
207
- str << ('<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">')
208
- str << ('<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>')
209
- str << ('<c:roundedCorners val="' << rounded_corners.to_s << '"/>')
210
- str << ('<c:style val="' << style.to_s << '"/>')
209
+ str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">'
210
+ str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
211
+ str << '<c:roundedCorners val="' << rounded_corners.to_s << '"/>'
212
+ str << '<c:style val="' << style.to_s << '"/>'
211
213
  str << '<c:chart>'
212
214
  @title.to_xml_string(str) unless @title.empty?
213
- str << ('<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>')
215
+ str << '<c:autoTitleDeleted val="' << @title.nil?.to_s << '"/>'
214
216
  @view_3D.to_xml_string(str) if @view_3D
215
217
  str << '<c:floor><c:thickness val="0"/></c:floor>'
216
218
  str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
@@ -221,13 +223,13 @@ module Axlsx
221
223
  str << '</c:plotArea>'
222
224
  if @show_legend
223
225
  str << '<c:legend>'
224
- str << ('<c:legendPos val="' << @legend_position.to_s << '"/>')
226
+ str << '<c:legendPos val="' << @legend_position.to_s << '"/>'
225
227
  str << '<c:layout/>'
226
228
  str << '<c:overlay val="0"/>'
227
229
  str << '</c:legend>'
228
230
  end
229
- str << ('<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>')
230
- str << ('<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>')
231
+ str << '<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>'
232
+ str << '<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>'
231
233
  str << '<c:showDLblsOverMax val="1"/>'
232
234
  str << '</c:chart>'
233
235
  if bg_color
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # There are more elements in the dLbls spec that allow for
3
5
  # customizations and formatting. For now, I am just implementing the
@@ -36,7 +38,7 @@ module Axlsx
36
38
  [:show_legend_key, :show_val, :show_cat_name,
37
39
  :show_ser_name, :show_percent, :show_bubble_size,
38
40
  :show_leader_lines].each do |attr|
39
- self.send("#{attr}=", false)
41
+ send("#{attr}=", false)
40
42
  end
41
43
  end
42
44
 
@@ -69,19 +71,19 @@ module Axlsx
69
71
 
70
72
  # serializes the data labels
71
73
  # @return [String]
72
- def to_xml_string(str = '')
74
+ def to_xml_string(str = +'')
73
75
  validate_attributes_for_chart_type
74
76
  str << '<c:dLbls>'
75
77
  instance_vals = Axlsx.instance_values_for(self)
76
78
  %w(d_lbl_pos show_legend_key show_val show_cat_name show_ser_name show_percent show_bubble_size show_leader_lines).each do |key|
77
- next unless instance_vals.keys.include?(key) && instance_vals[key] != nil
79
+ next unless instance_vals.key?(key) && !instance_vals[key].nil?
78
80
 
79
- str << "<c:#{Axlsx::camel(key, false)} val='#{instance_vals[key]}' />"
81
+ str << "<c:#{Axlsx.camel(key, false)} val='#{instance_vals[key]}' />"
80
82
  end
81
83
  str << '</c:dLbls>'
82
84
  end
83
85
 
84
- # nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually chrash excel for any chart type other than pie charts.
86
+ # nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually crash Excel for any chart type other than pie charts.
85
87
  def validate_attributes_for_chart_type
86
88
  return if [Pie3DChart, LineChart].include? @chart_type
87
89
 
@@ -1,53 +1,55 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
- require 'axlsx/drawing/d_lbls.rb'
3
- require 'axlsx/drawing/title.rb'
4
- require 'axlsx/drawing/series_title.rb'
5
- require 'axlsx/drawing/series.rb'
6
- require 'axlsx/drawing/pie_series.rb'
7
- require 'axlsx/drawing/bar_series.rb'
8
- require 'axlsx/drawing/line_series.rb'
9
- require 'axlsx/drawing/scatter_series.rb'
10
- require 'axlsx/drawing/bubble_series.rb'
11
- require 'axlsx/drawing/area_series.rb'
12
-
13
- require 'axlsx/drawing/scaling.rb'
14
- require 'axlsx/drawing/axis.rb'
15
-
16
- require 'axlsx/drawing/str_val.rb'
17
- require 'axlsx/drawing/num_val.rb'
18
- require 'axlsx/drawing/str_data.rb'
19
- require 'axlsx/drawing/num_data.rb'
20
- require 'axlsx/drawing/num_data_source.rb'
21
- require 'axlsx/drawing/ax_data_source.rb'
22
-
23
- require 'axlsx/drawing/ser_axis.rb'
24
- require 'axlsx/drawing/cat_axis.rb'
25
- require 'axlsx/drawing/val_axis.rb'
26
- require 'axlsx/drawing/axes.rb'
27
-
28
- require 'axlsx/drawing/marker.rb'
29
-
30
- require 'axlsx/drawing/one_cell_anchor.rb'
31
- require 'axlsx/drawing/two_cell_anchor.rb'
32
- require 'axlsx/drawing/graphic_frame.rb'
33
-
34
- require 'axlsx/drawing/view_3D.rb'
35
- require 'axlsx/drawing/chart.rb'
36
- require 'axlsx/drawing/pie_3D_chart.rb'
37
- require 'axlsx/drawing/bar_3D_chart.rb'
38
- require 'axlsx/drawing/bar_chart.rb'
39
- require 'axlsx/drawing/line_chart.rb'
40
- require 'axlsx/drawing/line_3D_chart.rb'
41
- require 'axlsx/drawing/scatter_chart.rb'
42
- require 'axlsx/drawing/bubble_chart.rb'
43
- require 'axlsx/drawing/area_chart.rb'
44
-
45
- require 'axlsx/drawing/picture_locking.rb'
46
- require 'axlsx/drawing/pic.rb'
47
- require 'axlsx/drawing/hyperlink.rb'
48
-
49
- require 'axlsx/drawing/vml_drawing.rb'
50
- require 'axlsx/drawing/vml_shape.rb'
4
+ require 'axlsx/drawing/d_lbls'
5
+ require 'axlsx/drawing/title'
6
+ require 'axlsx/drawing/series_title'
7
+ require 'axlsx/drawing/series'
8
+ require 'axlsx/drawing/pie_series'
9
+ require 'axlsx/drawing/bar_series'
10
+ require 'axlsx/drawing/line_series'
11
+ require 'axlsx/drawing/scatter_series'
12
+ require 'axlsx/drawing/bubble_series'
13
+ require 'axlsx/drawing/area_series'
14
+
15
+ require 'axlsx/drawing/scaling'
16
+ require 'axlsx/drawing/axis'
17
+
18
+ require 'axlsx/drawing/str_val'
19
+ require 'axlsx/drawing/num_val'
20
+ require 'axlsx/drawing/str_data'
21
+ require 'axlsx/drawing/num_data'
22
+ require 'axlsx/drawing/num_data_source'
23
+ require 'axlsx/drawing/ax_data_source'
24
+
25
+ require 'axlsx/drawing/ser_axis'
26
+ require 'axlsx/drawing/cat_axis'
27
+ require 'axlsx/drawing/val_axis'
28
+ require 'axlsx/drawing/axes'
29
+
30
+ require 'axlsx/drawing/marker'
31
+
32
+ require 'axlsx/drawing/one_cell_anchor'
33
+ require 'axlsx/drawing/two_cell_anchor'
34
+ require 'axlsx/drawing/graphic_frame'
35
+
36
+ require 'axlsx/drawing/view_3D'
37
+ require 'axlsx/drawing/chart'
38
+ require 'axlsx/drawing/pie_3D_chart'
39
+ require 'axlsx/drawing/bar_3D_chart'
40
+ require 'axlsx/drawing/bar_chart'
41
+ require 'axlsx/drawing/line_chart'
42
+ require 'axlsx/drawing/line_3D_chart'
43
+ require 'axlsx/drawing/scatter_chart'
44
+ require 'axlsx/drawing/bubble_chart'
45
+ require 'axlsx/drawing/area_chart'
46
+
47
+ require 'axlsx/drawing/picture_locking'
48
+ require 'axlsx/drawing/pic'
49
+ require 'axlsx/drawing/hyperlink'
50
+
51
+ require 'axlsx/drawing/vml_drawing'
52
+ require 'axlsx/drawing/vml_shape'
51
53
 
52
54
  # A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
53
55
  # The anchors reference the charts or images via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
@@ -106,15 +108,15 @@ module Axlsx
106
108
  # An array of hyperlink objects associated with this drawings images
107
109
  # @return [Array]
108
110
  def hyperlinks
109
- links = self.images.select { |a| a.hyperlink.is_a?(Hyperlink) }
110
- links.map { |a| a.hyperlink }
111
+ links = images.select { |a| a.hyperlink.is_a?(Hyperlink) }
112
+ links.map(&:hyperlink)
111
113
  end
112
114
 
113
115
  # An array of image objects that are associated with this drawing's anchors
114
116
  # @return [Array]
115
117
  def images
116
118
  images = @anchors.select { |a| a.object.is_a?(Pic) }
117
- images.map { |a| a.object }
119
+ images.map(&:object)
118
120
  end
119
121
 
120
122
  # The index of this drawing in the owning workbooks's drawings collection.
@@ -126,14 +128,14 @@ module Axlsx
126
128
  # The part name for this drawing
127
129
  # @return [String]
128
130
  def pn
129
- "#{DRAWING_PN % (index + 1)}"
131
+ format(DRAWING_PN, index + 1)
130
132
  end
131
133
 
132
134
  # The relational part name for this drawing
133
135
  # #NOTE This should be rewritten to return an Axlsx::Relationship object.
134
136
  # @return [String]
135
137
  def rels_pn
136
- "#{DRAWING_RELS_PN % (index + 1)}"
138
+ format(DRAWING_RELS_PN, index + 1)
137
139
  end
138
140
 
139
141
  # A list of objects this drawing holds.
@@ -153,9 +155,9 @@ module Axlsx
153
155
  # Serializes the object
154
156
  # @param [String] str
155
157
  # @return [String]
156
- def to_xml_string(str = '')
158
+ def to_xml_string(str = +'')
157
159
  str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
158
- str << ('<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">')
160
+ str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">'
159
161
  anchors.each { |anchor| anchor.to_xml_string(str) }
160
162
  str << '</xdr:wsDr>'
161
163
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A graphic frame defines a container for a chart object
3
5
  # @note The recommended way to manage charts is Worksheet#add_chart
@@ -29,11 +31,11 @@ module Axlsx
29
31
  # Serializes the object
30
32
  # @param [String] str
31
33
  # @return [String]
32
- def to_xml_string(str = '')
34
+ def to_xml_string(str = +'')
33
35
  # macro attribute should be optional!
34
36
  str << '<xdr:graphicFrame>'
35
37
  str << '<xdr:nvGraphicFramePr>'
36
- str << ('<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>')
38
+ str << '<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>'
37
39
  str << '<xdr:cNvGraphicFramePr/>'
38
40
  str << '</xdr:nvGraphicFramePr>'
39
41
  str << '<xdr:xfrm>'
@@ -41,8 +43,8 @@ module Axlsx
41
43
  str << '<a:ext cx="0" cy="0"/>'
42
44
  str << '</xdr:xfrm>'
43
45
  str << '<a:graphic>'
44
- str << ('<a:graphicData uri="' << XML_NS_C << '">')
45
- str << ('<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>')
46
+ str << '<a:graphicData uri="' << XML_NS_C << '">'
47
+ str << '<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>'
46
48
  str << '</a:graphicData>'
47
49
  str << '</a:graphic>'
48
50
  str << '</xdr:graphicFrame>'