diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 71e0dabd..6e794bb0 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -266,7 +266,14 @@ module Jekyll # # Returns the integer value def to_integer(input) - input.to_i + return input if input.is_a?(Integer) + return 1 if input == true + return 0 if input == false + begin + input.to_i + rescue + raise ArgumentError, "Invalid input object type." + end end # Sort an array of objects diff --git a/test/test_filters.rb b/test/test_filters.rb index fa0f9e52..c916bab9 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -26,6 +26,7 @@ class TestFilters < JekyllUnitTest @sample_date = Date.parse("2013-03-27") @time_as_string = "September 11, 2001 12:46:30 -0000" @time_as_numeric = 1_399_680_607 + @integer_as_string = "142857" @array_of_objects = [ { "color" => "red", "size" => "large" }, { "color" => "red", "size" => "medium" }, @@ -235,6 +236,13 @@ class TestFilters < JekyllUnitTest @filter.date_to_rfc822(@time_as_string) ) end + + should "convert a String to Integer" do + assert_equal( + 142857, + @filter.to_integer(@integer_as_string) + ) + end end context "with a Numeric object" do @@ -635,6 +643,30 @@ class TestFilters < JekyllUnitTest end end + context "to_integer filter" do + should "raise Exception when input is not integer or string" do + err_msg = "Invalid input object type." + err = assert_raises ArgumentError do + @filter.to_integer([1, 2]) + end + assert_equal err_msg, err.message + end + should "return 0 when input is nil" do + assert_equal 0, @filter.to_integer(nil) + end + should "return integer when input is boolean" do + assert_equal 0, @filter.to_integer(false) + assert_equal 1, @filter.to_integer(true) + end + should "return integers" do + assert_equal 0, @filter.to_integer(0) + assert_equal 1, @filter.to_integer(1) + assert_equal 1, @filter.to_integer(1.42857) + assert_equal -1, @filter.to_integer(-1) + assert_equal -1, @filter.to_integer(-1.42857) + end + end + context "inspect filter" do should "return a HTML-escaped string representation of an object" do assert_equal "{"<a>"=>1}", @filter.inspect({ "" => 1 })