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 ScatterChart allows you to insert a scatter chart into your worksheet
3
5
  # @see Worksheet#add_chart
@@ -47,14 +49,14 @@ module Axlsx
47
49
  # Serializes the object
48
50
  # @param [String] str
49
51
  # @return [String]
50
- def to_xml_string(str = '')
52
+ def to_xml_string(str = +'')
51
53
  super(str) do
52
54
  str << '<c:scatterChart>'
53
- str << ('<c:scatterStyle val="' << scatter_style.to_s << '"/>')
54
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
55
+ str << '<c:scatterStyle val="' << scatter_style.to_s << '"/>'
56
+ str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
55
57
  @series.each { |ser| ser.to_xml_string(str) }
56
58
  d_lbls.to_xml_string(str) if @d_lbls
57
- axes.to_xml_string(str, :ids => true)
59
+ axes.to_xml_string(str, ids: true)
58
60
  str << '</c:scatterChart>'
59
61
  axes.to_xml_string(str)
60
62
  end
@@ -65,7 +67,7 @@ module Axlsx
65
67
  # a y_val_axis
66
68
  # @return [Axes]
67
69
  def axes
68
- @axes ||= Axes.new(:x_val_axis => ValAxis, :y_val_axis => ValAxis)
70
+ @axes ||= Axes.new(x_val_axis: ValAxis, y_val_axis: ValAxis)
69
71
  end
70
72
  end
71
73
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A ScatterSeries defines the x and y position of data in the chart
3
5
  # @note The recommended way to manage series is to use Chart#add_series
@@ -41,7 +43,7 @@ module Axlsx
41
43
  @smooth = [:smooth, :smoothMarker].include?(chart.scatter_style)
42
44
  else
43
45
  # Set smoothing according to the option provided
44
- Axlsx::validate_boolean(options[:smooth])
46
+ Axlsx.validate_boolean(options[:smooth])
45
47
  @smooth = options[:smooth]
46
48
  end
47
49
  @ln_width = options[:ln_width] unless options[:ln_width].nil?
@@ -49,8 +51,8 @@ module Axlsx
49
51
  @marker_symbol = :default
50
52
 
51
53
  super(chart, options)
52
- @xData = AxDataSource.new(:tag_name => :xVal, :data => options[:xData]) unless options[:xData].nil?
53
- @yData = NumDataSource.new({ :tag_name => :yVal, :data => options[:yData] }) unless options[:yData].nil?
54
+ @xData = AxDataSource.new(tag_name: :xVal, data: options[:xData]) unless options[:xData].nil?
55
+ @yData = NumDataSource.new({ tag_name: :yVal, data: options[:yData] }) unless options[:yData].nil?
54
56
  end
55
57
 
56
58
  # @see color
@@ -60,7 +62,7 @@ module Axlsx
60
62
 
61
63
  # @see smooth
62
64
  def smooth=(v)
63
- Axlsx::validate_boolean(v)
65
+ Axlsx.validate_boolean(v)
64
66
  @smooth = v
65
67
  end
66
68
 
@@ -71,29 +73,29 @@ module Axlsx
71
73
 
72
74
  # @see marker_symbol
73
75
  def marker_symbol=(v)
74
- Axlsx::validate_marker_symbol(v)
76
+ Axlsx.validate_marker_symbol(v)
75
77
  @marker_symbol = v
76
78
  end
77
79
 
78
80
  # Serializes the object
79
81
  # @param [String] str
80
82
  # @return [String]
81
- def to_xml_string(str = '')
83
+ def to_xml_string(str = +'')
82
84
  super(str) do
83
85
  # needs to override the super color here to push in ln/and something else!
84
86
  if color
85
87
  str << '<c:spPr><a:solidFill>'
86
- str << ('<a:srgbClr val="' << color << '"/>')
88
+ str << '<a:srgbClr val="' << color << '"/>'
87
89
  str << '</a:solidFill>'
88
90
  str << '<a:ln><a:solidFill>'
89
- str << ('<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>')
91
+ str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>'
90
92
  str << '</c:spPr>'
91
93
  str << '<c:marker>'
