From e3fba19de00e93ce0a7a3f582b4ee23280103f87 Mon Sep 17 00:00:00 2001 From: Mike Angell Date: Sat, 31 Aug 2019 22:29:32 +1000 Subject: [PATCH] Allow default function to handle false as value --- lib/liquid/standardfilters.rb | 4 ++-- test/integration/standard_filter_test.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index afcf479..e1867f2 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -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 diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 6090951..7c32627 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -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