From 20b3758edb05130135cfb620a8aa5ca0db059679 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Wed, 13 Jul 2016 10:52:18 +0800 Subject: [PATCH] Add to_integer filter Add to_integer filter Fix test_filter: parenthesize the method Fix offense: seperate every 3 digits with _ rubocop:disable Metrics/ModuleLength More descriptive exception Fix fmt error Remove if stmt for integer input Remove rescue for to_i Remove error message assert --- lib/jekyll/filters.rb | 11 +++++++++++ test/test_filters.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 231eb7b6..0ab50d49 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -260,6 +260,17 @@ module Jekyll end end + # Convert the input into integer + # + # input - the object string + # + # Returns the integer value + def to_integer(input) + return 1 if input == true + return 0 if input == false + input.to_i + end + # Sort an array of objects # # input - the object array diff --git a/test/test_filters.rb b/test/test_filters.rb index fa0f9e52..399ade72 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( + 142_857, + @filter.to_integer(@integer_as_string) + ) + end end context "with a Numeric object" do @@ -635,6 +643,28 @@ class TestFilters < JekyllUnitTest end end + context "to_integer filter" do + should "raise Exception when input is not integer or string" do + assert_raises NoMethodError do + @filter.to_integer([1, 2]) + end + 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 })