Merge pull request #1250 from Shopify/static-registers/fetch-raise-on-missing

[StaticRegisters] Fetch raise on missing
This commit is contained in:
Thierry Joyal
2020-05-22 09:56:05 -04:00
committed by GitHub
3 changed files with 20 additions and 3 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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