92
94
  str << '<c:spPr><a:solidFill>'
93
- str << ('<a:srgbClr val="' << color << '"/>')
95
+ str << '<a:srgbClr val="' << color << '"/>'
94
96
  str << '</a:solidFill>'
95
97
  str << '<a:ln><a:solidFill>'
96
- str << ('<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>')
98
+ str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>'
97
99
  str << '</c:spPr>'
98
100
  str << marker_symbol_xml
99
101
  str << '</c:marker>'
@@ -108,7 +110,7 @@ module Axlsx
108
110
  end
109
111
  @xData.to_xml_string(str) unless @xData.nil?
110
112
  @yData.to_xml_string(str) unless @yData.nil?
111
- str << ('<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>')
113
+ str << '<c:smooth val="' << (smooth ? '1' : '0') << '"/>'
112
114
  end
113
115
  str
114
116
  end
@@ -119,7 +121,7 @@ module Axlsx
119
121
  if !@show_marker
120
122
  '<c:symbol val="none"/>'
121
123
  elsif @marker_symbol != :default
122
- '<c:symbol val="' + @marker_symbol.to_s + '"/>'
124
+ +'<c:symbol val="' << @marker_symbol.to_s << '"/>'
123
125
  end.to_s
124
126
  end
125
127
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A SerAxis object defines a series axis
3
5
  class SerAxis < Axis
@@ -20,21 +22,21 @@ module Axlsx
20
22
  end
21
23
 
22
24
  # @see tickLblSkip
23
- def tick_lbl_skip=(v) Axlsx::validate_unsigned_int(v); @tick_lbl_skip = v; end
25
+ def tick_lbl_skip=(v) Axlsx.validate_unsigned_int(v); @tick_lbl_skip = v; end
24
26
  alias :tickLblSkip= :tick_lbl_skip=
25
27
 
26
28
  # @see tickMarkSkip
27
- def tick_mark_skip=(v) Axlsx::validate_unsigned_int(v); @tick_mark_skip = v; end
29
+ def tick_mark_skip=(v) Axlsx.validate_unsigned_int(v); @tick_mark_skip = v; end
28
30
  alias :tickMarkSkip= :tick_mark_skip=
29
31
 
30
32
  # Serializes the object
31
33
  # @param [String] str
32
34
  # @return [String]
33
- def to_xml_string(str = '')
35
+ def to_xml_string(str = +'')
34
36
  str << '<c:serAx>'
35
37
  super(str)
36
- str << ('<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>') unless @tick_lbl_skip.nil?
37
- str << ('<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>') unless @tick_mark_skip.nil?
38
+ str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>' unless @tick_lbl_skip.nil?
39
+ str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>' unless @tick_mark_skip.nil?
38
40
  str << '</c:serAx>'
39
41
  end
40
42
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A Series defines the common series attributes and is the super class for all concrete series types.
3
5
  # @note The recommended way to manage series is to use Chart#add_series
@@ -38,7 +40,7 @@ module Axlsx
38
40
  end
39
41
 
40
42
  # @see order
41
- def order=(v) Axlsx::validate_unsigned_int(v); @order = v; end
43
+ def order=(v) Axlsx.validate_unsigned_int(v); @order = v; end
42
44
 
43
45
  # @see title
44
46
  def title=(v)
@@ -55,10 +57,10 @@ module Axlsx
55
57
  # Serializes the object
56
58
  # @param [String] str
57
59
  # @return [String]
58
- def to_xml_string(str = '')
60
+ def to_xml_string(str = +'')
59
61
  str << '<c:ser>'
60
- str << ('<c:idx val="' << index.to_s << '"/>')
61
- str << ('<c:order val="' << (order || index).to_s << '"/>')
62
+ str << '<c:idx val="' << index.to_s << '"/>'
63
+ str << '<c:order val="' << (order || index).to_s << '"/>'
62
64
  title.to_xml_string(str) unless title.nil?
63
65
  yield if block_given?
64
66
  str << '</c:ser>'
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A series title is a Title with a slightly different serialization than chart titles.
3
5
  class SeriesTitle < Title
