diff options
| author | Paul Kmiec <[email protected]> | 2023-05-05 08:58:17 -0700 |
|---|---|---|
| committer | Paul Kmiec <[email protected]> | 2023-05-05 09:29:58 -0700 |
| commit | 67aefd7705df82e43a8670102400a5abab49f6e8 (patch) | |
| tree | 6872755fccedb331f4553c72b642c6c86a700bff | |
| parent | 1c355c83a9603f835dfe59ef4473df2b8cc3534c (diff) | |
| download | caxlsx-67aefd7705df82e43a8670102400a5abab49f6e8.tar.gz caxlsx-67aefd7705df82e43a8670102400a5abab49f6e8.zip | |
Pipe output directly to str and avoid additional memory allocations
Currently, there are lots of examples of code like this,
```
str << ('<tag ' << foo << ' ' << bar << '/>')
```
which create the string for the tag in memory before piping to str.
We can avoid creating all of these intermediate strings by dropping
the paranthesis and piping directly to str.
This relies on the `str` passed around to handle lots of small
appends. This is a problem when using RubyZip, but that is solved
in the next commit.
70 files changed, 198 insertions, 186 deletions
diff --git a/lib/axlsx/content_type/abstract_content_type.rb b/lib/axlsx/content_type/abstract_content_type.rb index 58ca8b2c..bca08b7e 100644 --- a/lib/axlsx/content_type/abstract_content_type.rb +++ b/lib/axlsx/content_type/abstract_content_type.rb @@ -24,7 +24,7 @@ module Axlsx # Serialize the contenty type to xml def to_xml_string(node_name = '', str = +'') str << "<#{node_name} " - str << Axlsx.instance_values_for(self).map { |key, value| Axlsx::camel(key) << '="' << value.to_s << '"' }.join(' ') + Axlsx.instance_values_for(self).each { |key, value| str << Axlsx::camel(key) << '="' << value.to_s << '" ' } str << '/>' end end diff --git a/lib/axlsx/content_type/content_type.rb b/lib/axlsx/content_type/content_type.rb index 15751b17..22763bfb 100644 --- a/lib/axlsx/content_type/content_type.rb +++ b/lib/axlsx/content_type/content_type.rb @@ -16,7 +16,7 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<Types xmlns="' << XML_NS_T << '">') + str << '<Types xmlns="' << XML_NS_T << '">' each { |type| type.to_xml_string(str) } str << '</Types>' end diff --git a/lib/axlsx/doc_props/app.rb b/lib/axlsx/doc_props/app.rb index 3eae1e28..40a8184d 100644 --- a/lib/axlsx/doc_props/app.rb +++ b/lib/axlsx/doc_props/app.rb @@ -221,7 +221,7 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<Properties xmlns="' << APP_NS << '" xmlns:vt="' << APP_NS_VT << '">') + str << '<Properties xmlns="' << APP_NS << '" xmlns:vt="' << APP_NS_VT << '">' Axlsx.instance_values_for(self).each do |key, value| node_name = Axlsx.camel(key) str << "<#{node_name}>#{value}</#{node_name}>" diff --git a/lib/axlsx/doc_props/core.rb b/lib/axlsx/doc_props/core.rb index 8d3292e9..8dbe4cf4 100644 --- a/lib/axlsx/doc_props/core.rb +++ b/lib/axlsx/doc_props/core.rb @@ -24,11 +24,11 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<cp:coreProperties xmlns:cp="' << CORE_NS << '" xmlns:dc="' << CORE_NS_DC << '" ') - str << (+'xmlns:dcmitype="' << CORE_NS_DCMIT << '" xmlns:dcterms="' << CORE_NS_DCT << '" ') - str << (+'xmlns:xsi="' << CORE_NS_XSI << '">') - str << (+'<dc:creator>' << self.creator << '</dc:creator>') - str << (+'<dcterms:created xsi:type="dcterms:W3CDTF">' << (created || Time.now).strftime('%Y-%m-%dT%H:%M:%S') << 'Z</dcterms:created>') + str << '<cp:coreProperties xmlns:cp="' << CORE_NS << '" xmlns:dc="' << CORE_NS_DC << '" ' + str << 'xmlns:dcmitype="' << CORE_NS_DCMIT << '" xmlns:dcterms="' << CORE_NS_DCT << '" ' + str << 'xmlns:xsi="' << CORE_NS_XSI << '">' + str << '<dc:creator>' << self.creator << '</dc:creator>' + str << '<dcterms:created xsi:type="dcterms:W3CDTF">' << (created || Time.now).strftime('%Y-%m-%dT%H:%M:%S') << 'Z</dcterms:created>' str << '<cp:revision>0</cp:revision>' str << '</cp:coreProperties>' end diff --git a/lib/axlsx/drawing/area_chart.rb b/lib/axlsx/drawing/area_chart.rb index 8339c255..96711cd3 100644 --- a/lib/axlsx/drawing/area_chart.rb +++ b/lib/axlsx/drawing/area_chart.rb @@ -76,14 +76,14 @@ module Axlsx # @return [String] def to_xml_string(str = +'') super(str) do - str << (+"<c:" << node_name << ">") - str << (+'<c:grouping val="' << grouping.to_s << '"/>') - str << (+'<c:varyColors val="' << vary_colors.to_s << '"/>') + str << "<c:" << node_name << ">" + str << '<c:grouping val="' << grouping.to_s << '"/>' + str << '<c:varyColors val="' << vary_colors.to_s << '"/>' @series.each { |ser| ser.to_xml_string(str) } @d_lbls.to_xml_string(str) if @d_lbls yield if block_given? axes.to_xml_string(str, :ids => true) - str << (+"</c:" << node_name << ">") + str << "</c:" << node_name << ">" axes.to_xml_string(str) end end diff --git a/lib/axlsx/drawing/area_series.rb b/lib/axlsx/drawing/area_series.rb index 9d87d078..5cebd7da 100644 --- a/lib/axlsx/drawing/area_series.rb +++ b/lib/axlsx/drawing/area_series.rb @@ -75,11 +75,11 @@ module Axlsx super(str) do if color str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/>') + str << '<a:srgbClr val="' << color << '"/>' str << '</a:solidFill>' str << '<a:ln w="28800">' str << '<a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/>') + str << '<a:srgbClr val="' << color << '"/>' str << '</a:solidFill>' str << '</a:ln>' str << '<a:round/>' @@ -94,7 +94,7 @@ module Axlsx @labels.to_xml_string(str) unless @labels.nil? @data.to_xml_string(str) unless @data.nil? - str << (+'<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>') + str << '<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>' end end diff --git a/lib/axlsx/drawing/axes.rb b/lib/axlsx/drawing/axes.rb index 0baad85f..eb4728c6 100644 --- a/lib/axlsx/drawing/axes.rb +++ b/lib/axlsx/drawing/axes.rb @@ -33,7 +33,7 @@ module Axlsx if options[:ids] # CatAxis must come first in the XML (for Microsoft Excel at least) sorted = axes.sort_by { |name, axis| axis.kind_of?(CatAxis) ? 0 : 1 } - sorted.each { |axis| str << (+'<c:axId val="' << axis[1].id.to_s << '"/>') } + sorted.each { |axis| str << '<c:axId val="' << axis[1].id.to_s << '"/>' } else axes.each { |axis| axis[1].to_xml_string(str) } end diff --git a/lib/axlsx/drawing/axis.rb b/lib/axlsx/drawing/axis.rb index 38e57da5..10ddce1f 100644 --- a/lib/axlsx/drawing/axis.rb +++ b/lib/axlsx/drawing/axis.rb @@ -149,10 +149,10 @@ module Axlsx # @param [String] str # @return [String] def to_xml_string(str = +'') - str << (+'<c:axId val="' << @id.to_s << '"/>') + str << '<c:axId val="' << @id.to_s << '"/>' @scaling.to_xml_string str - str << (+'<c:delete val="' << @delete.to_s << '"/>') - str << (+'<c:axPos val="' << @ax_pos.to_s << '"/>') + str << '<c:delete val="' << @delete.to_s << '"/>' + str << '<c:axPos val="' << @ax_pos.to_s << '"/>' str << '<c:majorGridlines>' # TODO: shape properties need to be extracted into a class if gridlines == false @@ -167,21 +167,21 @@ module Axlsx # Need to set sourceLinked to 0 if we're setting a format code on this row # otherwise it will never take, as it will always prefer the 'General' formatting # of the cells themselves - str << (+'<c:numFmt formatCode="' << @format_code << '" sourceLinked="' << (@format_code.eql?('General') ? '1' : '0') << '"/>') + str << '<c:numFmt formatCode="' << @format_code << '" sourceLinked="' << (@format_code.eql?('General') ? '1' : '0') << '"/>' str << '<c:majorTickMark val="none"/>' str << '<c:minorTickMark val="none"/>' - str << (+'<c:tickLblPos val="' << @tick_lbl_pos.to_s << '"/>') + str << '<c:tickLblPos val="' << @tick_lbl_pos.to_s << '"/>' # TODO: this is also being used for series colors # time to extract this into a class spPr - Shape Properties if @color str << '<c:spPr><a:ln><a:solidFill>' - str << (+'<a:srgbClr val="' << @color << '"/>') + str << '<a:srgbClr val="' << @color << '"/>' str << '</a:solidFill></a:ln></c:spPr>' end # some potential value in implementing this in full. Very detailed! - str << (+'<c:txPr><a:bodyPr rot="' << @label_rotation.to_s << '"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr/></a:p></c:txPr>') - str << (+'<c:crossAx val="' << @cross_axis.id.to_s << '"/>') - str << (+'<c:crosses val="' << @crosses.to_s << '"/>') + str << '<c:txPr><a:bodyPr rot="' << @label_rotation.to_s << '"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr/></a:p></c:txPr>' + str << '<c:crossAx val="' << @cross_axis.id.to_s << '"/>' + str << '<c:crosses val="' << @crosses.to_s << '"/>' end end end diff --git a/lib/axlsx/drawing/bar_3D_chart.rb b/lib/axlsx/drawing/bar_3D_chart.rb index 37ac7dab..fe347d7c 100644 --- a/lib/axlsx/drawing/bar_3D_chart.rb +++ b/lib/axlsx/drawing/bar_3D_chart.rb @@ -123,14 +123,14 @@ module Axlsx def to_xml_string(str = +'') super(str) do str << '<c:bar3DChart>' - str << (+'<c:barDir val="' << bar_dir.to_s << '"/>') - str << (+'<c:grouping val="' << grouping.to_s << '"/>') - str << (+'<c:varyColors val="' << vary_colors.to_s << '"/>') + str << '<c:barDir val="' << bar_dir.to_s << '"/>' + str << '<c:grouping val="' << grouping.to_s << '"/>' + str << '<c:varyColors val="' << vary_colors.to_s << '"/>' @series.each { |ser| ser.to_xml_string(str) } @d_lbls.to_xml_string(str) if @d_lbls - str << (+'<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil? - str << (+'<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil? - str << (+'<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil? + str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil? + str << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil? + str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil? axes.to_xml_string(str, :ids => true) str << '</c:bar3DChart>' axes.to_xml_string(str) diff --git a/lib/axlsx/drawing/bar_chart.rb b/lib/axlsx/drawing/bar_chart.rb index eca54dfc..237ffdb3 100644 --- a/lib/axlsx/drawing/bar_chart.rb +++ b/lib/axlsx/drawing/bar_chart.rb @@ -113,14 +113,14 @@ module Axlsx def to_xml_string(str = +'') super(str) do str << '<c:barChart>' - str << (+'<c:barDir val="' << bar_dir.to_s << '"/>') - str << (+'<c:grouping val="' << grouping.to_s << '"/>') - str << (+'<c:varyColors val="' << vary_colors.to_s << '"/>') + str << '<c:barDir val="' << bar_dir.to_s << '"/>' + str << '<c:grouping val="' << grouping.to_s << '"/>' + str << '<c:varyColors val="' << vary_colors.to_s << '"/>' @series.each { |ser| ser.to_xml_string(str) } @d_lbls.to_xml_string(str) if @d_lbls - str << (+'<c:overlap val="' << @overlap.to_s << '"/>') unless @overlap.nil? - str << (+'<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil? - str << (+'<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil? + str << '<c:overlap val="' << @overlap.to_s << '"/>' unless @overlap.nil? + str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil? + str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil? axes.to_xml_string(str, :ids => true) str << '</c:barChart>' axes.to_xml_string(str) diff --git a/lib/axlsx/drawing/bar_series.rb b/lib/axlsx/drawing/bar_series.rb index c744175f..483a0c43 100644 --- a/lib/axlsx/drawing/bar_series.rb +++ b/lib/axlsx/drawing/bar_series.rb @@ -62,15 +62,15 @@ module Axlsx super(str) do colors.each_with_index do |c, index| str << '<c:dPt>' - str << (+'<c:idx val="' << index.to_s << '"/>') + str << '<c:idx val="' << index.to_s << '"/>' str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << c << '"/>') + str << '<a:srgbClr val="' << c << '"/>' str << '</a:solidFill></c:spPr></c:dPt>' end if series_color str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << series_color << '"/>') + str << '<a:srgbClr val="' << series_color << '"/>' str << '</a:solidFill>' str << '</c:spPr>' end @@ -78,7 +78,7 @@ module Axlsx @labels.to_xml_string(str) unless @labels.nil? @data.to_xml_string(str) unless @data.nil? # this is actually only required for shapes other than box - str << (+'<c:shape val="' << shape.to_s << '"></c:shape>') + str << '<c:shape val="' << shape.to_s << '"></c:shape>' end end diff --git a/lib/axlsx/drawing/bubble_chart.rb b/lib/axlsx/drawing/bubble_chart.rb index b4932042..727f89a7 100644 --- a/lib/axlsx/drawing/bubble_chart.rb +++ b/lib/axlsx/drawing/bubble_chart.rb @@ -38,7 +38,7 @@ module Axlsx def to_xml_string(str = +'') super(str) do str << '<c:bubbleChart>' - str << (+'<c:varyColors val="' << vary_colors.to_s << '"/>') + str << '<c:varyColors val="' << vary_colors.to_s << '"/>' @series.each { |ser| ser.to_xml_string(str) } d_lbls.to_xml_string(str) if @d_lbls axes.to_xml_string(str, :ids => true) diff --git a/lib/axlsx/drawing/bubble_series.rb b/lib/axlsx/drawing/bubble_series.rb index 25335270..b5903259 100644 --- a/lib/axlsx/drawing/bubble_series.rb +++ b/lib/axlsx/drawing/bubble_series.rb @@ -46,10 +46,10 @@ module Axlsx # needs to override the super color here to push in ln/and something else! if color str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/>') + str << '<a:srgbClr val="' << color << '"/>' str << '</a:solidFill>' str << '<a:ln><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>') + str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>' str << '</c:spPr>' end @xData.to_xml_string(str) unless @xData.nil? diff --git a/lib/axlsx/drawing/cat_axis.rb b/lib/axlsx/drawing/cat_axis.rb index a36f62d1..2f40f29f 100644 --- a/lib/axlsx/drawing/cat_axis.rb +++ b/lib/axlsx/drawing/cat_axis.rb @@ -71,11 +71,11 @@ module Axlsx def to_xml_string(str = +'') str << '<c:catAx>' super(str) - str << (+'<c:auto val="' << @auto.to_s << '"/>') - str << (+'<c:lblAlgn val="' << @lbl_algn.to_s << '"/>') - str << (+'<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>') - str << (+'<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>') - str << (+'<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>') + str << '<c:auto val="' << @auto.to_s << '"/>' + str << '<c:lblAlgn val="' << @lbl_algn.to_s << '"/>' + str << '<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>' + str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>' + str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>' str << '</c:catAx>' end end diff --git a/lib/axlsx/drawing/chart.rb b/lib/axlsx/drawing/chart.rb index 300a5086..436319fb 100644 --- a/lib/axlsx/drawing/chart.rb +++ b/lib/axlsx/drawing/chart.rb @@ -206,13 +206,13 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">') - str << (+'<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>') - str << (+'<c:roundedCorners val="' << rounded_corners.to_s << '"/>') - str << (+'<c:style val="' << style.to_s << '"/>') + str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">' + str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>' + str << '<c:roundedCorners val="' << rounded_corners.to_s << '"/>' + str << '<c:style val="' << style.to_s << '"/>' str << '<c:chart>' @title.to_xml_string(str) unless @title.empty? - str << (+'<c:autoTitleDeleted val="' << @title.nil?.to_s << '"/>') + str << '<c:autoTitleDeleted val="' << @title.nil?.to_s << '"/>' @view_3D.to_xml_string(str) if @view_3D str << '<c:floor><c:thickness val="0"/></c:floor>' str << '<c:sideWall><c:thickness val="0"/></c:sideWall>' @@ -223,13 +223,13 @@ module Axlsx str << '</c:plotArea>' if @show_legend str << '<c:legend>' - str << (+'<c:legendPos val="' << @legend_position.to_s << '"/>') + str << '<c:legendPos val="' << @legend_position.to_s << '"/>' str << '<c:layout/>' str << '<c:overlay val="0"/>' str << '</c:legend>' end - str << (+'<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>') - str << (+'<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>') + str << '<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>' + str << '<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>' str << '<c:showDLblsOverMax val="1"/>' str << '</c:chart>' if bg_color diff --git a/lib/axlsx/drawing/drawing.rb b/lib/axlsx/drawing/drawing.rb index 7be169be..ef532974 100644 --- a/lib/axlsx/drawing/drawing.rb +++ b/lib/axlsx/drawing/drawing.rb @@ -157,7 +157,7 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' - str << (+'<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">') + str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">' anchors.each { |anchor| anchor.to_xml_string(str) } str << '</xdr:wsDr>' end diff --git a/lib/axlsx/drawing/graphic_frame.rb b/lib/axlsx/drawing/graphic_frame.rb index 7d0e818c..4e5b4c36 100644 --- a/lib/axlsx/drawing/graphic_frame.rb +++ b/lib/axlsx/drawing/graphic_frame.rb @@ -35,7 +35,7 @@ module Axlsx # macro attribute should be optional! str << '<xdr:graphicFrame>' str << '<xdr:nvGraphicFramePr>' - str << (+'<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>') + str << '<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>' str << '<xdr:cNvGraphicFramePr/>' str << '</xdr:nvGraphicFramePr>' str << '<xdr:xfrm>' @@ -43,8 +43,8 @@ module Axlsx str << '<a:ext cx="0" cy="0"/>' str << '</xdr:xfrm>' str << '<a:graphic>' - str << (+'<a:graphicData uri="' << XML_NS_C << '">') - str << (+'<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>') + str << '<a:graphicData uri="' << XML_NS_C << '">' + str << '<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>' str << '</a:graphicData>' str << '</a:graphic>' str << '</xdr:graphicFrame>' diff --git a/lib/axlsx/drawing/line_3D_chart.rb b/lib/axlsx/drawing/line_3D_chart.rb index 6a659550..f9f9606e 100644 --- a/lib/axlsx/drawing/line_3D_chart.rb +++ b/lib/axlsx/drawing/line_3D_chart.rb @@ -59,7 +59,7 @@ module Axlsx # @return [String] def to_xml_string(str = +'') super(str) do - str << (+'<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil? + str << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil? end end end diff --git a/lib/axlsx/drawing/line_chart.rb b/lib/axlsx/drawing/line_chart.rb index ab2012c7..21327820 100644 --- a/lib/axlsx/drawing/line_chart.rb +++ b/lib/axlsx/drawing/line_chart.rb @@ -76,14 +76,14 @@ module Axlsx # @return [String] def to_xml_string(str = +'') super(str) do - str << (+"<c:" << node_name << ">") - str << (+'<c:grouping val="' << grouping.to_s << '"/>') - str << (+'<c:varyColors val="' << vary_colors.to_s << '"/>') + str << "<c:" << node_name << ">" + str << '<c:grouping val="' << grouping.to_s << '"/>' + str << '<c:varyColors val="' << vary_colors.to_s << '"/>' @series.each { |ser| ser.to_xml_string(str) } @d_lbls.to_xml_string(str) if @d_lbls yield if block_given? axes.to_xml_string(str, :ids => true) - str << (+"</c:" << node_name << ">") + str << "</c:" << node_name << ">" axes.to_xml_string(str) end end diff --git a/lib/axlsx/drawing/line_series.rb b/lib/axlsx/drawing/line_series.rb index 42c86873..bbd3957e 100644 --- a/lib/axlsx/drawing/line_series.rb +++ b/lib/axlsx/drawing/line_series.rb @@ -75,11 +75,11 @@ module Axlsx super(str) do if color str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/>') + str << '<a:srgbClr val="' << color << '"/>' str << '</a:solidFill>' str << '<a:ln w="28800">' str << '<a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/>') + str << '<a:srgbClr val="' << color << '"/>' str << '</a:solidFill>' str << '</a:ln>' str << '<a:round/>' @@ -94,7 +94,7 @@ module Axlsx @labels.to_xml_string(str) unless @labels.nil? @data.to_xml_string(str) unless @data.nil? - str << (+'<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>') + str << '<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>' end end diff --git a/lib/axlsx/drawing/marker.rb b/lib/axlsx/drawing/marker.rb index 987af605..a1801eb9 100644 --- a/lib/axlsx/drawing/marker.rb +++ b/lib/axlsx/drawing/marker.rb @@ -58,7 +58,7 @@ module Axlsx # @return [String] def to_xml_string(str = +'') [:col, :colOff, :row, :rowOff].each do |k| - str << (+'<xdr:' << k.to_s << '>' << self.send(k).to_s << '</xdr:' << k.to_s << '>') + str << '<xdr:' << k.to_s << '>' << self.send(k).to_s << '</xdr:' << k.to_s << '>' end end diff --git a/lib/axlsx/drawing/num_data.rb b/lib/axlsx/drawing/num_data.rb index 79108777..fdcf505c 100644 --- a/lib/axlsx/drawing/num_data.rb +++ b/lib/axlsx/drawing/num_data.rb @@ -37,13 +37,13 @@ module Axlsx # serialize the object def to_xml_string(str = +'') - str << (+'<c:' << @tag_name.to_s << '>') - str << (+'<c:formatCode>' << format_code.to_s << '</c:formatCode>') - str << (+'<c:ptCount val="' << @pt.size.to_s << '"/>') + str << '<c:' << @tag_name.to_s << '>' + str << '<c:formatCode>' << format_code.to_s << '</c:formatCode>' + str << '<c:ptCount val="' << @pt.size.to_s << '"/>' @pt.each_with_index do |num_val, index| num_val.to_xml_string index, str end - str << (+'</c:' << @tag_name.to_s << '>') + str << '</c:' << @tag_name.to_s << '>' end end end diff --git a/lib/axlsx/drawing/num_data_source.rb b/lib/axlsx/drawing/num_data_source.rb index af5e31ab..0845ad31 100644 --- a/lib/axlsx/drawing/num_data_source.rb +++ b/lib/axlsx/drawing/num_data_source.rb @@ -45,16 +45,16 @@ module Axlsx # serialize the object # @param [String] str def to_xml_string(str = +'') - str << (+'<c:' << tag_name.to_s << '>') + str << '<c:' << tag_name.to_s << '>' if @f - str << (+'<c:' << @ref_tag_name.to_s << '>') - str << (+'<c:f>' << @f.to_s << '</c:f>') + str << '<c:' << @ref_tag_name.to_s << '>' + str << '<c:f>' << @f.to_s << '</c:f>' end @data.to_xml_string str if @f - str << (+'</c:' << @ref_tag_name.to_s << '>') + str << '</c:' << @ref_tag_name.to_s << '>' end - str << (+'</c:' << tag_name.to_s << '>') + str << '</c:' << tag_name.to_s << '>' end end end diff --git a/lib/axlsx/drawing/num_val.rb b/lib/axlsx/drawing/num_val.rb index b614f561..19829a30 100644 --- a/lib/axlsx/drawing/num_val.rb +++ b/lib/axlsx/drawing/num_val.rb @@ -26,7 +26,7 @@ module Axlsx def to_xml_string(idx, str = +'') Axlsx::validate_unsigned_int(idx) if !v.to_s.empty? - str << (+'<c:pt idx="' << idx.to_s << '" formatCode="' << format_code << '"><c:v>' << v.to_s << '</c:v></c:pt>') + str << '<c:pt idx="' << idx.to_s << '" formatCode="' << format_code << '"><c:v>' << v.to_s << '</c:v></c:pt>' end end end diff --git a/lib/axlsx/drawing/one_cell_anchor.rb b/lib/axlsx/drawing/one_cell_anchor.rb index f98d65a1..59d0d972 100644 --- a/lib/axlsx/drawing/one_cell_anchor.rb +++ b/lib/axlsx/drawing/one_cell_anchor.rb @@ -79,7 +79,7 @@ module Axlsx str << '<xdr:from>' from.to_xml_string(str) str << '</xdr:from>' - str << (+'<xdr:ext cx="' << ext[:cx].to_s << '" cy="' << ext[:cy].to_s << '"/>') + str << '<xdr:ext cx="' << ext[:cx].to_s << '" cy="' << ext[:cy].to_s << '"/>' @object.to_xml_string(str) str << '<xdr:clientData/>' str << '</xdr:oneCellAnchor>' diff --git a/lib/axlsx/drawing/pic.rb b/lib/axlsx/drawing/pic.rb index eec92a9c..77a051c3 100644 --- a/lib/axlsx/drawing/pic.rb +++ b/lib/axlsx/drawing/pic.rb @@ -192,7 +192,7 @@ module Axlsx def to_xml_string(str = +'') str << '<xdr:pic>' str << '<xdr:nvPicPr>' - str << (+'<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">') + str << '<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">' hyperlink.to_xml_string(str) if hyperlink.is_a?(Hyperlink) str << '</xdr:cNvPr><xdr:cNvPicPr>' picture_locking.to_xml_string(str) diff --git a/lib/axlsx/drawing/pie_3D_chart.rb b/lib/axlsx/drawing/pie_3D_chart.rb index 1c68dbb7..aeb002d8 100644 --- a/lib/axlsx/drawing/pie_3D_chart.rb +++ b/lib/axlsx/drawing/pie_3D_chart.rb @@ -34,7 +34,7 @@ module Axlsx def to_xml_string(str = +'') super(str) do str << '<c:pie3DChart>' - str << (+'<c:varyColors val="' << vary_colors.to_s << '"/>') + str << '<c:varyColors val="' << vary_colors.to_s << '"/>' @series.each { |ser| ser.to_xml_string(str) } d_lbls.to_xml_string(str) if @d_lbls str << '</c:pie3DChart>' diff --git a/lib/axlsx/drawing/pie_series.rb b/lib/axlsx/drawing/pie_series.rb index 52cd2b66..f3edd1e9 100644 --- a/lib/axlsx/drawing/pie_series.rb +++ b/lib/axlsx/drawing/pie_series.rb @@ -49,9 +49,9 @@ module Axlsx str << '<c:explosion val="' + @explosion.to_s + '"/>' unless @explosion.nil? colors.each_with_index do |c, index| str << '<c:dPt>' - str << (+'<c:idx val="' << index.to_s << '"/>') + str << '<c:idx val="' << index.to_s << '"/>' str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << c << '"/>') + str << '<a:srgbClr val="' << c << '"/>' str << '</a:solidFill></c:spPr></c:dPt>' end @labels.to_xml_string str unless @labels.nil? diff --git a/lib/axlsx/drawing/scaling.rb b/lib/axlsx/drawing/scaling.rb index fc4b9d10..4d5a9d2a 100644 --- a/lib/axlsx/drawing/scaling.rb +++ b/lib/axlsx/drawing/scaling.rb @@ -49,10 +49,10 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<c:scaling>' - str << (+'<c:logBase val="' << @logBase.to_s << '"/>') unless @logBase.nil? - str << (+'<c:orientation val="' << @orientation.to_s << '"/>') unless @orientation.nil? - str << (+'<c:min val="' << @min.to_s << '"/>') unless @min.nil? - str << (+'<c:max val="' << @max.to_s << '"/>') unless @max.nil? + str << '<c:logBase val="' << @logBase.to_s << '"/>' unless @logBase.nil? + str << '<c:orientation val="' << @orientation.to_s << '"/>' unless @orientation.nil? + str << '<c:min val="' << @min.to_s << '"/>' unless @min.nil? + str << '<c:max val="' << @max.to_s << '"/>' unless @max.nil? str << '</c:scaling>' end end diff --git a/lib/axlsx/drawing/scatter_chart.rb b/lib/axlsx/drawing/scatter_chart.rb index b518c594..60b7c5b3 100644 --- a/lib/axlsx/drawing/scatter_chart.rb +++ b/lib/axlsx/drawing/scatter_chart.rb @@ -52,8 +52,8 @@ module Axlsx def to_xml_string(str = +'') super(str) do str << '<c:scatterChart>' - str << (+'<c:scatterStyle val="' << scatter_style.to_s << '"/>') - str << (+'<c:varyColors val="' << vary_colors.to_s << '"/>') + str << '<c:scatterStyle val="' << scatter_style.to_s << '"/>' + str << '<c:varyColors val="' << vary_colors.to_s << '"/>' @series.each { |ser| ser.to_xml_string(str) } d_lbls.to_xml_string(str) if @d_lbls axes.to_xml_string(str, :ids => true) diff --git a/lib/axlsx/drawing/scatter_series.rb b/lib/axlsx/drawing/scatter_series.rb index e52306f5..9c6e12f2 100644 --- a/lib/axlsx/drawing/scatter_series.rb +++ b/lib/axlsx/drawing/scatter_series.rb @@ -85,17 +85,17 @@ module Axlsx # needs to override the super color here to push in ln/and something else! if color str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/>') + str << '<a:srgbClr val="' << color << '"/>' str << '</a:solidFill>' str << '<a:ln><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>') + str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>' str << '</c:spPr>' str << '<c:marker>' str << '<c:spPr><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/>') + str << '<a:srgbClr val="' << color << '"/>' str << '</a:solidFill>' str << '<a:ln><a:solidFill>' - str << (+'<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>') + str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>' str << '</c:spPr>' str << marker_symbol_xml str << '</c:marker>' @@ -110,7 +110,7 @@ module Axlsx end @xData.to_xml_string(str) unless @xData.nil? @yData.to_xml_string(str) unless @yData.nil? - str << (+'<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>') + str << '<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>' end str end diff --git a/lib/axlsx/drawing/ser_axis.rb b/lib/axlsx/drawing/ser_axis.rb index 63628b14..4fea58e5 100644 --- a/lib/axlsx/drawing/ser_axis.rb +++ b/lib/axlsx/drawing/ser_axis.rb @@ -35,8 +35,8 @@ module Axlsx def to_xml_string(str = +'') str << '<c:serAx>' super(str) - str << (+'<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>') unless @tick_lbl_skip.nil? - str << (+'<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>') unless @tick_mark_skip.nil? + str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>' unless @tick_lbl_skip.nil? + str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>' unless @tick_mark_skip.nil? str << '</c:serAx>' end end diff --git a/lib/axlsx/drawing/series.rb b/lib/axlsx/drawing/series.rb index a468a6b7..5a91dd44 100644 --- a/lib/axlsx/drawing/series.rb +++ b/lib/axlsx/drawing/series.rb @@ -59,8 +59,8 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<c:ser>' - str << (+'<c:idx val="' << index.to_s << '"/>') - str << (+'<c:order val="' << (order || index).to_s << '"/>') + str << '<c:idx val="' << index.to_s << '"/>' + str << '<c:order val="' << (order || index).to_s << '"/>' title.to_xml_string(str) unless title.nil? yield if block_given? str << '</c:ser>' diff --git a/lib/axlsx/drawing/series_title.rb b/lib/axlsx/drawing/series_title.rb index 2887495c..08e5e909 100644 --- a/lib/axlsx/drawing/series_title.rb +++ b/lib/axlsx/drawing/series_title.rb @@ -11,11 +11,11 @@ module Axlsx str << '<c:tx>' str << '<c:strRef>' - str << (+'<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>') + str << '<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>' str << '<c:strCache>' str << '<c:ptCount val="1"/>' str << '<c:pt idx="0">' - str << (+'<c:v>' << clean_value << '</c:v>') + str << '<c:v>' << clean_value << '</c:v>' str << '</c:pt>' str << '</c:strCache>' str << '</c:strRef>' diff --git a/lib/axlsx/drawing/str_data.rb b/lib/axlsx/drawing/str_data.rb index 0765671f..5ab15c39 100644 --- a/lib/axlsx/drawing/str_data.rb +++ b/lib/axlsx/drawing/str_data.rb @@ -28,12 +28,12 @@ module Axlsx # serialize the object def to_xml_string(str = +'') - str << (+'<c:' << @tag_name.to_s << '>') - str << (+'<c:ptCount val="' << @pt.size.to_s << '"/>') + str << '<c:' << @tag_name.to_s << '>' + str << '<c:ptCount val="' << @pt.size.to_s << '"/>' @pt.each_with_index do |value, index| value.to_xml_string index, str end - str << (+'</c:' << @tag_name.to_s << '>') + str << '</c:' << @tag_name.to_s << '>' end end end diff --git a/lib/axlsx/drawing/str_val.rb b/lib/axlsx/drawing/str_val.rb index 821c7037..d09e6ce8 100644 --- a/lib/axlsx/drawing/str_val.rb +++ b/lib/axlsx/drawing/str_val.rb @@ -26,7 +26,7 @@ module Axlsx def to_xml_string(idx, str = +'') Axlsx::validate_unsigned_int(idx) if !v.to_s.empty? - str << (+'<c:pt idx="' << idx.to_s << '"><c:v>' << ::CGI.escapeHTML(v.to_s) << '</c:v></c:pt>') + str << '<c:pt idx="' << idx.to_s << '"><c:v>' << ::CGI.escapeHTML(v.to_s) << '</c:v></c:pt>' end end end diff --git a/lib/axlsx/drawing/title.rb b/lib/axlsx/drawing/title.rb index 7bd41b17..c3ca9632 100644 --- a/lib/axlsx/drawing/title.rb +++ b/lib/axlsx/drawing/title.rb @@ -76,11 +76,11 @@ module Axlsx str << '<c:tx>' if @cell.is_a?(Cell) str << '<c:strRef>' - str << (+'<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>') + str << '<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>' str << '<c:strCache>' str << '<c:ptCount val="1"/>' str << '<c:pt idx="0">' - str << (+'<c:v>' << clean_value << '</c:v>') + str << '<c:v>' << clean_value << '</c:v>' str << '</c:pt>' str << '</c:strCache>' str << '</c:strRef>' @@ -90,8 +90,8 @@ module Axlsx str << '<a:lstStyle/>' str << '<a:p>' str << '<a:r>' - str << (+'<a:rPr sz="' << @text_size.to_s << '"/>') - str << (+'<a:t>' << clean_value << '</a:t>') + str << '<a:rPr sz="' << @text_size.to_s << '"/>' + str << '<a:t>' << clean_value << '</a:t>' str << '</a:r>' str << '</a:p>' str << '</c:rich>' diff --git a/lib/axlsx/drawing/val_axis.rb b/lib/axlsx/drawing/val_axis.rb index 1200eb5d..3ae8f73a 100644 --- a/lib/axlsx/drawing/val_axis.rb +++ b/lib/axlsx/drawing/val_axis.rb @@ -29,7 +29,7 @@ module Axlsx def to_xml_string(str = +'') str << '<c:valAx>' super(str) - str << (+'<c:crossBetween val="' << @cross_between.to_s << '"/>') + str << '<c:crossBetween val="' << @cross_between.to_s << '"/>' str << '</c:valAx>' end end diff --git a/lib/axlsx/rels/relationship.rb b/lib/axlsx/rels/relationship.rb index d9393b15..e379fa41 100644 --- a/lib/axlsx/rels/relationship.rb +++ b/lib/axlsx/rels/relationship.rb @@ -105,7 +105,7 @@ module Axlsx def to_xml_string(str = +'') h = Axlsx.instance_values_for(self).reject { |k, _| k == "source_obj" } str << '<Relationship ' - str << (h.map { |key, value| +'' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"' }.join(' ')) + h.each { |key, value| str << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '" ' } str << '/>' end diff --git a/lib/axlsx/rels/relationships.rb b/lib/axlsx/rels/relationships.rb index ec5b16e9..3aa9c1bf 100644 --- a/lib/axlsx/rels/relationships.rb +++ b/lib/axlsx/rels/relationships.rb @@ -23,7 +23,7 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<Relationships xmlns="' << RELS_R << '">') + str << '<Relationships xmlns="' << RELS_R << '">' each { |rel| rel.to_xml_string(str) } str << '</Relationships>' end diff --git a/lib/axlsx/stylesheet/border_pr.rb b/lib/axlsx/stylesheet/border_pr.rb index 154b25f4..ad4e29fa 100644 --- a/lib/axlsx/stylesheet/border_pr.rb +++ b/lib/axlsx/stylesheet/border_pr.rb @@ -63,9 +63,9 @@ module Axlsx # @param [String] str # @return [String] def to_xml_string(str = +'') - str << (+'<' << @name.to_s << ' style="' << @style.to_s << '">') + str << '<' << @name.to_s << ' style="' << @style.to_s << '">' @color.to_xml_string(str) if @color.is_a?(Color) - str << (+'</' << @name.to_s << '>') + str << '</' << @name.to_s << '>' end end end diff --git a/lib/axlsx/stylesheet/font.rb b/lib/axlsx/stylesheet/font.rb index 463b8fc0..8b183b6e 100644 --- a/lib/axlsx/stylesheet/font.rb +++ b/lib/axlsx/stylesheet/font.rb @@ -151,7 +151,7 @@ module Axlsx def to_xml_string(str = +'') str << '<font>' Axlsx.instance_values_for(self).each do |k, v| - v.is_a?(Color) ? v.to_xml_string(str) : (str << (+'<' << k.to_s << ' val="' << Axlsx.booleanize(v).to_s << '"/>')) + v.is_a?(Color) ? v.to_xml_string(str) : (str << '<' << k.to_s << ' val="' << Axlsx.booleanize(v).to_s << '"/>') end str << '</font>' end diff --git a/lib/axlsx/stylesheet/gradient_stop.rb b/lib/axlsx/stylesheet/gradient_stop.rb index 83f39a55..dd0ea00f 100644 --- a/lib/axlsx/stylesheet/gradient_stop.rb +++ b/lib/axlsx/stylesheet/gradient_stop.rb @@ -30,7 +30,7 @@ module Axlsx # @param [String] str # @return [String] def to_xml_string(str = +'') - str << (+'<stop position="' << position.to_s << '">') + str << '<stop position="' << position.to_s << '">' self.color.to_xml_string(str) str << '</stop>' end diff --git a/lib/axlsx/stylesheet/pattern_fill.rb b/lib/axlsx/stylesheet/pattern_fill.rb index cabce9f5..9f92dc00 100644 --- a/lib/axlsx/stylesheet/pattern_fill.rb +++ b/lib/axlsx/stylesheet/pattern_fill.rb @@ -59,7 +59,7 @@ module Axlsx # @param [String] str # @return [String] def to_xml_string(str = +'') - str << (+'<patternFill patternType="' << patternType.to_s << '">') + str << '<patternFill patternType="' << patternType.to_s << '">' if fgColor.is_a?(Color) fgColor.to_xml_string str, "fgColor" end diff --git a/lib/axlsx/stylesheet/styles.rb b/lib/axlsx/stylesheet/styles.rb index 809630f2..7b44c023 100644 --- a/lib/axlsx/stylesheet/styles.rb +++ b/lib/axlsx/stylesheet/styles.rb @@ -486,7 +486,7 @@ module Axlsx # @param [String] str # @return [String] def to_xml_string(str = +'') - str << (+'<styleSheet xmlns="' << XML_NS << '">') + str << '<styleSheet xmlns="' << XML_NS << '">' instance_vals = Axlsx.instance_values_for(self) [:numFmts, :fonts, :fills, :borders, :cellStyleXfs, :cellXfs, :cellStyles, :dxfs, :tableStyles].each do |key| instance_vals[key.to_s].to_xml_string(str) unless instance_vals[key.to_s].nil? diff --git a/lib/axlsx/util/simple_typed_list.rb b/lib/axlsx/util/simple_typed_list.rb index 2bd6b648..60da0372 100644 --- a/lib/axlsx/util/simple_typed_list.rb +++ b/lib/axlsx/util/simple_typed_list.rb @@ -174,9 +174,9 @@ module Axlsx def to_xml_string(str = +'') classname = @allowed_types[0].name.split('::').last el_name = serialize_as.to_s || (classname[0, 1].downcase + classname[1..-1]) - str << (+'<' << el_name << ' count="' << size.to_s << '">') + str << '<' << el_name << ' count="' << size.to_s << '">' each { |item| item.to_xml_string(str) } - str << (+'</' << el_name << '>') + str << '</' << el_name << '>' end end end diff --git a/lib/axlsx/workbook/defined_name.rb b/lib/axlsx/workbook/defined_name.rb index 4ddcff2c..38669076 100644 --- a/lib/axlsx/workbook/defined_name.rb +++ b/lib/axlsx/workbook/defined_name.rb @@ -123,9 +123,9 @@ module Axlsx def to_xml_string(str = +'') raise ArgumentError, 'you must specify the name for this defined name. Please read the documentation for Axlsx::DefinedName for more details' unless name - str << (+'<definedName ' << 'name="' << name << '" ') + str << '<definedName ' << 'name="' << name << '" ' serialized_attributes str - str << (+'>' << @formula << '</definedName>') + str << '>' << @formula << '</definedName>' end end end diff --git a/lib/axlsx/workbook/shared_strings_table.rb b/lib/axlsx/workbook/shared_strings_table.rb index 17007b08..a8086f3e 100644 --- a/lib/axlsx/workbook/shared_strings_table.rb +++ b/lib/axlsx/workbook/shared_strings_table.rb @@ -47,9 +47,9 @@ module Axlsx # @return [String] def to_xml_string(str = +'') Axlsx::sanitize(@shared_xml_string) - str << (+'<?xml version="1.0" encoding="UTF-8"?><sst xmlns="' << XML_NS << '"') - str << (+' count="' << @count.to_s << '" uniqueCount="' << unique_count.to_s << '"') - str << (+' xml:space="' << xml_space.to_s << '">' << @shared_xml_string << '</sst>') + str << '<?xml version="1.0" encoding="UTF-8"?><sst xmlns="' << XML_NS << '"' + str << ' count="' << @count.to_s << '" uniqueCount="' << unique_count.to_s << '"' + str << ' xml:space="' << xml_space.to_s << '">' << @shared_xml_string << '</sst>' end private diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb index ab16a4ed..3e4927aa 100644 --- a/lib/axlsx/workbook/workbook.rb +++ b/lib/axlsx/workbook/workbook.rb @@ -408,8 +408,8 @@ module Axlsx def to_xml_string(str = +'') add_worksheet(name: 'Sheet1') unless worksheets.size > 0 str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<workbook xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '">') - str << (+'<workbookPr date1904="' << @@date1904.to_s << '"/>') + str << '<workbook xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '">' + str << '<workbookPr date1904="' << @@date1904.to_s << '"/>' views.to_xml_string(str) str << '<sheets>' if is_reversed @@ -422,7 +422,7 @@ module Axlsx unless pivot_tables.empty? str << '<pivotCaches>' pivot_tables.each do |pivot_table| - str << (+'<pivotCache cacheId="' << pivot_table.cache_definition.cache_id.to_s << '" r:id="' << pivot_table.cache_definition.rId << '"/>') + str << '<pivotCache cacheId="' << pivot_table.cache_definition.cache_id.to_s << '" r:id="' << pivot_table.cache_definition.rId << '"/>' end str << '</pivotCaches>' end diff --git a/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb b/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb index f014eb18..16096a52 100644 --- a/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +++ b/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb @@ -88,7 +88,9 @@ module Axlsx # Serialize the object to xml def to_xml_string(str = +'') - str << "<filterColumn #{serialized_attributes}>" + str << '<filterColumn ' + serialized_attributes(str) + str << '>' @filter.to_xml_string(str) str << "</filterColumn>" end diff --git a/lib/axlsx/workbook/worksheet/auto_filter/filters.rb b/lib/axlsx/workbook/worksheet/auto_filter/filters.rb index 0fc5c968..38bafe85 100644 --- a/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +++ b/lib/axlsx/workbook/worksheet/auto_filter/filters.rb @@ -77,7 +77,9 @@ module Axlsx # Serialize the object to xml def to_xml_string(str = +'') - str << "<filters #{serialized_attributes}>" + str << '<filters ' + serialized_attributes(str) + str << '>' filter_items.each { |filter| filter.to_xml_string(str) } date_group_items.each { |date_group_item| date_group_item.to_xml_string(str) } str << '</filters>' diff --git a/lib/axlsx/workbook/worksheet/cell_serializer.rb b/lib/axlsx/workbook/worksheet/cell_serializer.rb index b4c16b57..e1bdf728 100644 --- a/lib/axlsx/workbook/worksheet/cell_serializer.rb +++ b/lib/axlsx/workbook/worksheet/cell_serializer.rb @@ -10,7 +10,7 @@ module Axlsx # @param [String] str The string to apend serialization to. # @return [String] def to_xml_string(row_index, column_index, cell, str = +'') - str << (+'<c r="' << Axlsx::cell_r(column_index, row_index) << '" s="' << cell.style.to_s << '" ') + str << '<c r="' << Axlsx::cell_r(column_index, row_index) << '" s="' << cell.style.to_s << '" ' return str << '/>' if cell.value.nil? method = cell.type @@ -30,7 +30,7 @@ module Axlsx elsif cell.contains_rich_text? cell.value.to_xml_string(str) else - str << (+'<t>' << cell.clean_value << '</t>') + str << '<t>' << cell.clean_value << '</t>' end str end @@ -88,8 +88,8 @@ module Axlsx # @param [String] str The string the serialized content will be appended to. # @return [String] def formula_serialization(cell, str = +'') - str << (+'t="str"><f>' << cell.clean_value.to_s.sub('=', '') << '</f>') - str << (+'<v>' << cell.formula_value.to_s << '</v>') unless cell.formula_value.nil? + str << 't="str"><f>' << cell.clean_value.to_s.sub('=', '') << '</f>' + str << '<v>' << cell.formula_value.to_s << '</v>' unless cell.formula_value.nil? end # Serializes cells that are type array formula @@ -97,8 +97,8 @@ module Axlsx # @param [String] str The string the serialized content will be appended to. # @return [String] def array_formula_serialization(cell, str = +'') - str << (+'t="str">' << '<f t="array" ref="' << cell.r << '">' << cell.clean_value.to_s.sub('{=', '').sub(/}$/, '') << '</f>') - str << (+'<v>' << cell.formula_value.to_s << '</v>') unless cell.formula_value.nil? + str << 't="str">' << '<f t="array" ref="' << cell.r << '">' << cell.clean_value.to_s.sub('{=', '').sub(/}$/, '') << '</f>' + str << '<v>' << cell.formula_value.to_s << '</v>' unless cell.formula_value.nil? end # Serializes cells that are type inline_string @@ -158,8 +158,8 @@ module Axlsx end def value_serialization(serialization_type, serialization_value, str = +'') - str << (+'t="' << serialization_type.to_s << '"') if serialization_type - str << (+'><v>' << serialization_value.to_s << '</v>') + str << 't="' << serialization_type.to_s << '"' if serialization_type + str << '><v>' << serialization_value.to_s << '</v>' end end end diff --git a/lib/axlsx/workbook/worksheet/col_breaks.rb b/lib/axlsx/workbook/worksheet/col_breaks.rb index 2e176f0d..58fe9e10 100644 --- a/lib/axlsx/workbook/worksheet/col_breaks.rb +++ b/lib/axlsx/workbook/worksheet/col_breaks.rb @@ -28,7 +28,7 @@ module Axlsx def to_xml_string(str = +'') return if empty? - str << (+'<colBreaks count="' << size.to_s << '" manualBreakCount="' << size.to_s << '">') + str << '<colBreaks count="' << size.to_s << '" manualBreakCount="' << size.to_s << '">' each { |brk| brk.to_xml_string(str) } str << '</colBreaks>' end diff --git a/lib/axlsx/workbook/worksheet/comment.rb b/lib/axlsx/workbook/worksheet/comment.rb index 1da779aa..ea8324d0 100644 --- a/lib/axlsx/workbook/worksheet/comment.rb +++ b/lib/axlsx/workbook/worksheet/comment.rb @@ -63,15 +63,15 @@ module Axlsx # @return [String] def to_xml_string(str = +'') author = @comments.authors[author_index] - str << (+'<comment ref="' << ref << '" authorId="' << author_index.to_s << '">') + str << '<comment ref="' << ref << '" authorId="' << author_index.to_s << '">' str << '<text>' unless author.to_s == "" str << '<r><rPr><b/><color indexed="81"/></rPr>' - str << (+"<t>" << ::CGI.escapeHTML(author.to_s) << ":\n</t></r>") + str << "<t>" << ::CGI.escapeHTML(author.to_s) << ":\n</t></r>" end str << '<r>' str << '<rPr><color indexed="81"/></rPr>' - str << (+'<t>' << ::CGI.escapeHTML(text) << '</t></r></text>') + str << '<t>' << ::CGI.escapeHTML(text) << '</t></r></text>' str << '</comment>' end diff --git a/lib/axlsx/workbook/worksheet/comments.rb b/lib/axlsx/workbook/worksheet/comments.rb index b121ccd7..cb8efdaa 100644 --- a/lib/axlsx/workbook/worksheet/comments.rb +++ b/lib/axlsx/workbook/worksheet/comments.rb @@ -66,9 +66,9 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<comments xmlns="' << XML_NS << '"><authors>') + str << '<comments xmlns="' << XML_NS << '"><authors>' authors.each do |author| - str << (+'<author>' << author.to_s << '</author>') + str << '<author>' << author.to_s << '</author>' end str << '</authors><commentList>' each do |comment| diff --git a/lib/axlsx/workbook/worksheet/conditional_formatting.rb b/lib/axlsx/workbook/worksheet/conditional_formatting.rb index bd5f5bc6..7c05c77e 100644 --- a/lib/axlsx/workbook/worksheet/conditional_formatting.rb +++ b/lib/axlsx/workbook/worksheet/conditional_formatting.rb @@ -75,8 +75,8 @@ module Axlsx # @param [String] str # @return [String] def to_xml_string(str = +'') - str << (+'<conditionalFormatting sqref="' << sqref << '">') - str << rules.collect { |rule| rule.to_xml_string }.join(' ') + str << '<conditionalFormatting sqref="' << sqref << '">' + rules.each { |rule| rule.to_xml_string(str) } str << '</conditionalFormatting>' end end diff --git a/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb b/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb index 1845f327..5d626e46 100644 --- a/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +++ b/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb @@ -208,7 +208,7 @@ module Axlsx str << '<cfRule ' serialized_attributes str str << '>' - str << (+'<formula>' << [*self.formula].join('</formula><formula>') << '</formula>') if @formula + str << '<formula>' << [*self.formula].join('</formula><formula>') << '</formula>' if @formula @color_scale.to_xml_string(str) if @color_scale && @type == :colorScale @data_bar.to_xml_string(str) if @data_bar && @type == :dataBar @icon_set.to_xml_string(str) if @icon_set && @type == :iconSet diff --git a/lib/axlsx/workbook/worksheet/data_validation.rb b/lib/axlsx/workbook/worksheet/data_validation.rb index 1b9cb46a..d5fa5908 100644 --- a/lib/axlsx/workbook/worksheet/data_validation.rb +++ b/lib/axlsx/workbook/worksheet/data_validation.rb @@ -237,12 +237,12 @@ module Axlsx valid_attributes = get_valid_attributes str << '<dataValidation ' - str << Axlsx.instance_values_for(self).map do |key, value| - +'' << key << '="' << Axlsx.booleanize(value).to_s << '"' if (valid_attributes.include?(key.to_sym) && !CHILD_ELEMENTS.include?(key.to_sym)) - end.join(' ') + Axlsx.instance_values_for(self).each do |key, value| + str << key << '="' << Axlsx.booleanize(value).to_s << '" ' if (valid_attributes.include?(key.to_sym) && !CHILD_ELEMENTS.include?(key.to_sym)) + end str << '>' - str << (+'<formula1>' << self.formula1 << '</formula1>') if @formula1 and valid_attributes.include?(:formula1) - str << (+'<formula2>' << self.formula2 << '</formula2>') if @formula2 and valid_attributes.include?(:formula2) + str << '<formula1>' << self.formula1 << '</formula1>' if @formula1 and valid_attributes.include?(:formula1) + str << '<formula2>' << self.formula2 << '</formula2>' if @formula2 and valid_attributes.include?(:formula2) str << '</dataValidation>' end diff --git a/lib/axlsx/workbook/worksheet/outline_pr.rb b/lib/axlsx/workbook/worksheet/outline_pr.rb index 4cfeea2d..1059ad18 100644 --- a/lib/axlsx/workbook/worksheet/outline_pr.rb +++ b/lib/axlsx/workbook/worksheet/outline_pr.rb @@ -28,7 +28,9 @@ module Axlsx # @param [String] str serialized output will be appended to this object if provided. # @return [String] def to_xml_string(str = +'') - str << "<outlinePr #{serialized_attributes} />" + str << '<outlinePr ' + serialized_attributes(str) + str << '/>' end end end diff --git a/lib/axlsx/workbook/worksheet/page_set_up_pr.rb b/lib/axlsx/workbook/worksheet/page_set_up_pr.rb index 9a2b778b..4291eb38 100644 --- a/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +++ b/lib/axlsx/workbook/worksheet/page_set_up_pr.rb @@ -38,7 +38,9 @@ module Axlsx # serialize to xml def to_xml_string(str = +'') - str << (+'<pageSetUpPr ' << serialized_attributes << '/>') + str << '<pageSetUpPr ' + serialized_attributes(str) + str << '/>' end end end diff --git a/lib/axlsx/workbook/worksheet/pivot_table.rb b/lib/axlsx/workbook/worksheet/pivot_table.rb index e97b8119..27065e4b 100644 --- a/lib/axlsx/workbook/worksheet/pivot_table.rb +++ b/lib/axlsx/workbook/worksheet/pivot_table.rb @@ -189,10 +189,10 @@ module Axlsx def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '"' << (data.size <= 1 ? ' dataOnRows="1"' : '') << ' applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">') + str << '<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '"' << (data.size <= 1 ? ' dataOnRows="1"' : '') << ' applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">' - str << (+'<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>') - str << (+'<pivotFields count="' << header_cells_count.to_s << '">') + str << '<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>' + str << '<pivotFields count="' << header_cells_count.to_s << '">' header_cell_values.each do |cell_value| subtotal = !no_subtotals_on_headers.include?(cell_value) @@ -205,12 +205,12 @@ module Axlsx str << '<rowFields count="1"><field x="-2"/></rowFields>' str << '<rowItems count="2"><i><x/></i> <i i="1"><x v="1"/></i></rowItems>' else - str << (+'<rowFields count="' << rows.size.to_s << '">') + str << '<rowFields count="' << rows.size.to_s << '">' rows.each do |row_value| - str << (+'<field x="' << header_index_of(row_value).to_s << '"/>') + str << '<field x="' << header_index_of(row_value).to_s << '"/>' end str << '</rowFields>' - str << (+'<rowItems count="' << rows.size.to_s << '">') + str << '<rowItems count="' << rows.size.to_s << '">' rows.size.times do |i| str << '<i/>' end @@ -229,16 +229,16 @@ module Axlsx str << '<colItems count="1"><i/></colItems>' end else - str << (+'<colFields count="' << columns.size.to_s << '">') + str << '<colFields count="' << columns.size.to_s << '">' columns.each do |column_value| - str << (+'<field x="' << header_index_of(column_value).to_s << '"/>') + str << '<field x="' << header_index_of(column_value).to_s << '"/>' end str << '</colFields>' end unless pages.empty? - str << (+'<pageFields count="' << pages.size.to_s << '">') + str << '<pageFields count="' << pages.size.to_s << '">' pages.each do |page_value| - str << (+'<pageField fld="' << header_index_of(page_value).to_s << '"/>') + str << '<pageField fld="' << header_index_of(page_value).to_s << '"/>' end str << '</pageFields>' end diff --git a/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb b/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb index d42c1fda..4928d5ac 100644 --- a/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +++ b/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb @@ -47,13 +47,13 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<pivotCacheDefinition xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '" invalid="1" refreshOnLoad="1" recordCount="0">') + str << '<pivotCacheDefinition xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '" invalid="1" refreshOnLoad="1" recordCount="0">' str << '<cacheSource type="worksheet">' - str << (+'<worksheetSource ref="' << pivot_table.range << '" sheet="' << pivot_table.data_sheet.name << '"/>') + str << '<worksheetSource ref="' << pivot_table.range << '" sheet="' << pivot_table.data_sheet.name << '"/>' str << '</cacheSource>' - str << (+'<cacheFields count="' << pivot_table.header_cells_count.to_s << '">') + str << '<cacheFields count="' << pivot_table.header_cells_count.to_s << '">' pivot_table.header_cells.each do |cell| - str << (+'<cacheField name="' << cell.clean_value << '" numFmtId="0">') + str << '<cacheField name="' << cell.clean_value << '" numFmtId="0">' str << '<sharedItems count="0">' str << '</sharedItems>' str << '</cacheField>' diff --git a/lib/axlsx/workbook/worksheet/rich_text_run.rb b/lib/axlsx/workbook/worksheet/rich_text_run.rb index ee988318..883d01d3 100644 --- a/lib/axlsx/workbook/worksheet/rich_text_run.rb +++ b/lib/axlsx/workbook/worksheet/rich_text_run.rb @@ -214,15 +214,15 @@ module Axlsx data.keys.each do |key| case key when :font_name - str << (+'<rFont val="' << font_name << '"/>') + str << '<rFont val="' << font_name << '"/>' when :color str << data[key].to_xml_string else - str << (+'<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>') + str << '<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>' end end clean_value = Axlsx::trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@value.to_s)) - str << (+'</rPr><t>' << clean_value << '</t></r>') + str << '</rPr><t>' << clean_value << '</t></r>' end private diff --git a/lib/axlsx/workbook/worksheet/row.rb b/lib/axlsx/workbook/worksheet/row.rb index 0c139164..16116835 100644 --- a/lib/axlsx/workbook/worksheet/row.rb +++ b/lib/axlsx/workbook/worksheet/row.rb @@ -90,9 +90,7 @@ module Axlsx # @return [String] def to_xml_string(r_index, str = +'') serialized_tag('row', str, :r => r_index + 1) do - tmp = +'' # time / memory tradeoff, lots of calls to rubyzip costs more time.. - each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, tmp) } - str << tmp + each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, str) } end end diff --git a/lib/axlsx/workbook/worksheet/row_breaks.rb b/lib/axlsx/workbook/worksheet/row_breaks.rb index 3e945b78..56e8c4c6 100644 --- a/lib/axlsx/workbook/worksheet/row_breaks.rb +++ b/lib/axlsx/workbook/worksheet/row_breaks.rb @@ -26,7 +26,7 @@ module Axlsx def to_xml_string(str = +'') return if empty? - str << (+'<rowBreaks count="' << self.size.to_s << '" manualBreakCount="' << self.size.to_s << '">') + str << '<rowBreaks count="' << self.size.to_s << '" manualBreakCount="' << self.size.to_s << '">' each { |brk| brk.to_xml_string(str) } str << '</rowBreaks>' end diff --git a/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb b/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb index e85cbf2c..d43198cf 100644 --- a/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +++ b/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb @@ -24,7 +24,9 @@ module Axlsx # content to. # @return [String] def to_xml_string(str = +'') - str << "<sheetCalcPr #{serialized_attributes}/>" + str << '<sheetCalcPr ' + serialized_attributes(str) + str << '/>' end end end diff --git a/lib/axlsx/workbook/worksheet/sheet_format_pr.rb b/lib/axlsx/workbook/worksheet/sheet_format_pr.rb index 227b9037..ecf8157f 100644 --- a/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +++ b/lib/axlsx/workbook/worksheet/sheet_format_pr.rb @@ -49,7 +49,9 @@ module Axlsx # @param [String] str The string this objects serialization will be appended to # @return [String] def to_xml_string(str = +'') - str << "<sheetFormatPr #{serialized_attributes}/>" + str << '<sheetFormatPr ' + serialized_attributes(str) + str << '/>' end private diff --git a/lib/axlsx/workbook/worksheet/sheet_pr.rb b/lib/axlsx/workbook/worksheet/sheet_pr.rb index f90e7d6c..86826f77 100644 --- a/lib/axlsx/workbook/worksheet/sheet_pr.rb +++ b/lib/axlsx/workbook/worksheet/sheet_pr.rb @@ -52,7 +52,9 @@ module Axlsx # @return [String] def to_xml_string(str = +'') update_properties - str << "<sheetPr #{serialized_attributes}>" + str << '<sheetPr ' + serialized_attributes(str) + str << '>' tab_color.to_xml_string(str, 'tabColor') if tab_color outline_pr.to_xml_string(str) if @outline_pr page_setup_pr.to_xml_string(str) diff --git a/lib/axlsx/workbook/worksheet/table.rb b/lib/axlsx/workbook/worksheet/table.rb index 430ef489..210833e0 100644 --- a/lib/axlsx/workbook/worksheet/table.rb +++ b/lib/axlsx/workbook/worksheet/table.rb @@ -75,12 +75,12 @@ module Axlsx # @return [String] def to_xml_string(str = +'') str << '<?xml version="1.0" encoding="UTF-8"?>' - str << (+'<table xmlns="' << XML_NS << '" id="' << (index + 1).to_s << '" name="' << @name << '" displayName="' << @name.gsub(/\s/, '_') << '" ') - str << (+'ref="' << @ref << '" totalsRowShown="0">') - str << (+'<autoFilter ref="' << @ref << '"/>') - str << (+'<tableColumns count="' << header_cells.length.to_s << '">') + str << '<table xmlns="' << XML_NS << '" id="' << (index + 1).to_s << '" name="' << @name << '" displayName="' << @name.gsub(/\s/, '_') << '" ' + str << 'ref="' << @ref << '" totalsRowShown="0">' + str << '<autoFilter ref="' << @ref << '"/>' + str << '<tableColumns count="' << header_cells.length.to_s << '">' header_cells.each_with_index do |cell, index| - str << (+'<tableColumn id ="' << (index + 1).to_s << '" name="' << cell.clean_value << '"/>') + str << '<tableColumn id ="' << (index + 1).to_s << '" name="' << cell.clean_value << '"/>' end str << '</tableColumns>' table_style_info.to_xml_string(str) diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index 0a44027f..8c3514cc 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -632,8 +632,8 @@ module Axlsx add_autofilter_defined_name_to_workbook str << '<sheet ' serialized_attributes str - str << (+'name="' << name << '" ') - str << (+'r:id="' << rId << '"></sheet>') + str << 'name="' << name << '" ' + str << 'r:id="' << rId << '"></sheet>' end # Serializes the worksheet object to an xml string |
