Allow default function to handle false as value

This commit is contained in:
Mike Angell
2019-08-31 22:29:32 +10:00
parent ddb45cd658
commit e3fba19de0
2 changed files with 11 additions and 2 deletions

View File

@@ -419,8 +419,8 @@ module Liquid
result.is_a?(BigDecimal) ? result.to_f : result
end
def default(input, default_value = ''.freeze)
if !input || input.respond_to?(:empty?) && input.empty?
def default(input, default_value = ''.freeze, false_as_missing = true)
if (false_as_missing ? !input : input.nil?) || input.respond_to?(:empty?) && input.empty?
default_value
else
input

View File

@@ -683,6 +683,15 @@ class StandardFiltersTest < Minitest::Test
assert_equal "bar", @filters.default({}, "bar")
end
def test_default_handle_false
assert_equal "foo", @filters.default("foo", "bar", false)
assert_equal "bar", @filters.default(nil, "bar", false)
assert_equal "bar", @filters.default("", "bar", false)
assert_equal false, @filters.default(false, "bar", false)
assert_equal "bar", @filters.default([], "bar", false)
assert_equal "bar", @filters.default({}, "bar", false)
end
def test_cannot_access_private_methods
assert_template_result('a', "{{ 'a' | to_number }}")
end