4
6
  # Serializes the object
5
7
  # @param [String] str
6
8
  # @return [String]
7
- def to_xml_string(str = '')
8
- clean_value = Axlsx::trust_input ? @text.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@text.to_s))
9
+ def to_xml_string(str = +'')
10
+ clean_value = Axlsx.trust_input ? @text.to_s : ::CGI.escapeHTML(Axlsx.sanitize(@text.to_s))
9
11
 
10
12
  str << '<c:tx>'
11
13
  str << '<c:strRef>'
12
- str << ('<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>')
14
+ str << '<c:f>' << Axlsx.cell_range([@cell]) << '</c:f>'
13
15
  str << '<c:strCache>'
14
16
  str << '<c:ptCount val="1"/>'
15
17
  str << '<c:pt idx="0">'
16
- str << ('<c:v>' << clean_value << '</c:v>')
18
+ str << '<c:v>' << clean_value << '</c:v>'
17
19
  str << '</c:pt>'
18
20
  str << '</c:strCache>'
19
21
  str << '</c:strRef>'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # This specifies the last string data used for a chart. (e.g. strLit and strCache)
3
5
  # This class is extended for NumData to include the formatCode attribute required for numLit and numCache
@@ -20,18 +22,18 @@ module Axlsx
20
22
  @tag_name = values.first.is_a?(Cell) ? :strCache : :strLit
21
23
  values.each do |value|
22
24
  v = value.is_a?(Cell) ? value.value : value
23
- @pt << @type.new(:v => v)
25
+ @pt << @type.new(v: v)
24
26
  end
25
27
  end
26
28
 
27
29
  # serialize the object
28
- def to_xml_string(str = "")
29
- str << ('<c:' << @tag_name.to_s << '>')
30
- str << ('<c:ptCount val="' << @pt.size.to_s << '"/>')
30
+ def to_xml_string(str = +'')
31
+ str << '<c:' << @tag_name.to_s << '>'
32
+ str << '<c:ptCount val="' << @pt.size.to_s << '"/>'
31
33
  @pt.each_with_index do |value, index|
32
34
  value.to_xml_string index, str
33
35
  end
34
- str << ('</c:' << @tag_name.to_s << '>')
36
+ str << '</c:' << @tag_name.to_s << '>'
35
37
  end
36
38
  end
37
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # This class specifies data for a particular data point.
3
5
  class StrVal
@@ -21,10 +23,10 @@ module Axlsx
21
23
  end
22
24
 
23
25
  # serialize the object
24
- def to_xml_string(idx, str = "")
25
- Axlsx::validate_unsigned_int(idx)
26
- if !v.to_s.empty?
27
- str << ('<c:pt idx="' << idx.to_s << '"><c:v>' << ::CGI.escapeHTML(v.to_s) << '</c:v></c:pt>')
26
+ def to_xml_string(idx, str = +'')
27
+ Axlsx.validate_unsigned_int(idx)
28
+ unless v.to_s.empty?
29
+ str << '<c:pt idx="' << idx.to_s << '"><c:v>' << ::CGI.escapeHTML(v.to_s) << '</c:v></c:pt>'
28
30
  end
29
31
  end
30
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A Title stores information about the title of a chart
3
5
  class Title
@@ -18,11 +20,11 @@ module Axlsx
18
20
  def initialize(title = "", title_size = "")
19
21
  self.cell = title if title.is_a?(Cell)
20
22
  self.text = title.to_s unless title.is_a?(Cell)
21
- if title_size.to_s.empty?
22
- self.text_size = "1600"
23
- else
24
- self.text_size = title_size.to_s
25
- end
23
+ self.text_size = if title_size.to_s.empty?
24
+ "1600"
25
+ else
26
+ title_size.to_s
27
+ end
26
28
  end
27
29
 
28
30
  # @see text
@@ -30,7 +32,6 @@ module Axlsx
30
32
  DataTypeValidator.validate 'Title.text', String, v
31
33
  @text = v
32
34
  @cell = nil
33
- v
34
35
  end
35
36
 
36
37
  # @see text_size
