From b892a73463db07a9b90a17f33a61ee48ecdcba79 Mon Sep 17 00:00:00 2001 From: Jonathan Cheatham Date: Tue, 22 Dec 2015 19:33:34 -0800 Subject: [PATCH] Ensure truncate is operating on a string --- lib/liquid/standardfilters.rb | 3 ++- test/integration/standard_filter_test.rb | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index ad3ca9b..4fb771c 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -63,10 +63,11 @@ module Liquid # Truncate a string down to x characters def truncate(input, length = 50, truncate_string = "...".freeze) return if input.nil? + input_str = input.to_s length = Utils.to_integer(length) l = length - truncate_string.length l = 0 if l < 0 - input.length > length ? input[0...l] + truncate_string : input + input_str.length > length ? input_str[0...l] + truncate_string : input_str end def truncatewords(input, words = 15, truncate_string = "...".freeze) diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 0ac8291..a3d468a 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -262,6 +262,10 @@ class StandardFiltersTest < Minitest::Test assert_template_result 'foobar', '{{ foo | last }}', 'foo' => [ThingWithToLiquid.new] end + def test_truncate_calls_to_liquid + assert_template_result "wo...", '{{ foo | truncate: 5 }}', "foo" => TestThing.new + end + def test_date assert_equal 'May', @filters.date(Time.parse("2006-05-05 10:00:00"), "%B") assert_equal 'June', @filters.date(Time.parse("2006-06-05 10:00:00"), "%B")