summaryrefslogtreecommitdiffhomepage
path: root/lib
AgeCommit message (Collapse)Author
2023-07-05Merge pull request #293 from tagliala/chore/fix-offenses-in-sheet-protectionZsolt Kozaroczy
Fix offenses in sheet protection
2023-07-05Use encoding constant instead of hardcoded stringGeremia Taglialatela
Ref: https://ruby-doc.org/core-2.6.10/Encoding.html#class-Encoding-label-Changing+an+encoding
2023-07-05Fix offenses in sheet protectionGeremia Taglialatela
- Lint/AmbiguousOperatorPrecedence - Style/PerlBackrefs - Style/StringChars - Style/UnpackFirst
2023-07-04Merge pull request #288 from tagliala/chore/fix-non-local-exit-from-iteratorZsolt Kozaroczy
Fix Lint/NonLocalExitFromIterator offense
2023-07-04Merge pull request #289 from tagliala/chore/282-require-cgi-at-module-levelZsolt Kozaroczy
Require 'cgi' at module level
2023-07-04Merge pull request #290 from tagliala/chore/fix-preferred-hash-method-offenseZsolt Kozaroczy
Fix Style/PreferredHashMethods offense
2023-07-02Remove conditional check for `encode` methodGeremia Taglialatela
All supported Ruby versions now support the `encode` method on strings, so the conditional check for this method has been removed. Even if the default encoding on Ruby >= 2.0 is UTF-8, this is not always the case when the `LANG` environment variable is not set to `C.UTF-8`, so the `encode` method has been preserved. Additionally, this commit updates a link to use the `https` protocol for improved security.
2023-07-02Require 'cgi' at module levelGeremia Taglialatela
Previously, `require 'cgi'` was only called in `cell.rb`, but there are other components in the Axlsx module that also use this dependency, including `Axlsx::SeriesTitle`, `Axlsx::StrVal`, `Axlsx::Title` (drawing), `Axlsx::Comment`, `Axlsx::ConditionalFormattingRule`, and `Axlsx::HeaderFooter`. By requiring cgi at the module level, we ensure that this dependency is available to all components in the Axlsx module, which can prevent issues if someone is requiring specific components that depend on cgi. This change improves the maintainability and reliability of the codebase by ensuring that all components have access to the required dependencies. Close #282
2023-07-01Fix Style/PreferredHashMethods offenseGeremia Taglialatela
`Gem.loaded_specs` is a hash, so it is safe to use `key?` and enable this cop
2023-07-01Fix Lint/NonLocalExitFromIterator offenseGeremia Taglialatela
Uses `Array#any?` instead of `Array#each`. According to benchmarks, `any?` is slightly faster when validation fails (3%) and noticeably faster when validation passes (up to 60%)
2023-06-27Merge pull request #285 from tagliala/chore/fix-redundant-self-offensesZsolt Kozaroczy
Fix redundant self offenses
2023-06-15Fix redundant self offensesGeremia Taglialatela
No performance gain, this can be seen as a cosmetic change to have shorter lines
2023-06-14Enable Naming/PredicateName copGeremia Taglialatela
Renaming the existing methods would break the public API, and it is not worth to alias and/or deprecate existing methods, so this commit enables Naming/PredicateName and allows the existing methods to preserve their name
2023-06-13Fix safe Style/Lambda offensesGeremia Taglialatela
- Use literal syntax on single line - Use lambda method on multiple lines Ref: https://rubystyle.guide/#lambda-multi-line
2023-06-12Merge pull request #280 from tagliala/chore/remove-extra-to-sZsolt Kozaroczy
Remove redundant `to_s` calls
2023-06-10Fix safe Style/ColonMethodCall offensesGeremia Taglialatela
Caxlsx is using both `.` and `::`, 220 occurrences vs 280 to invoke methods on `Axlsx` module. This commit standardizes the approach towards `.`, which will also allow shorter lines. Performance is not affected ``` Comparison: Axlsx.validate: 8515252.3 i/s Axlsx::validate: 8512863.7 i/s - same-ish: difference falls within error ```
2023-06-10Remove redundant `to_s` callsGeremia Taglialatela
`clean_value`'s return value is a `String`. That method will return `@value.to_s`, or it will call `Axlsx.sanitize`, which will return a `String` in both conditions (
2023-06-09Merge pull request #278 from tagliala/chore/invert-nil-checksZsolt Kozaroczy
Invert nil checks to improve performance
2023-06-09Refactor random char generationGeremia Taglialatela
Fix the following safe offenses: - Style/OperatorMethodCall - Style/RandomWithOffset And use Array.new to avoid an extra allocation: ``` Comparison (IPS): Array.new(8) { rand(65..89).chr }.join: 492433.7 i/s (0...8).map { 65.+(rand(25)).chr }.join: 432155.8 i/s - 1.14x (± 0.00) slower Comparison (Memory): Array.new(8) { rand(65..89).chr }.join: 440 allocated (0...8).map { 65.+(rand(25)).chr }.join: 560 allocated - 1.27x more ```
2023-06-06Invert nil checks to improve performanceGeremia Taglialatela
Check for `nil` before checking for more expensive conditions which include a method call or an array scan. Also removes redundant comments on self-explanatory code
2023-06-05Prefer `Kernel#format` to `String#%`Geremia Taglialatela
This commit fixes cases that cannot be detected by RuboCop Ref: https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/FormatString
2023-06-05Fix Style/RedundantInterpolation offensesGeremia Taglialatela
`%` is an operation on `String` that will return a new `String`, so the interpolation is redundant Also adds a missing spec on PivotTable#rels_pn ``` IPS: uninterpolated: 4045715.7 i/s interpolated: 2359775.6 i/s - 1.71x (± 0.00) slower Memory: uninterpolated: 160 allocated interpolated: 232 allocated - 1.45x more ```
2023-06-05Fix Style/FormatString offensesGeremia Taglialatela
`Kernel#format` is faster and will avoid to allocate an array compared to `String#%`. ``` IPS: kernel_format: 3877614.2 i/s string_percent: 3531475.0 i/s - 1.10x (± 0.00) slower Memory: kernel_format: 160 allocated string_percent: 200 allocated - 1.25x more ```
2023-06-05Merge pull request #276 from tagliala/performance/avoid-unnecessary-method-callZsolt Kozaroczy
Avoid unnecessary calls to `parse_options`
2023-06-05Merge pull request #274 from tagliala/chore/fix-negated-if-offensesZsolt Kozaroczy
Fix negated if offenses
2023-06-03Avoid unnecessary calls to `parse_options`Geremia Taglialatela
`Cell#initialize` is one of the most used methods in the library, so a small improvement here will make a lot of difference on the overall performance. The impact of this change is negligible when `options` has elements but is substantial when it is empty. ``` Comparison (empty options): parse unless: 11636650.6 i/s parse: 8109825.4 i/s - 1.43x (± 0.00) slower Comparison (1 option): parse: 3548037.5 i/s parse unless: 3459029.7 i/s - same-ish: difference falls within error ```
2023-06-02Fix negated if offensesGeremia Taglialatela
Should also provide a negligible performance improvement, about 3% on Ruby 3.2 and 6% on Ruby 2.6 (M1 Pro)
2023-05-31Remove redundant parenthesesGeremia Taglialatela
- Style/ParenthesesAroundCondition - Style/RedundantParentheses - Style/TernaryParentheses `Style/ParenthesesAroundCondition` may be questionable, but a majority of comparison where not using parentheses, so offenses have been fixed for uniformity across the codebase
2023-05-31Use Ruby 1.9 hash syntaxGeremia Taglialatela
2023-05-31Merge pull request #268 from tagliala/chore/fix-symbol-proc-offensesZsolt Kozaroczy
Fix Style/SymbolProc offenses
2023-05-31Merge pull request #267 from tagliala/chore/freeze-mutable-constantsZsolt Kozaroczy
Fix Style/MutableConstant offenses
2023-05-31Merge pull request #266 from tagliala/chore/fix-yoda-condition-offenseZsolt Kozaroczy
Fix Style/YodaCondition offense
2023-05-31Merge pull request #265 from tagliala/chore/fix-conditional-assignment-offensesZsolt Kozaroczy
Fix Style/ConditionalAssignment offenses
2023-05-31Fix Style/SymbolProc offensesGeremia Taglialatela
This also provides a performance improvement ``` Comparison (array of 4 elements): map(&): 3643131.4 i/s map {}: 3488052.5 i/s - 1.04x (± 0.00) slower Comparison (array of 20 elements): map(&): 466013.9 i/s map {}: 408447.2 i/s - 1.14x (± 0.00) slower ```
2023-05-31Fix Style/MutableConstant offensesGeremia Taglialatela
2023-05-31Fix Style/YodaCondition offenseGeremia Taglialatela
2023-05-31Fix Style/ConditionalAssignment offensesGeremia Taglialatela
2023-05-31Merge pull request #249 from tagliala/chore/use-each-keyZsolt Kozaroczy
Fix Style/HashEachMethods offense
2023-05-31Fix string concatenation offenses in production codeGeremia Taglialatela
2023-05-31Merge pull request #264 from tagliala/chore/improve-cell-referenceZsolt Kozaroczy
Improve absolute cell reference method
2023-05-31Merge pull request #262 from tagliala/chore/fix-if-inside-else-offenseZsolt Kozaroczy
Fix Style/IfInsideElse offense
2023-05-31Merge pull request #260 from ↵Zsolt Kozaroczy
tagliala/chore/fix-redundant-file-extension-in-require-offenses Fix Style/RedundantFileExtensionInRequire offenses
2023-05-31Merge pull request #259 from tagliala/chore/enable-naming-copsZsolt Kozaroczy
Enable Naming cops
2023-05-31Merge pull request #255 from pkmiec/fixSimpleTypeListRegressionZsolt Kozaroczy
Use #== and #eql? from BasicObject
2023-05-27Improve absolute cell reference methodGeremia Taglialatela
Also inverts `string.match(REGEX)` with `REGEX.match(string)` because of uniformity and because it has been tested 5% more performant on Ruby 3.2. Performance on older Rubies is the same ``` REGEX.match(string): 1234330.7 i/s string.match(REGEX): 1172670.1 i/s - 1.05x (± 0.00) slower ```
2023-05-26Fix Style/HashEachMethods offenseGeremia Taglialatela
Replace `keys.each` with hash iteration ```rb MY_HASH = { first: '1', second: '2', third: '3' } %i[ips memory].each do |benchmark| Benchmark.send(benchmark) do |x| x.report("each_key") { MY_HASH.each_key { |k| MY_HASH[k] } } x.report("keys.each") { MY_HASH.keys.each { |k| MY_HASH[k] } } x.report("each") { MY_HASH.each { |k, v| v } } x.compare! end end ``` ``` IPS Comparison: each: 4283031.6 i/s each_key: 3683407.4 i/s - 1.16x (± 0.00) slower keys.each: 3387425.1 i/s - 1.26x (± 0.00) slower Memory Comparison: each_key: 0 allocated each: 0 allocated - same keys.each: 40 allocated - Infx more ```
2023-05-25Enable Naming copsGeremia Taglialatela
Also fix safe minor offenses - Naming/BinaryOperatorParameterName - Naming/HeredocDelimiterCase
2023-05-25Remove duplicate checkGeremia Taglialatela
Axlsx::Row is now an Array, so it is possible to remove the extra duplicate branch
2023-05-25Merge pull request #234 from tagliala/chore/fix-collection-literal-in-loopZsolt Kozaroczy
Do not use collection literal in loops
2023-05-25Merge pull request #212 from westonganger/masterZsolt Kozaroczy
Fix axlsx_styler gem deprecation error