@@ -38,7 +39,6 @@ module Axlsx
38
39
  DataTypeValidator.validate 'Title.text_size', String, v
39
40
  @text_size = v
40
41
  @cell = nil
41
- v
42
42
  end
43
43
 
44
44
  # @see cell
@@ -46,7 +46,6 @@ module Axlsx
46
46
  DataTypeValidator.validate 'Title.text', Cell, v
47
47
  @cell = v
48
48
  @text = v.value.to_s
49
- v
50
49
  end
51
50
 
52
51
  # Check if the title is empty.
@@ -67,18 +66,18 @@ module Axlsx
67
66
  # Serializes the object
68
67
  # @param [String] str
69
68
  # @return [String]
70
- def to_xml_string(str = '')
69
+ def to_xml_string(str = +'')
71
70
  str << '<c:title>'
72
71
  unless empty?
73
- clean_value = Axlsx::trust_input ? @text.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@text.to_s))
72
+ clean_value = Axlsx.trust_input ? @text.to_s : ::CGI.escapeHTML(Axlsx.sanitize(@text.to_s))
74
73
  str << '<c:tx>'
75
74
  if @cell.is_a?(Cell)
76
75
  str << '<c:strRef>'
77
- str << ('<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>')
76
+ str << '<c:f>' << Axlsx.cell_range([@cell]) << '</c:f>'
78
77
  str << '<c:strCache>'
79
78
  str << '<c:ptCount val="1"/>'
80
79
  str << '<c:pt idx="0">'
81
- str << ('<c:v>' << clean_value << '</c:v>')
80
+ str << '<c:v>' << clean_value << '</c:v>'
82
81
  str << '</c:pt>'
83
82
  str << '</c:strCache>'
84
83
  str << '</c:strRef>'
@@ -88,8 +87,8 @@ module Axlsx
88
87
  str << '<a:lstStyle/>'
89
88
  str << '<a:p>'
90
89
  str << '<a:r>'
91
- str << ('<a:rPr sz="' << @text_size.to_s << '"/>')
92
- str << ('<a:t>' << clean_value << '</a:t>')
90
+ str << '<a:rPr sz="' << @text_size.to_s << '"/>'
91
+ str << '<a:t>' << clean_value << '</a:t>'
93
92
  str << '</a:r>'
94
93
  str << '</a:p>'
95
94
  str << '</c:rich>'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # This class details the anchor points for drawings.
3
5
  # @note The recommended way to manage drawings and charts is Worksheet#add_chart. Anchors are specified by the :start_at and :end_at options to that method.
@@ -33,7 +35,7 @@ module Axlsx
33
35
  def initialize(drawing, options = {})
34
36
  @drawing = drawing
35
37
  drawing.anchors << self
36
- @from, @to = Marker.new, Marker.new(:col => 5, :row => 10)
38
+ @from, @to = Marker.new, Marker.new(col: 5, row: 10)
37
39
  parse_options options
38
40
 
39
41
  # bit of a hack to work around the fact that the coords for start at and end at
@@ -79,7 +81,7 @@ module Axlsx
79
81
  # Serializes the object
80
82
  # @param [String] str
81
83
  # @return [String]
82
- def to_xml_string(str = '')
84
+ def to_xml_string(str = +'')
83
85
  str << '<xdr:twoCellAnchor>'
84
86
  str << '<xdr:from>'
85
87
  from.to_xml_string str
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # the ValAxis class defines a chart value axis.
3
5
  class ValAxis < Axis
@@ -24,10 +26,10 @@ module Axlsx
24
26
  # Serializes the object
25
27
  # @param [String] str
26
28
  # @return [String]
27
- def to_xml_string(str = '')
29
+ def to_xml_string(str = +'')
28
30
  str << '<c:valAx>'
29
31
  super(str)
30
- str << ('<c:crossBetween val="' << @cross_between.to_s << '"/>')
32
+ str << '<c:crossBetween val="' << @cross_between.to_s << '"/>'
31
33
  str << '</c:valAx>'
32
34
  end
33
35
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # 3D attributes for a chart.
3
5
  class View3D
