From 355b04c7ddd803659c5828a800ecf0949b20d80d Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Wed, 13 Oct 2021 11:27:47 +0200 Subject: [PATCH] Better ERB keyword argument check --- CHANGELOG.md | 1 + lib/sprockets/erb_processor.rb | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72574d902..954312512 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Get upgrade notes from Sprockets 3.x to 4.x at https://github.com/rails/sprocket ## Master +- Better detect the ERB version to avoid deprecation warnings. [#719](https://github.com/rails/sprockets/pull/719) - Allow assets already fingerprinted to be served through `Sprockets::Server` - Do not fingerprint files that already contain a valid digest in their name - Remove remaining support for Ruby < 2.4.[#672](https://github.com/rails/sprockets/pull/672) diff --git a/lib/sprockets/erb_processor.rb b/lib/sprockets/erb_processor.rb index 632dd7d19..ead358278 100644 --- a/lib/sprockets/erb_processor.rb +++ b/lib/sprockets/erb_processor.rb @@ -18,8 +18,7 @@ def initialize(&block) end def call(input) - match = ERB.version.match(/\Aerb\.rb \[(?[^ ]+) /) - if match && match[:version] >= "2.2.0" # Ruby 2.6+ + if keyword_constructor? # Ruby 2.6+ engine = ::ERB.new(input[:data], trim_mode: '<>') else engine = ::ERB.new(input[:data], nil, '<>') @@ -34,4 +33,11 @@ def call(input) data = engine.result(context.instance_eval('binding')) context.metadata.merge(data: data) end + + private + + def keyword_constructor? + return @keyword_constructor if defined? @keyword_constructor + @keyword_constructor = ::ERB.instance_method(:initialize).parameters.include?([:key, :trim_mode]) + end end