From b9979088ec7a642a0620f46d970249798e3f035a Mon Sep 17 00:00:00 2001 From: Thierry Joyal Date: Thu, 21 May 2020 12:31:32 -0400 Subject: [PATCH] [StaticRegisters] Fetch raise on missing Co-authored-by: Dylan Thacker-Smith --- History.md | 1 + lib/liquid/static_registers.rb | 12 ++++++++++-- test/unit/static_registers_unit_test.rb | 10 +++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/History.md b/History.md index 4781b23..c4b6d0f 100644 --- a/History.md +++ b/History.md @@ -4,6 +4,7 @@ * Split Strainer class as a factory and a template (#1208) [Thierry Joyal] * Remove handling of a nil context in the Strainer class (#1218) [Thierry Joyal] +* StaticRegisters#fetch to raise on missing key (#1250) [Thierry Joyal] ## 4.0.3 / 2019-03-12 diff --git a/lib/liquid/static_registers.rb b/lib/liquid/static_registers.rb index da2c2c3..e8fdd9b 100644 --- a/lib/liquid/static_registers.rb +++ b/lib/liquid/static_registers.rb @@ -25,8 +25,16 @@ module Liquid @registers.delete(key) end - def fetch(key, default = nil) - key?(key) ? self[key] : default + UNDEFINED = Object.new + + def fetch(key, default = UNDEFINED, &block) + if @registers.key?(key) + @registers.fetch(key) + elsif default != UNDEFINED + @static.fetch(key, default, &block) + else + @static.fetch(key, &block) + end end def key?(key) diff --git a/test/unit/static_registers_unit_test.rb b/test/unit/static_registers_unit_test.rb index 37a2c28..80bbf39 100644 --- a/test/unit/static_registers_unit_test.rb +++ b/test/unit/static_registers_unit_test.rb @@ -51,7 +51,15 @@ class StaticRegistersUnitTest < Minitest::Test assert_equal("one", static_register.fetch(:one)) assert_equal(3, static_register.fetch("two")) assert_nil(static_register.fetch(false)) - assert_nil(static_register.fetch("unknown")) + + assert_raises(KeyError) do + static_register.fetch(:unknown) + end + assert_equal("default", static_register.fetch(:unknown, "default")) + + static_register[:unknown] = "known" + assert_equal("known", static_register.fetch(:unknown)) + assert_equal("known", static_register.fetch(:unknown, "default")) end def test_fetch_default