Compare commits

...

9 Commits

Author SHA1 Message Date
Mike Angell
12d047aef0 document default filter 2019-10-08 18:14:54 +11:00
Mike Angell
c109615da7 Update syntax 2019-10-07 17:45:47 +11:00
Mike Angell
a04c23eb38 Merge branch 'master' into default-filter-false-fix 2019-10-07 17:33:41 +11:00
Mike Angell
afbe7b930f Use named param format from liquid 2019-10-02 21:55:59 +10:00
Mike Angell
f7076e1682 add brackets to make intention clearer 2019-10-02 21:41:15 +10:00
Mike Angell
135a4bc84d Remove redundant freeze 2019-10-02 21:36:08 +10:00
Mike Angell
7ebf1aeef2 Merge branch 'master' into default-filter-false-fix 2019-10-02 21:34:00 +10:00
Mike Angell
9bd5362ca1 Change to named parameter 2019-10-02 21:33:02 +10:00
Mike Angell
e3fba19de0 Allow default function to handle false as value 2019-08-31 22:29:32 +10:00
2 changed files with 25 additions and 7 deletions

View File

@@ -421,13 +421,20 @@ module Liquid
result.is_a?(BigDecimal) ? result.to_f : result
end
def default(input, default_value = '')
if !input || input.respond_to?(:empty?) && input.empty?
Usage.increment("default_filter_received_false_value") if input == false # See https://github.com/Shopify/liquid/issues/1127
default_value
else
input
end
# Set a default value when the input is nil, false or empty
#
# Example:
# {{ product.title | default: "No Title" }}
#
# Use `allow_false` when an input should only be tested against nil or empty and not false.
#
# Example:
# {{ product.title | default: "No Title", allow_false: true }}
#
def default(input, default_value = '', options = {})
options = {} unless options.is_a?(Hash)
false_check = options['allow_false'] ? input.nil? : !input
false_check || (input.respond_to?(:empty?) && input.empty?) ? default_value : input
end
private

View File

@@ -685,6 +685,17 @@ class StandardFiltersTest < Minitest::Test
assert_equal("bar", @filters.default(false, "bar"))
assert_equal("bar", @filters.default([], "bar"))
assert_equal("bar", @filters.default({}, "bar"))
assert_template_result('bar', "{{ false | default: 'bar' }}")
end
def test_default_handle_false
assert_equal("foo", @filters.default("foo", "bar", "allow_false" => true))
assert_equal("bar", @filters.default(nil, "bar", "allow_false" => true))
assert_equal("bar", @filters.default("", "bar", "allow_false" => true))
assert_equal(false, @filters.default(false, "bar", "allow_false" => true))
assert_equal("bar", @filters.default([], "bar", "allow_false" => true))
assert_equal("bar", @filters.default({}, "bar", "allow_false" => true))
assert_template_result('false', "{{ false | default: 'bar', allow_false: true }}")
end
def test_cannot_access_private_methods