diff --git a/History.md b/History.md index e148af9..35fde61 100644 --- a/History.md +++ b/History.md @@ -3,6 +3,7 @@ ## 3.0.0 / not yet released / branch "master" * ... +* Add default filter to standard filters, see #267 [Derrick Reimer, djreimer] * Add optional strict parsing and warn parsing, see #235 [Tristan Hume, trishume] * Add I18n syntax error translation, see #241 [Simon Hørup Eskildsen, Sirupsen] * Make sort filter work on enumerable drops, see #239 [Florian Weingarten, fw42] diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 718a8d9..c938f3a 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -245,6 +245,11 @@ module Liquid apply_operation(input, operand, :%) end + def default(input, default_value = "") + is_blank = input.respond_to?(:empty?) ? input.empty? : !input + is_blank ? default_value : input + end + private def flatten_if_necessary(input) diff --git a/test/liquid/standard_filter_test.rb b/test/liquid/standard_filter_test.rb index fc1a3cb..91c219d 100644 --- a/test/liquid/standard_filter_test.rb +++ b/test/liquid/standard_filter_test.rb @@ -274,6 +274,15 @@ class StandardFiltersTest < Test::Unit::TestCase assert_template_result('abc',"{{ a | prepend: b}}",assigns) end + def test_default + assert_equal "foo", @filters.default("foo", "bar") + assert_equal "bar", @filters.default(nil, "bar") + assert_equal "bar", @filters.default("", "bar") + assert_equal "bar", @filters.default(false, "bar") + assert_equal "bar", @filters.default([], "bar") + assert_equal "bar", @filters.default({}, "bar") + end + def test_cannot_access_private_methods assert_template_result('a',"{{ 'a' | to_number }}") end