@@ -16,10 +18,10 @@ module Axlsx
16
18
  end
17
19
 
18
20
  # Validation for hPercent
19
- H_PERCENT_REGEX = /0*(([5-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)/
21
+ H_PERCENT_REGEX = /0*(([5-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)/.freeze
20
22
 
21
23
  # validation for depthPercent
22
- DEPTH_PERCENT_REGEX = /0*(([2-9][0-9])|([1-9][0-9][0-9])|(1[0-9][0-9][0-9])|2000)/
24
+ DEPTH_PERCENT_REGEX = /0*(([2-9][0-9])|([1-9][0-9][0-9])|(1[0-9][0-9][0-9])|2000)/.freeze
23
25
 
24
26
  # x rotation for the chart
25
27
  # must be between -90 and 90
@@ -80,7 +82,7 @@ module Axlsx
80
82
  alias :depthPercent= :depth_percent=
81
83
 
82
84
  # @see r_ang_ax
83
- def r_ang_ax=(v) Axlsx::validate_boolean(v); @r_ang_ax = v; end
85
+ def r_ang_ax=(v) Axlsx.validate_boolean(v); @r_ang_ax = v; end
84
86
  alias :rAngAx= :r_ang_ax=
85
87
 
86
88
  # @see perspective
@@ -94,7 +96,7 @@ module Axlsx
94
96
  # Serializes the object
95
97
  # @param [String] str
96
98
  # @return [String]
97
- def to_xml_string(str = '')
99
+ def to_xml_string(str = +'')
98
100
  str << '<c:view3D>'
99
101
  %w(rot_x h_percent rot_y depth_percent r_ang_ax perspective).each do |key|
100
102
  str << element_for_attribute(key, 'c')
@@ -104,12 +106,12 @@ module Axlsx
104
106
 
105
107
  private
106
108
 
107
- # Note: move this to Axlsx module if we find the smae pattern elsewhere.
109
+ # NOTE: move this to Axlsx module if we find the same pattern elsewhere.
108
110
  def element_for_attribute(name, namespace = '')
109
111
  val = Axlsx.instance_values_for(self)[name]
110
- return "" if val == nil
112
+ return "" if val.nil?
111
113
 
112
- "<%s:%s val='%s'/>" % [namespace, Axlsx::camel(name, false), val]
114
+ format("<%s:%s val='%s'/>", namespace, Axlsx.camel(name, false), val)
113
115
  end
114
116
  end
115
117
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
- # a vml drawing used for comments in excel.
4
+ # a vml drawing used for comments in Excel.
3
5
  class VmlDrawing
4
6
  # creates a new Vml Drawing object.
5
7
  # @param [Comments] comments the comments object this drawing is associated with
@@ -12,26 +14,26 @@ module Axlsx
12
14
  # The part name for this vml drawing
13
15
  # @return [String]
14
16
  def pn
15
- "#{VML_DRAWING_PN}" % (@comments.worksheet.index + 1)
17
+ format(VML_DRAWING_PN, @comments.worksheet.index + 1)
16
18
  end
17
19
 
18
20
  # serialize the vml_drawing to xml.
19
21
  # @param [String] str
20
22
  # @return [String]
21
- def to_xml_string(str = '')
22
- str << <<BAD_PROGRAMMER
23
- <xml xmlns:v="urn:schemas-microsoft-com:vml"
24
- xmlns:o="urn:schemas-microsoft-com:office:office"
25
- xmlns:x="urn:schemas-microsoft-com:office:excel">
26
- <o:shapelayout v:ext="edit">
27
- <o:idmap v:ext="edit" data="#{@comments.worksheet.index + 1}"/>
28
- </o:shapelayout>
29
- <v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202"
30
- path="m0,0l0,21600,21600,21600,21600,0xe">
31
- <v:stroke joinstyle="miter"/>
32
- <v:path gradientshapeok="t" o:connecttype="rect"/>
33
- </v:shapetype>
34
- BAD_PROGRAMMER
23
+ def to_xml_string(str = +'')
24
+ str << <<~XML
25
+ <xml xmlns:v="urn:schemas-microsoft-com:vml"
26
+ xmlns:o="urn:schemas-microsoft-com:office:office"
27
+ xmlns:x="urn:schemas-microsoft-com:office:excel">
28
+ <o:shapelayout v:ext="edit">
29
+ <o:idmap v:ext="edit" data="#{@comments.worksheet.index + 1}"/>
30
+ </o:shapelayout>
31
+ <v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202"
32
+ path="m0,0l0,21600,21600,21600,21600,0xe">
33
+ <v:stroke joinstyle="miter"/>
34
+ <v:path gradientshapeok="t" o:connecttype="rect"/>
35
+ </v:shapetype>
36
+ XML
35
37
  @comments.each { |comment| comment.vml_shape.to_xml_string str }
36
38
  str << "</xml>"
37
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Axlsx
2
4
  # A VmlShape is used to position and render a comment.
3
5
  class VmlShape
@@ -22,7 +24,7 @@ module Axlsx
22
24
  @right_offset = 50
23
25
  @bottom_offset = 5
24
26
  @visible = true
25
- @id = (0...8).map { 65.+(rand(25)).chr }.join
27
+ @id = Array.new(8) { rand(65..89).chr }.join
26
28
  parse_options options
27
29
  yield self if block_given?
28
30
  end
@@ -35,29 +37,29 @@ module Axlsx
35
37
  # serialize the shape to a string
36
38
  # @param [String] str
37
39
  # @return [String]
38
- def to_xml_string(str = '')
39
- str << <<SHAME_ON_YOU
40
+ def to_xml_string(str = +'')
41
+ str << <<~XML
40
42
 
41
- <v:shape id="#{@id}" type="#_x0000_t202" fillcolor="#ffffa1 [80]" o:insetmode="auto"
42
- style="visibility:#{@visible ? 'visible' : 'hidden'}">
43
- <v:fill color2="#ffffa1 [80]"/>
44
- <v:shadow on="t" obscured="t"/>
45
- <v:path o:connecttype="none"/>
46
- <v:textbox style='mso-fit-text-with-word-wrap:t'>
47
- <div style='text-align:left'></div>
48
- </v:textbox>
43
+ <v:shape id="#{@id}" type="#_x0000_t202" fillcolor="#ffffa1 [80]" o:insetmode="auto"
44
+ style="visibility:#{@visible ? 'visible' : 'hidden'}">
45
+ <v:fill color2="#ffffa1 [80]"/>
46
+ <v:shadow on="t" obscured="t"/>
47
+ <v:path o:connecttype="none"/>
48
+ <v:textbox style='mso-fit-text-with-word-wrap:t'>
49
+ <div style='text-align:left'></div>
50
+ </v:textbox>
49
51
 
50
- <x:ClientData ObjectType="Note">
51
- <x:MoveWithCells/>
52
- <x:SizeWithCells/>
53
- <x:Anchor>#{left_column}, #{left_offset}, #{top_row}, #{top_offset}, #{right_column}, #{right_offset}, #{bottom_row}, #{bottom_offset}</x:Anchor>
54
- <x:AutoFill>False</x:AutoFill>
55
- <x:Row>#{row}</x:Row>
56
- <x:Column>#{column}</x:Column>
57
- #{@visible ? '<x:Visible/>' : ''}
58
- </x:ClientData>
59
- </v:shape>
60
- SHAME_ON_YOU
52
+ <x:ClientData ObjectType="Note">
53
+ <x:MoveWithCells/>
54
+ <x:SizeWithCells/>
55
+ <x:Anchor>#{left_column}, #{left_offset}, #{top_row}, #{top_offset}, #{right_column}, #{right_offset}, #{bottom_row}, #{bottom_offset}</x:Anchor>
56
+ <x:AutoFill>False</x:AutoFill>
57
+ <x:Row>#{row}</x:Row>
58
+ <x:Column>#{column}</x:Column>
59
+ #{@visible ? '<x:Visible/>' : ''}
60
+ </x:ClientData>
61
+ </v:shape>
62
+ XML
61
63
  end
62
64
  end
63
65
  end