summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.rubocop.yml3
-rw-r--r--.rubocop_todo.yml100
-rw-r--r--Rakefile4
-rw-r--r--axlsx.gemspec6
-rw-r--r--lib/axlsx/content_type/content_type.rb6
-rw-r--r--lib/axlsx/drawing/area_series.rb2
-rw-r--r--lib/axlsx/drawing/drawing.rb98
-rw-r--r--lib/axlsx/drawing/line_series.rb2
-rw-r--r--lib/axlsx/drawing/pie_series.rb2
-rw-r--r--lib/axlsx/drawing/scatter_series.rb2
-rw-r--r--lib/axlsx/rels/relationships.rb2
-rw-r--r--lib/axlsx/stylesheet/color.rb2
-rw-r--r--lib/axlsx/stylesheet/styles.rb58
-rw-r--r--lib/axlsx/util/constants.rb14
-rw-r--r--lib/axlsx/util/simple_typed_list.rb12
-rw-r--r--lib/axlsx/workbook/workbook.rb98
-rw-r--r--lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb4
-rw-r--r--lib/axlsx/workbook/worksheet/cell.rb7
-rw-r--r--lib/axlsx/workbook/worksheet/dimension.rb2
-rw-r--r--lib/axlsx/workbook/worksheet/merged_cells.rb4
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb2
-rw-r--r--lib/caxlsx.rb2
-rwxr-xr-xtest/benchmark.rb17
-rw-r--r--test/doc_props/tc_app.rb2
-rw-r--r--test/doc_props/tc_core.rb2
-rw-r--r--test/drawing/tc_drawing.rb4
-rw-r--r--test/drawing/tc_hyperlink.rb2
-rw-r--r--test/drawing/tc_one_cell_anchor.rb2
-rw-r--r--test/drawing/tc_pic.rb8
-rw-r--r--test/util/tc_mime_type_utils.rb2
-rw-r--r--test/workbook/tc_shared_strings_table.rb2
-rw-r--r--test/workbook/worksheet/tc_rich_text_run.rb2
32 files changed, 260 insertions, 215 deletions
diff --git a/.rubocop.yml b/.rubocop.yml
index 014f6084..a825d0cb 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -34,6 +34,9 @@ Lint:
Minitest:
Enabled: true
+Naming:
+ Enabled: true
+
Performance:
Enabled: true
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 4aaaa2ed..ae3b1d2a 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -31,10 +31,6 @@ Layout/HashAlignment:
# This cop supports safe autocorrection (--autocorrect).
Lint/AmbiguousOperatorPrecedence:
Exclude:
- - 'lib/axlsx/drawing/area_series.rb'
- - 'lib/axlsx/drawing/line_series.rb'
- - 'lib/axlsx/drawing/pie_series.rb'
- - 'lib/axlsx/workbook/worksheet/dimension.rb'
- 'lib/axlsx/workbook/worksheet/sheet_protection.rb'
- 'lib/axlsx/workbook/worksheet/worksheet.rb'
@@ -60,11 +56,6 @@ Lint/DisjunctiveAssignmentInConstructor:
Exclude:
- 'lib/axlsx/drawing/num_data_source.rb'
-# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches.
-Lint/DuplicateBranch:
- Exclude:
- - 'lib/axlsx/workbook/worksheet/merged_cells.rb'
-
Lint/NonLocalExitFromIterator:
Exclude:
- 'lib/axlsx/util/validators.rb'
@@ -84,6 +75,68 @@ Lint/UnusedMethodArgument:
- 'lib/axlsx/package.rb'
- 'lib/axlsx/util/validators.rb'
+Naming/AccessorMethodName:
+ Exclude:
+ - 'lib/axlsx/drawing/axes.rb'
+ - 'lib/axlsx/workbook/worksheet/data_validation.rb'
+
+# Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, CheckDefinitionPathHierarchyRoots, Regex, IgnoreExecutableScripts, AllowedAcronyms.
+# CheckDefinitionPathHierarchyRoots: lib, spec, test, src
+# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
+Naming/FileName:
+ Exclude:
+ - 'lib/axlsx/drawing/bar_3D_chart.rb'
+ - 'lib/axlsx/drawing/line_3D_chart.rb'
+ - 'lib/axlsx/drawing/pie_3D_chart.rb'
+ - 'lib/axlsx/drawing/view_3D.rb'
+ - 'test/drawing/tc_bar_3D_chart.rb'
+ - 'test/drawing/tc_pie_3D_chart.rb'
+ - 'test/drawing/tc_view_3D.rb'
+
+# Configuration parameters: EnforcedStyle, AllowedPatterns.
+# SupportedStyles: snake_case, camelCase
+Naming/MethodName:
+ Enabled: false
+
+# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
+# AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to
+Naming/MethodParameterName:
+ Enabled: false
+
+# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
+# NamePrefix: is_, has_, have_
+# ForbiddenPrefixes: is_, has_, have_
+# AllowedMethods: is_a?
+# MethodDefinitionMacros: define_method, define_singleton_method
+Naming/PredicateName:
+ Exclude:
+ - 'spec/**/*'
+ - 'lib/axlsx/workbook/worksheet/cell.rb'
+ - 'lib/axlsx/workbook/worksheet/worksheet_comments.rb'
+ - 'lib/axlsx/workbook/worksheet/worksheet_drawing.rb'
+
+# Configuration parameters: EnforcedStyle, AllowedIdentifiers, AllowedPatterns.
+# SupportedStyles: snake_case, camelCase
+Naming/VariableName:
+ Enabled: false
+
+# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
+# SupportedStyles: snake_case, normalcase, non_integer
+# AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339, x86_64
+Naming/VariableNumber:
+ Exclude:
+ - 'lib/axlsx/util/validators.rb'
+ - 'lib/axlsx/workbook/worksheet/cell.rb'
+ - 'lib/axlsx/workbook/worksheet/cell_serializer.rb'
+ - 'lib/axlsx/workbook/worksheet/sheet_protection.rb'
+ - 'test/rels/tc_relationship.rb'
+ - 'test/rels/tc_relationships.rb'
+ - 'test/tc_package.rb'
+ - 'test/workbook/worksheet/tc_cell.rb'
+ - 'test/workbook/worksheet/tc_date_time_converter.rb'
+ - 'test/workbook/worksheet/tc_sheet_view.rb'
+ - 'test/workbook/worksheet/tc_worksheet.rb'
+
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: separated, grouped
@@ -97,12 +150,6 @@ Style/AccessorGrouping:
Style/Alias:
Enabled: false
-# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: MinBranchesCount.
-Style/CaseLikeIf:
- Exclude:
- - 'lib/axlsx/workbook/worksheet/merged_cells.rb'
-
Style/ClassVars:
Exclude:
- 'lib/axlsx.rb'
@@ -159,7 +206,6 @@ Style/FormatString:
- 'lib/axlsx/drawing/vml_drawing.rb'
- 'lib/axlsx/util/accessors.rb'
- 'lib/axlsx/util/validators.rb'
- - 'lib/axlsx/workbook/worksheet/dimension.rb'
- 'lib/axlsx/workbook/worksheet/worksheet.rb'
# This cop supports safe autocorrection (--autocorrect).
@@ -184,12 +230,6 @@ Style/GuardClause:
- 'lib/axlsx/workbook/worksheet/worksheet.rb'
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowIfModifier.
-Style/IfInsideElse:
- Exclude:
- - 'lib/axlsx/stylesheet/styles.rb'
-
-# This cop supports safe autocorrection (--autocorrect).
Style/IfUnlessModifier:
Enabled: false
@@ -343,17 +383,6 @@ Style/RandomWithOffset:
Exclude:
- 'lib/axlsx/drawing/vml_shape.rb'
-# This cop supports safe autocorrection (--autocorrect).
-Style/RedundantFileExtensionInRequire:
- Exclude:
- - 'lib/axlsx/content_type/content_type.rb'
- - 'lib/axlsx/drawing/drawing.rb'
- - 'lib/axlsx/rels/relationships.rb'
- - 'lib/axlsx/stylesheet/styles.rb'
- - 'lib/axlsx/workbook/workbook.rb'
- - 'lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb'
- - 'lib/caxlsx.rb'
-
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/RedundantInterpolation:
Exclude:
@@ -414,11 +443,6 @@ Style/StringChars:
Exclude:
- 'lib/axlsx/workbook/worksheet/sheet_protection.rb'
-# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: Mode.
-Style/StringConcatenation:
- Enabled: false
-
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
# SupportedStyles: single_quotes, double_quotes
diff --git a/Rakefile b/Rakefile
index 8125959f..28712c0d 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,13 +1,13 @@
# frozen_string_literal: true
-require File.expand_path(File.dirname(__FILE__) + '/lib/axlsx/version.rb')
+require File.expand_path("#{File.dirname(__FILE__)}/lib/axlsx/version.rb")
task build: :gendoc do
system "gem build axlsx.gemspec"
end
task :benchmark do
- require File.expand_path(File.dirname(__FILE__) + '/test/benchmark.rb')
+ require File.expand_path("#{File.dirname(__FILE__)}/test/benchmark.rb")
end
task :gendoc do
diff --git a/axlsx.gemspec b/axlsx.gemspec
index 83531ce4..bf9c0942 100644
--- a/axlsx.gemspec
+++ b/axlsx.gemspec
@@ -11,9 +11,9 @@ Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.summary = "Excel OOXML (xlsx) with charts, styles, images and autowidth columns."
s.license = 'MIT'
- s.description = <<-eof
- xlsx spreadsheet generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx helps you create beautiful Office Open XML Spreadsheet documents ( Excel, Google Spreadsheets, Numbers, LibreOffice) without having to understand the entire ECMA specification. Check out the README for some examples of how easy it is. Best of all, you can validate your xlsx file before serialization so you know for sure that anything generated is going to load on your client's machine.
- eof
+ s.description = <<~MSG
+ xlsx spreadsheet generation with charts, images, automated column width, customizable styles and full schema validation. Axlsx helps you create beautiful Office Open XML Spreadsheet documents (Excel, Google Spreadsheets, Numbers, LibreOffice) without having to understand the entire ECMA specification. Check out the README for some examples of how easy it is. Best of all, you can validate your xlsx file before serialization so you know for sure that anything generated is going to load on your client's machine.
+ MSG
s.files = Dir.glob("{lib/**/*,examples/**/*.rb,examples/**/*.jpeg}") + %w{LICENSE README.md Rakefile CHANGELOG.md .yardopts .yardopts_guide}
s.add_runtime_dependency "htmlentities", "~> 4.3", '>= 4.3.4'
diff --git a/lib/axlsx/content_type/content_type.rb b/lib/axlsx/content_type/content_type.rb
index 22763bfb..d2e3bb9e 100644
--- a/lib/axlsx/content_type/content_type.rb
+++ b/lib/axlsx/content_type/content_type.rb
@@ -1,9 +1,9 @@
# frozen_string_literal: true
module Axlsx
- require 'axlsx/content_type/abstract_content_type.rb'
- require 'axlsx/content_type/default.rb'
- require 'axlsx/content_type/override.rb'
+ require 'axlsx/content_type/abstract_content_type'
+ require 'axlsx/content_type/default'
+ require 'axlsx/content_type/override'
# ContentTypes used in the package. This is automatically managed by the package package.
class ContentType < SimpleTypedList
diff --git a/lib/axlsx/drawing/area_series.rb b/lib/axlsx/drawing/area_series.rb
index cf4aaf13..afaf5ea0 100644
--- a/lib/axlsx/drawing/area_series.rb
+++ b/lib/axlsx/drawing/area_series.rb
@@ -89,7 +89,7 @@ module Axlsx
if !@show_marker
str << '<c:marker><c:symbol val="none"/></c:marker>'
elsif @marker_symbol != :default
- str << '<c:marker><c:symbol val="' + @marker_symbol.to_s + '"/></c:marker>'
+ str << '<c:marker><c:symbol val="' << @marker_symbol.to_s << '"/></c:marker>'
end
@labels.to_xml_string(str) unless @labels.nil?
diff --git a/lib/axlsx/drawing/drawing.rb b/lib/axlsx/drawing/drawing.rb
index ef532974..8cb3e2cc 100644
--- a/lib/axlsx/drawing/drawing.rb
+++ b/lib/axlsx/drawing/drawing.rb
@@ -1,55 +1,55 @@
# frozen_string_literal: true
module Axlsx
- require 'axlsx/drawing/d_lbls.rb'
- require 'axlsx/drawing/title.rb'
- require 'axlsx/drawing/series_title.rb'
- require 'axlsx/drawing/series.rb'
- require 'axlsx/drawing/pie_series.rb'
- require 'axlsx/drawing/bar_series.rb'
- require 'axlsx/drawing/line_series.rb'
- require 'axlsx/drawing/scatter_series.rb'
- require 'axlsx/drawing/bubble_series.rb'
- require 'axlsx/drawing/area_series.rb'
-
- require 'axlsx/drawing/scaling.rb'
- require 'axlsx/drawing/axis.rb'
-
- require 'axlsx/drawing/str_val.rb'
- require 'axlsx/drawing/num_val.rb'
- require 'axlsx/drawing/str_data.rb'
- require 'axlsx/drawing/num_data.rb'
- require 'axlsx/drawing/num_data_source.rb'
- require 'axlsx/drawing/ax_data_source.rb'
-
- require 'axlsx/drawing/ser_axis.rb'
- require 'axlsx/drawing/cat_axis.rb'
- require 'axlsx/drawing/val_axis.rb'
- require 'axlsx/drawing/axes.rb'
-
- require 'axlsx/drawing/marker.rb'
-
- require 'axlsx/drawing/one_cell_anchor.rb'
- require 'axlsx/drawing/two_cell_anchor.rb'
- require 'axlsx/drawing/graphic_frame.rb'
-
- require 'axlsx/drawing/view_3D.rb'
- require 'axlsx/drawing/chart.rb'
- require 'axlsx/drawing/pie_3D_chart.rb'
- require 'axlsx/drawing/bar_3D_chart.rb'
- require 'axlsx/drawing/bar_chart.rb'
- require 'axlsx/drawing/line_chart.rb'
- require 'axlsx/drawing/line_3D_chart.rb'
- require 'axlsx/drawing/scatter_chart.rb'
- require 'axlsx/drawing/bubble_chart.rb'
- require 'axlsx/drawing/area_chart.rb'
-
- require 'axlsx/drawing/picture_locking.rb'
- require 'axlsx/drawing/pic.rb'
- require 'axlsx/drawing/hyperlink.rb'
-
- require 'axlsx/drawing/vml_drawing.rb'
- require 'axlsx/drawing/vml_shape.rb'
+ require 'axlsx/drawing/d_lbls'
+ require 'axlsx/drawing/title'
+ require 'axlsx/drawing/series_title'
+ require 'axlsx/drawing/series'
+ require 'axlsx/drawing/pie_series'
+ require 'axlsx/drawing/bar_series'
+ require 'axlsx/drawing/line_series'
+ require 'axlsx/drawing/scatter_series'
+ require 'axlsx/drawing/bubble_series'
+ require 'axlsx/drawing/area_series'
+
+ require 'axlsx/drawing/scaling'
+ require 'axlsx/drawing/axis'
+
+ require 'axlsx/drawing/str_val'
+ require 'axlsx/drawing/num_val'
+ require 'axlsx/drawing/str_data'
+ require 'axlsx/drawing/num_data'
+ require 'axlsx/drawing/num_data_source'
+ require 'axlsx/drawing/ax_data_source'
+
+ require 'axlsx/drawing/ser_axis'
+ require 'axlsx/drawing/cat_axis'
+ require 'axlsx/drawing/val_axis'
+ require 'axlsx/drawing/axes'
+
+ require 'axlsx/drawing/marker'
+
+ require 'axlsx/drawing/one_cell_anchor'
+ require 'axlsx/drawing/two_cell_anchor'
+ require 'axlsx/drawing/graphic_frame'
+
+ require 'axlsx/drawing/view_3D'
+ require 'axlsx/drawing/chart'
+ require 'axlsx/drawing/pie_3D_chart'
+ require 'axlsx/drawing/bar_3D_chart'
+ require 'axlsx/drawing/bar_chart'
+ require 'axlsx/drawing/line_chart'
+ require 'axlsx/drawing/line_3D_chart'
+ require 'axlsx/drawing/scatter_chart'
+ require 'axlsx/drawing/bubble_chart'
+ require 'axlsx/drawing/area_chart'
+
+ require 'axlsx/drawing/picture_locking'
+ require 'axlsx/drawing/pic'
+ require 'axlsx/drawing/hyperlink'
+
+ require 'axlsx/drawing/vml_drawing'
+ require 'axlsx/drawing/vml_shape'
# A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
# 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.
diff --git a/lib/axlsx/drawing/line_series.rb b/lib/axlsx/drawing/line_series.rb
index fbed4000..4854a718 100644
--- a/lib/axlsx/drawing/line_series.rb
+++ b/lib/axlsx/drawing/line_series.rb
@@ -89,7 +89,7 @@ module Axlsx
if !@show_marker
str << '<c:marker><c:symbol val="none"/></c:marker>'
elsif @marker_symbol != :default
- str << '<c:marker><c:symbol val="' + @marker_symbol.to_s + '"/></c:marker>'
+ str << '<c:marker><c:symbol val="' << @marker_symbol.to_s << '"/></c:marker>'
end
@labels.to_xml_string(str) unless @labels.nil?
diff --git a/lib/axlsx/drawing/pie_series.rb b/lib/axlsx/drawing/pie_series.rb
index f3edd1e9..cce79648 100644
--- a/lib/axlsx/drawing/pie_series.rb
+++ b/lib/axlsx/drawing/pie_series.rb
@@ -46,7 +46,7 @@ module Axlsx
# @return [String]
def to_xml_string(str = +'')
super(str) do
- str << '<c:explosion val="' + @explosion.to_s + '"/>' unless @explosion.nil?
+ 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 << '"/>'
diff --git a/lib/axlsx/drawing/scatter_series.rb b/lib/axlsx/drawing/scatter_series.rb
index 9c6e12f2..9e3579f7 100644
--- a/lib/axlsx/drawing/scatter_series.rb
+++ b/lib/axlsx/drawing/scatter_series.rb
@@ -121,7 +121,7 @@ module Axlsx
if !@show_marker
'<c:symbol val="none"/>'
elsif @marker_symbol != :default
- '<c:symbol val="' + @marker_symbol.to_s + '"/>'
+ '<c:symbol val="' << @marker_symbol.to_s << '"/>'
end.to_s
end
end
diff --git a/lib/axlsx/rels/relationships.rb b/lib/axlsx/rels/relationships.rb
index 3aa9c1bf..910f2473 100644
--- a/lib/axlsx/rels/relationships.rb
+++ b/lib/axlsx/rels/relationships.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
module Axlsx
- require 'axlsx/rels/relationship.rb'
+ require 'axlsx/rels/relationship'
# Relationships are a collection of Relations that define how package parts are related.
# @note The package automatically manages releationships.
diff --git a/lib/axlsx/stylesheet/color.rb b/lib/axlsx/stylesheet/color.rb
index 24fe3bc3..0c40a073 100644
--- a/lib/axlsx/stylesheet/color.rb
+++ b/lib/axlsx/stylesheet/color.rb
@@ -73,7 +73,7 @@ module Axlsx
# @param [String] str
# @return [String]
def to_xml_string(str = +'', tag_name = 'color')
- serialized_tag('' + tag_name + '', str)
+ serialized_tag(tag_name.to_s, str)
end
end
end
diff --git a/lib/axlsx/stylesheet/styles.rb b/lib/axlsx/stylesheet/styles.rb
index 625f6a02..c3dd8d06 100644
--- a/lib/axlsx/stylesheet/styles.rb
+++ b/lib/axlsx/stylesheet/styles.rb
@@ -1,23 +1,23 @@
# frozen_string_literal: true
module Axlsx
- require 'axlsx/stylesheet/border.rb'
- require 'axlsx/stylesheet/border_pr.rb'
- require 'axlsx/stylesheet/cell_alignment.rb'
- require 'axlsx/stylesheet/cell_style.rb'
- require 'axlsx/stylesheet/color.rb'
- require 'axlsx/stylesheet/fill.rb'
- require 'axlsx/stylesheet/font.rb'
- require 'axlsx/stylesheet/gradient_fill.rb'
- require 'axlsx/stylesheet/gradient_stop.rb'
- require 'axlsx/stylesheet/num_fmt.rb'
- require 'axlsx/stylesheet/pattern_fill.rb'
- require 'axlsx/stylesheet/table_style.rb'
- require 'axlsx/stylesheet/table_styles.rb'
- require 'axlsx/stylesheet/table_style_element.rb'
- require 'axlsx/stylesheet/dxf.rb'
- require 'axlsx/stylesheet/xf.rb'
- require 'axlsx/stylesheet/cell_protection.rb'
+ require 'axlsx/stylesheet/border'
+ require 'axlsx/stylesheet/border_pr'
+ require 'axlsx/stylesheet/cell_alignment'
+ require 'axlsx/stylesheet/cell_style'
+ require 'axlsx/stylesheet/color'
+ require 'axlsx/stylesheet/fill'
+ require 'axlsx/stylesheet/font'
+ require 'axlsx/stylesheet/gradient_fill'
+ require 'axlsx/stylesheet/gradient_stop'
+ require 'axlsx/stylesheet/num_fmt'
+ require 'axlsx/stylesheet/pattern_fill'
+ require 'axlsx/stylesheet/table_style'
+ require 'axlsx/stylesheet/table_styles'
+ require 'axlsx/stylesheet/table_style_element'
+ require 'axlsx/stylesheet/dxf'
+ require 'axlsx/stylesheet/xf'
+ require 'axlsx/stylesheet/cell_protection'
# The Styles class manages worksheet styles
# In addition to creating the require style objects for a valid xlsx package, this class provides the key mechanism for adding styles to your workbook, and safely applying them to the cells of your worksheet.
@@ -390,24 +390,22 @@ module Axlsx
if options[:border].nil?
base_border_opts = {}
- else
- if options[:border].is_a?(Array)
- borders_array += options[:border]
+ elsif options[:border].is_a?(Array)
+ borders_array += options[:border]
- base_border_opts = {}
+ base_border_opts = {}
- options[:border].each do |b_opts|
- if b_opts[:edges].nil?
- base_border_opts = base_border_opts.merge(b_opts)
- end
+ options[:border].each do |b_opts|
+ if b_opts[:edges].nil?
+ base_border_opts = base_border_opts.merge(b_opts)
end
- else
- borders_array << options[:border]
+ end
+ else
+ borders_array << options[:border]
- base_border_opts = options[:border]
+ base_border_opts = options[:border]
- validate_border_hash.call(base_border_opts)
- end
+ validate_border_hash.call(base_border_opts)
end
Border::EDGES.each do |edge|
diff --git a/lib/axlsx/util/constants.rb b/lib/axlsx/util/constants.rb
index 459e0099..0767be31 100644
--- a/lib/axlsx/util/constants.rb
+++ b/lib/axlsx/util/constants.rb
@@ -239,25 +239,25 @@ module Axlsx
COMMENT_PN = "comments%d.xml"
# location of schema files for validation
- SCHEMA_BASE = (File.dirname(__FILE__) + '/../../schema/').freeze
+ SCHEMA_BASE = "#{File.dirname(__FILE__)}/../../schema/"
# App validation schema
- APP_XSD = (SCHEMA_BASE + "shared-documentPropertiesExtended.xsd").freeze
+ APP_XSD = "#{SCHEMA_BASE}shared-documentPropertiesExtended.xsd"
# core validation schema
- CORE_XSD = (SCHEMA_BASE + "opc-coreProperties.xsd").freeze
+ CORE_XSD = "#{SCHEMA_BASE}opc-coreProperties.xsd"
# content types validation schema
- CONTENT_TYPES_XSD = (SCHEMA_BASE + "opc-contentTypes.xsd").freeze
+ CONTENT_TYPES_XSD = "#{SCHEMA_BASE}opc-contentTypes.xsd"
# rels validation schema
- RELS_XSD = (SCHEMA_BASE + "opc-relationships.xsd").freeze
+ RELS_XSD = "#{SCHEMA_BASE}opc-relationships.xsd"
# spreadsheetML validation schema
- SML_XSD = (SCHEMA_BASE + "sml.xsd").freeze
+ SML_XSD = "#{SCHEMA_BASE}sml.xsd"
# drawing validation schema
- DRAWING_XSD = (SCHEMA_BASE + "dml-spreadsheetDrawing.xsd").freeze
+ DRAWING_XSD = "#{SCHEMA_BASE}dml-spreadsheetDrawing.xsd"
# number format id for pecentage formatting using the default formatting id.
NUM_FMT_PERCENT = 9
diff --git a/lib/axlsx/util/simple_typed_list.rb b/lib/axlsx/util/simple_typed_list.rb
index c3910fca..30cfd2a5 100644
--- a/lib/axlsx/util/simple_typed_list.rb
+++ b/lib/axlsx/util/simple_typed_list.rb
@@ -15,6 +15,12 @@ module Axlsx
undef_method name
end
+ # We often call index(element) on instances of SimpleTypedList. Thus, we do not want to inherit Array
+ # implementation of == / eql? which walks the elements calling == / eql?. Instead we want the fast
+ # and original versions from BasicObject.
+ alias :== :equal?
+ alias :eql? :equal?
+
# Creats a new typed list
# @param [Array, Class] type An array of Class objects or a single Class object
# @param [String] serialize_as The tag name to use in serialization
@@ -85,12 +91,12 @@ module Axlsx
end
# join operator
- # @param [Array] v the array to join
+ # @param [Array] other the array to join
# @raise [ArgumentError] if any of the values being joined are not
# one of the allowed types
# @return [SimpleTypedList]
- def +(v)
- v.each do |item|
+ def +(other)
+ other.each do |item|
self << item
end
super
diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb
index 95d3e4a7..ec80d6dc 100644
--- a/lib/axlsx/workbook/workbook.rb
+++ b/lib/axlsx/workbook/workbook.rb
@@ -1,41 +1,41 @@
# frozen_string_literal: true
module Axlsx
- require 'axlsx/workbook/worksheet/sheet_calc_pr.rb'
- require 'axlsx/workbook/worksheet/auto_filter/auto_filter.rb'
- require 'axlsx/workbook/worksheet/date_time_converter.rb'
- require 'axlsx/workbook/worksheet/protected_range.rb'
- require 'axlsx/workbook/worksheet/protected_ranges.rb'
+ require 'axlsx/workbook/worksheet/sheet_calc_pr'
+ require 'axlsx/workbook/worksheet/auto_filter/auto_filter'
+ require 'axlsx/workbook/worksheet/date_time_converter'
+ require 'axlsx/workbook/worksheet/protected_range'
+ require 'axlsx/workbook/worksheet/protected_ranges'
require 'axlsx/workbook/worksheet/rich_text_run'
require 'axlsx/workbook/worksheet/rich_text'
- require 'axlsx/workbook/worksheet/cell_serializer.rb'
- require 'axlsx/workbook/worksheet/cell.rb'
- require 'axlsx/workbook/worksheet/page_margins.rb'
- require 'axlsx/workbook/worksheet/page_set_up_pr.rb'
- require 'axlsx/workbook/worksheet/outline_pr.rb'
- require 'axlsx/workbook/worksheet/page_setup.rb'
- require 'axlsx/workbook/worksheet/header_footer.rb'
- require 'axlsx/workbook/worksheet/print_options.rb'
- require 'axlsx/workbook/worksheet/cfvo.rb'
- require 'axlsx/workbook/worksheet/cfvos.rb'
- require 'axlsx/workbook/worksheet/color_scale.rb'
- require 'axlsx/workbook/worksheet/data_bar.rb'
- require 'axlsx/workbook/worksheet/icon_set.rb'
- require 'axlsx/workbook/worksheet/conditional_formatting.rb'
- require 'axlsx/workbook/worksheet/conditional_formatting_rule.rb'
- require 'axlsx/workbook/worksheet/conditional_formattings.rb'
- require 'axlsx/workbook/worksheet/row.rb'
- require 'axlsx/workbook/worksheet/col.rb'
- require 'axlsx/workbook/worksheet/cols.rb'
- require 'axlsx/workbook/worksheet/comments.rb'
- require 'axlsx/workbook/worksheet/comment.rb'
- require 'axlsx/workbook/worksheet/merged_cells.rb'
- require 'axlsx/workbook/worksheet/sheet_protection.rb'
- require 'axlsx/workbook/worksheet/sheet_pr.rb'
- require 'axlsx/workbook/worksheet/dimension.rb'
- require 'axlsx/workbook/worksheet/sheet_data.rb'
- require 'axlsx/workbook/worksheet/worksheet_drawing.rb'
- require 'axlsx/workbook/worksheet/worksheet_comments.rb'
+ require 'axlsx/workbook/worksheet/cell_serializer'
+ require 'axlsx/workbook/worksheet/cell'
+ require 'axlsx/workbook/worksheet/page_margins'
+ require 'axlsx/workbook/worksheet/page_set_up_pr'
+ require 'axlsx/workbook/worksheet/outline_pr'
+ require 'axlsx/workbook/worksheet/page_setup'
+ require 'axlsx/workbook/worksheet/header_footer'
+ require 'axlsx/workbook/worksheet/print_options'
+ require 'axlsx/workbook/worksheet/cfvo'
+ require 'axlsx/workbook/worksheet/cfvos'
+ require 'axlsx/workbook/worksheet/color_scale'
+ require 'axlsx/workbook/worksheet/data_bar'
+ require 'axlsx/workbook/worksheet/icon_set'
+ require 'axlsx/workbook/worksheet/conditional_formatting'
+ require 'axlsx/workbook/worksheet/conditional_formatting_rule'
+ require 'axlsx/workbook/worksheet/conditional_formattings'
+ require 'axlsx/workbook/worksheet/row'
+ require 'axlsx/workbook/worksheet/col'
+ require 'axlsx/workbook/worksheet/cols'
+ require 'axlsx/workbook/worksheet/comments'
+ require 'axlsx/workbook/worksheet/comment'
+ require 'axlsx/workbook/worksheet/merged_cells'
+ require 'axlsx/workbook/worksheet/sheet_protection'
+ require 'axlsx/workbook/worksheet/sheet_pr'
+ require 'axlsx/workbook/worksheet/dimension'
+ require 'axlsx/workbook/worksheet/sheet_data'
+ require 'axlsx/workbook/worksheet/worksheet_drawing'
+ require 'axlsx/workbook/worksheet/worksheet_comments'
require 'axlsx/workbook/worksheet/worksheet_hyperlink'
require 'axlsx/workbook/worksheet/worksheet_hyperlinks'
require 'axlsx/workbook/worksheet/break'
@@ -43,22 +43,22 @@ module Axlsx
require 'axlsx/workbook/worksheet/col_breaks'
require 'axlsx/workbook/workbook_view'
require 'axlsx/workbook/workbook_views'
- require 'axlsx/workbook/worksheet/worksheet.rb'
- require 'axlsx/workbook/shared_strings_table.rb'
- require 'axlsx/workbook/defined_name.rb'
- require 'axlsx/workbook/defined_names.rb'
- require 'axlsx/workbook/worksheet/table_style_info.rb'
- require 'axlsx/workbook/worksheet/table.rb'
- require 'axlsx/workbook/worksheet/tables.rb'
- require 'axlsx/workbook/worksheet/pivot_table_cache_definition.rb'
- require 'axlsx/workbook/worksheet/pivot_table.rb'
- require 'axlsx/workbook/worksheet/pivot_tables.rb'
- require 'axlsx/workbook/worksheet/data_validation.rb'
- require 'axlsx/workbook/worksheet/data_validations.rb'
- require 'axlsx/workbook/worksheet/sheet_view.rb'
- require 'axlsx/workbook/worksheet/sheet_format_pr.rb'
- require 'axlsx/workbook/worksheet/pane.rb'
- require 'axlsx/workbook/worksheet/selection.rb'
+ require 'axlsx/workbook/worksheet/worksheet'
+ require 'axlsx/workbook/shared_strings_table'
+ require 'axlsx/workbook/defined_name'
+ require 'axlsx/workbook/defined_names'
+ require 'axlsx/workbook/worksheet/table_style_info'
+ require 'axlsx/workbook/worksheet/table'
+ require 'axlsx/workbook/worksheet/tables'
+ require 'axlsx/workbook/worksheet/pivot_table_cache_definition'
+ require 'axlsx/workbook/worksheet/pivot_table'
+ require 'axlsx/workbook/worksheet/pivot_tables'
+ require 'axlsx/workbook/worksheet/data_validation'
+ require 'axlsx/workbook/worksheet/data_validations'
+ require 'axlsx/workbook/worksheet/sheet_view'
+ require 'axlsx/workbook/worksheet/sheet_format_pr'
+ require 'axlsx/workbook/worksheet/pane'
+ require 'axlsx/workbook/worksheet/selection'
# The Workbook class is an xlsx workbook that manages worksheets, charts, drawings and styles.
# The following parts of the Office Open XML spreadsheet specification are not implimented in this version.
diff --git a/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb b/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb
index 5a74d79a..f25966de 100644
--- a/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb
+++ b/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require 'axlsx/workbook/worksheet/auto_filter/filter_column.rb'
-require 'axlsx/workbook/worksheet/auto_filter/filters.rb'
+require 'axlsx/workbook/worksheet/auto_filter/filter_column'
+require 'axlsx/workbook/worksheet/auto_filter/filters'
module Axlsx
# This class represents an auto filter range in a worksheet
diff --git a/lib/axlsx/workbook/worksheet/cell.rb b/lib/axlsx/workbook/worksheet/cell.rb
index 09cf2064..b4f826c2 100644
--- a/lib/axlsx/workbook/worksheet/cell.rb
+++ b/lib/axlsx/workbook/worksheet/cell.rb
@@ -73,6 +73,9 @@ module Axlsx
CELL_TYPES = [:date, :time, :float, :integer, :richtext,
:string, :boolean, :iso_8601, :text].freeze
+ # A regular expression to match the alpha(column)numeric(row) reference of a cell
+ CELL_REFERENCE_REGEX = /([A-Z]+)([0-9]+)/.freeze
+
# The index of the cellXfs item to be applied to this cell.
# @return [Integer]
# @see Axlsx::Styles
@@ -345,11 +348,11 @@ module Axlsx
Axlsx::cell_r index, @row.row_index
end
- # @return [String] The absolute alpha(column)numeric(row) reference for this sell.
+ # @return [String] The absolute alpha(column)numeric(row) reference for this cell.
# @example Absolute Cell Reference
# ws.rows.first.cells.first.r #=> "$A$1"
def r_abs
- "$#{r.match(/([A-Z]+)([0-9]+)/)[1, 2].join('$')}"
+ "$#{CELL_REFERENCE_REGEX.match(r)[1, 2].join('$')}"
end
# @return [Integer] The cellXfs item index applied to this cell.
diff --git a/lib/axlsx/workbook/worksheet/dimension.rb b/lib/axlsx/workbook/worksheet/dimension.rb
index 42e02e72..f27404b6 100644
--- a/lib/axlsx/workbook/worksheet/dimension.rb
+++ b/lib/axlsx/workbook/worksheet/dimension.rb
@@ -39,7 +39,7 @@ module Axlsx
def to_xml_string(str = +'')
return if worksheet.rows.empty?
- str << "<dimension ref=\"%s\"></dimension>" % sqref
+ str << '<dimension ref="' << sqref << '"></dimension>'
end
# The first cell in the dimension
diff --git a/lib/axlsx/workbook/worksheet/merged_cells.rb b/lib/axlsx/workbook/worksheet/merged_cells.rb
index c0ca1ebe..c3fb6dde 100644
--- a/lib/axlsx/workbook/worksheet/merged_cells.rb
+++ b/lib/axlsx/workbook/worksheet/merged_cells.rb
@@ -12,7 +12,7 @@ module Axlsx
end
# adds cells to the merged cells collection
- # @param [Array||String] cells The cells to add to the merged cells
+ # @param [Array|String] cells The cells to add to the merged cells
# collection. This can be an array of actual cells or a string style
# range like 'A1:C1'
def add(cells)
@@ -20,8 +20,6 @@ module Axlsx
cells
elsif cells.is_a?(Array)
Axlsx::cell_range(cells, false)
- elsif cells.is_a?(Row)
- Axlsx::cell_range(cells, false)
end
end
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 8c6e53b4..aaeadb11 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -45,7 +45,7 @@ module Axlsx
# The name of the worksheet
# @return [String]
def name
- @name ||= "Sheet" + (index + 1).to_s
+ @name ||= "Sheet#{index + 1}"
end
# Whether to treat values starting with an equals sign as formulas or as literal strings.
diff --git a/lib/caxlsx.rb b/lib/caxlsx.rb
index e97cd68c..d2b96503 100644
--- a/lib/caxlsx.rb
+++ b/lib/caxlsx.rb
@@ -1,3 +1,3 @@
# frozen_string_literal: true
-require 'axlsx.rb'
+require 'axlsx'
diff --git a/test/benchmark.rb b/test/benchmark.rb
index d5ccdf64..fb4d7050 100755
--- a/test/benchmark.rb
+++ b/test/benchmark.rb
@@ -11,9 +11,22 @@ input1 = (32..126).to_a.pack('U*').chars.to_a # these will need to be escaped
input2 = (65..122).to_a.pack('U*').chars.to_a # these do not need to be escaped
10.times { row << input1.shuffle.join }
10.times { row << input2.shuffle.join }
-times = 3000
+times = 3_000
Benchmark.bmbm(30) do |x|
+ x.report('axlsx_merged_cells') do
+ p = Axlsx::Package.new
+ p.workbook do |wb|
+ wb.add_worksheet do |sheet|
+ times.times do
+ sheet << row
+ sheet.merge_cells(sheet.rows.last.cells)
+ end
+ end
+ end
+ p.serialize("example_axlsx_merged_cells.xlsx")
+ end
+
x.report('axlsx_noautowidth') do
p = Axlsx::Package.new
p.workbook do |wb|
@@ -85,4 +98,4 @@ Benchmark.bmbm(30) do |x|
end
end
end
-File.delete("example.csv", "example_streamed.xlsx", "example_shared.xlsx", "example_autowidth.xlsx", "example_noautowidth.xlsx", "example_zip_command.xlsx")
+File.delete("example_axlsx_merged_cells.xlsx", "example.csv", "example_streamed.xlsx", "example_shared.xlsx", "example_autowidth.xlsx", "example_noautowidth.xlsx", "example_zip_command.xlsx")
diff --git a/test/doc_props/tc_app.rb b/test/doc_props/tc_app.rb
index 82e33f12..c066373c 100644
--- a/test/doc_props/tc_app.rb
+++ b/test/doc_props/tc_app.rb
@@ -41,6 +41,6 @@ class TestApp < Test::Unit::TestCase
errors << error
end
- assert_equal(0, errors.size, "app.xml invalid" + errors.map(&:message).to_s)
+ assert_equal(0, errors.size, "app.xml invalid#{errors.map(&:message)}")
end
end
diff --git a/test/doc_props/tc_core.rb b/test/doc_props/tc_core.rb
index bfacab45..5a04a615 100644
--- a/test/doc_props/tc_core.rb
+++ b/test/doc_props/tc_core.rb
@@ -18,7 +18,7 @@ class TestCore < Test::Unit::TestCase
errors << error
end
- assert_equal(0, errors.size, "core.xml Invalid" + errors.map(&:message).to_s)
+ assert_equal(0, errors.size, "core.xml Invalid#{errors.map(&:message)}")
end
def test_populates_created
diff --git a/test/drawing/tc_drawing.rb b/test/drawing/tc_drawing.rb
index d7e3e8df..d48ae604 100644
--- a/test/drawing/tc_drawing.rb
+++ b/test/drawing/tc_drawing.rb
@@ -26,7 +26,7 @@ class TestDrawing < Test::Unit::TestCase
end
def test_add_image
- src = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
+ src = "#{File.dirname(__FILE__)}/../fixtures/image1.jpeg"
image = @ws.add_image(image_src: src, start_at: [0, 0], width: 600, height: 400)
assert(@ws.drawing.anchors.last.is_a?(Axlsx::OneCellAnchor))
@@ -36,7 +36,7 @@ class TestDrawing < Test::Unit::TestCase
end
def test_add_two_cell_anchor_image
- src = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
+ src = "#{File.dirname(__FILE__)}/../fixtures/image1.jpeg"
image = @ws.add_image(image_src: src, start_at: [0, 0], end_at: [15, 0])
assert(@ws.drawing.anchors.last.is_a?(Axlsx::TwoCellAnchor))
diff --git a/test/drawing/tc_hyperlink.rb b/test/drawing/tc_hyperlink.rb
index c3cffb1c..5a1f5d48 100644
--- a/test/drawing/tc_hyperlink.rb
+++ b/test/drawing/tc_hyperlink.rb
@@ -6,7 +6,7 @@ class TestHyperlink < Test::Unit::TestCase
def setup
@p = Axlsx::Package.new
ws = @p.workbook.add_worksheet
- @test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
+ @test_img = "#{File.dirname(__FILE__)}/../fixtures/image1.jpeg"
@image = ws.add_image image_src: @test_img, hyperlink: "http://axlsx.blogspot.com"
@hyperlink = @image.hyperlink
end
diff --git a/test/drawing/tc_one_cell_anchor.rb b/test/drawing/tc_one_cell_anchor.rb
index e3eb8d90..5015d123 100644
--- a/test/drawing/tc_one_cell_anchor.rb
+++ b/test/drawing/tc_one_cell_anchor.rb
@@ -6,7 +6,7 @@ class TestOneCellAnchor < Test::Unit::TestCase
def setup
@p = Axlsx::Package.new
@ws = @p.workbook.add_worksheet
- @test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
+ @test_img = "#{File.dirname(__FILE__)}/../fixtures/image1.jpeg"
@image = @ws.add_image image_src: @test_img
@anchor = @image.anchor
end
diff --git a/test/drawing/tc_pic.rb b/test/drawing/tc_pic.rb
index dc0f32da..f4961d4c 100644
--- a/test/drawing/tc_pic.rb
+++ b/test/drawing/tc_pic.rb
@@ -9,10 +9,10 @@ class TestPic < Test::Unit::TestCase
@p = Axlsx::Package.new
ws = @p.workbook.add_worksheet
- @test_img = @test_img_jpg = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
- @test_img_png = File.dirname(__FILE__) + "/../fixtures/image1.png"
- @test_img_gif = File.dirname(__FILE__) + "/../fixtures/image1.gif"
- @test_img_fake = File.dirname(__FILE__) + "/../fixtures/image1_fake.jpg"
+ @test_img = @test_img_jpg = "#{File.dirname(__FILE__)}/../fixtures/image1.jpeg"
+ @test_img_png = "#{File.dirname(__FILE__)}/../fixtures/image1.png"
+ @test_img_gif = "#{File.dirname(__FILE__)}/../fixtures/image1.gif"
+ @test_img_fake = "#{File.dirname(__FILE__)}/../fixtures/image1_fake.jpg"
@test_img_remote_png = "https://example.com/sample-image.png"
@test_img_remote_fake = "invalid_URI"
@image = ws.add_image image_src: @test_img, hyperlink: 'https://github.com/randym', tooltip: "What's up doc?", opacity: 5
diff --git a/test/util/tc_mime_type_utils.rb b/test/util/tc_mime_type_utils.rb
index fc7d9d79..16ba45cd 100644
--- a/test/util/tc_mime_type_utils.rb
+++ b/test/util/tc_mime_type_utils.rb
@@ -7,7 +7,7 @@ class TestMimeTypeUtils < Test::Unit::TestCase
stub_request(:get, 'https://example.com/sample-image.png')
.to_return(body: File.new('examples/sample.png'), status: 200)
- @test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
+ @test_img = "#{File.dirname(__FILE__)}/../fixtures/image1.jpeg"
@test_img_url = "https://example.com/sample-image.png"
end
diff --git a/test/workbook/tc_shared_strings_table.rb b/test/workbook/tc_shared_strings_table.rb
index 2edf5f4a..4ac8b112 100644
--- a/test/workbook/tc_shared_strings_table.rb
+++ b/test/workbook/tc_shared_strings_table.rb
@@ -45,7 +45,7 @@ class TestSharedStringsTable < Test::Unit::TestCase
errors << error
end
- assert_equal(0, errors.size, "sharedStirngs.xml Invalid" + errors.map(&:message).to_s)
+ assert_equal(0, errors.size, "sharedStirngs.xml Invalid#{errors.map(&:message)}")
end
def test_remove_control_characters_in_xml_serialization
diff --git a/test/workbook/worksheet/tc_rich_text_run.rb b/test/workbook/worksheet/tc_rich_text_run.rb
index 6274dda8..be05d818 100644
--- a/test/workbook/worksheet/tc_rich_text_run.rb
+++ b/test/workbook/worksheet/tc_rich_text_run.rb
@@ -151,7 +151,7 @@ class RichTextRun < Test::Unit::TestCase
def test_multiline_autowidth
wrap = @p.workbook.styles.add_style({ alignment: { wrap_text: true } })
- awtr = Axlsx::RichTextRun.new('I\'m bold' + "\n", b: true)
+ awtr = Axlsx::RichTextRun.new("I'm bold\n", b: true)
rt = Axlsx::RichText.new
rt.runs << awtr
@ws.add_row [rt], style: wrap