From 99ded8bab0c42f1ed47a5af20f77ade383b7ab82 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Sat, 19 Jan 2019 11:35:44 +0900 Subject: [PATCH] Respect changes in Haml::Options.defaults in `Haml::TempleEngine` options. Since the feature has been noted here: https://github.com/haml/haml/blob/master/REFERENCE.md#options Note that `Haml::Engine#initialize` in Haml 4 calls `#initialize_encoding` with the argument `options[:encoding]`, which should return `nil` instead of `"UTF-8"` (default of `Haml::Options`), so this is the most backward-compatible behavior. Fix https://github.com/haml/haml/issues/1004 --- lib/haml/engine.rb | 3 +++ test/engine_test.rb | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/haml/engine.rb b/lib/haml/engine.rb index a8ada8b7b9..9ec1582fc6 100644 --- a/lib/haml/engine.rb +++ b/lib/haml/engine.rb @@ -51,6 +51,9 @@ def options_for_buffer # see {file:REFERENCE.md#options the Haml options documentation} # @raise [Haml::Error] if there's a Haml syntax error in the template def initialize(template, options = {}) + # Reflect changes of `Haml::Options.defaults` to `Haml::TempleEngine` options, but `#initialize_encoding` + # should be run against the arguemnt `options[:encoding]` for backward compatibility with old `Haml::Engine`. + options = Options.defaults.dup.tap { |o| o.delete(:encoding) }.merge!(options) @options = Options.new(options) @template = check_haml_encoding(template) do |msg, line| diff --git a/test/engine_test.rb b/test/engine_test.rb index ee0213eaa8..bdaf72168b 100644 --- a/test/engine_test.rb +++ b/test/engine_test.rb @@ -2141,6 +2141,14 @@ def test_unsafe_static_attribute_name_raises_invalid_attribute_name_error end end + def test_engine_reflects_defaults + defaults = Haml::Options.defaults.dup + Haml::Options.defaults[:attr_wrapper] = '"' + assert_equal %Q[\n], Haml::Engine.new('%a(a="a")').render + ensure + Haml::Options.defaults.replace(defaults) + end + private def assert_valid_encoding_comment(comment)