From 6aa6f52850fc4a2e361a654a14a91199c6c34660 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Tue, 8 Oct 2024 16:21:36 -0700 Subject: [PATCH] Avoid spurious frozen string literal warnings on Ruby 3.4.0-preview2 --- CHANGELOG | 4 ++++ lib/erubi.rb | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 81be9ff..9d8e8be 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +=== master + +* Avoid spurious frozen string literal warnings on Ruby 3.4.0-preview2 (jeremyevans) + === 1.13.0 (2024-06-13) * Define Erubi.h as a module function (jeremyevans) diff --git a/lib/erubi.rb b/lib/erubi.rb index dd7db06..35ea4fd 100644 --- a/lib/erubi.rb +++ b/lib/erubi.rb @@ -205,16 +205,25 @@ def initialize(input, properties={}) private + if RUBY_VERSION >= '2.3' + def _dup_string_if_frozen(string) + +string + end + # :nocov: + else + def _dup_string_if_frozen(string) + string.frozen? ? string.dup : string + end + end + # :nocov: + # Add raw text to the template. Modifies argument if argument is mutable as a memory optimization. # Must be called with a string, cannot be called with nil (Rails's subclass depends on it). def add_text(text) return if text.empty? - if text.frozen? - text = text.gsub(/['\\]/, '\\\\\&') - else - text.gsub!(/['\\]/, '\\\\\&') - end + text = _dup_string_if_frozen(text) + text.gsub!(/['\\]/, '\\\\\&') with_buffer{@src << " << '" << text << @text_end} end