From 5194d1a42ccfceb2747a03c06e0b7ac7912f44b9 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Wed, 13 Jul 2016 10:52:18 +0800 Subject: [PATCH 01/11] Add to_integer filter --- lib/jekyll/filters.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 231eb7b6..71e0dabd 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -260,6 +260,15 @@ module Jekyll end end + # Convert the input into integer + # + # input - the object string + # + # Returns the integer value + def to_integer(input) + input.to_i + end + # Sort an array of objects # # input - the object array From 9336ad0fcf911e4fcde0d32abfeee464674f0f01 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Wed, 13 Jul 2016 14:47:14 +0800 Subject: [PATCH 02/11] Add to_integer filter --- lib/jekyll/filters.rb | 9 ++++++++- test/test_filters.rb | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) 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 }) From 218c7039a9b09504d81bdcf1617981eb9c788616 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Wed, 13 Jul 2016 15:13:20 +0800 Subject: [PATCH 03/11] Fix test_filter: parenthesize the method --- test/test_filters.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_filters.rb b/test/test_filters.rb index c916bab9..55856044 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -662,8 +662,8 @@ class TestFilters < JekyllUnitTest 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) + assert_equal(-1, @filter.to_integer(-1)) + assert_equal(-1, @filter.to_integer(-1.42857)) end end From 5c6c01793c940569f29880eff338da566f406a0b Mon Sep 17 00:00:00 2001 From: David Zhang Date: Wed, 13 Jul 2016 15:32:34 +0800 Subject: [PATCH 04/11] Fix offense: seperate every 3 digits with _ --- test/test_filters.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_filters.rb b/test/test_filters.rb index 55856044..06fa59ff 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -239,7 +239,7 @@ class TestFilters < JekyllUnitTest should "convert a String to Integer" do assert_equal( - 142857, + 142_857, @filter.to_integer(@integer_as_string) ) end From 5e760a206ace6095c6adb99ec85fb50812a44a61 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Thu, 14 Jul 2016 11:05:30 +0800 Subject: [PATCH 05/11] rubocop:disable Metrics/ModuleLength --- lib/jekyll/filters.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 6e794bb0..73e66229 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -4,6 +4,7 @@ require "date" require "liquid" module Jekyll + # rubocop:disable Metrics/ModuleLength module Filters # Convert a Markdown string into HTML output. # From b1f9a0809c19929305470ed6e0437635cb121cc9 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Thu, 14 Jul 2016 11:27:47 +0800 Subject: [PATCH 06/11] More descriptive exception --- lib/jekyll/filters.rb | 2 +- test/test_filters.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 73e66229..06a4147f 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -273,7 +273,7 @@ module Jekyll begin input.to_i rescue - raise ArgumentError, "Invalid input object type." + raise ArgumentError, "Object '#{input.inspect}' could not be converted into an integer." end end diff --git a/test/test_filters.rb b/test/test_filters.rb index 06fa59ff..c8d4a68b 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -645,7 +645,7 @@ class TestFilters < JekyllUnitTest context "to_integer filter" do should "raise Exception when input is not integer or string" do - err_msg = "Invalid input object type." + err_msg = "Object '[1, 2]' could not be converted into an integer." err = assert_raises ArgumentError do @filter.to_integer([1, 2]) end From e503c17dfa1de5e06a8f461201e74c43b1442ae3 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Thu, 14 Jul 2016 12:00:19 +0800 Subject: [PATCH 07/11] Fix fmt error --- lib/jekyll/filters.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 06a4147f..1d89b830 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -273,7 +273,8 @@ module Jekyll begin input.to_i rescue - raise ArgumentError, "Object '#{input.inspect}' could not be converted into an integer." + raise ArgumentError, + "Object '#{input.inspect}' could not be converted into an integer." end end From b44457a80ba72500675e06e4c84439b130ed9f3d Mon Sep 17 00:00:00 2001 From: David Zhang Date: Thu, 14 Jul 2016 13:38:14 +0800 Subject: [PATCH 08/11] Remove if stmt for integer input --- lib/jekyll/filters.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 1d89b830..d688fca9 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -267,7 +267,6 @@ module Jekyll # # Returns the integer value def to_integer(input) - return input if input.is_a?(Integer) return 1 if input == true return 0 if input == false begin From 3435b5ddac271b462602e688e6526760a87da86f Mon Sep 17 00:00:00 2001 From: David Zhang Date: Thu, 14 Jul 2016 14:06:25 +0800 Subject: [PATCH 09/11] Remove rescue for to_i --- lib/jekyll/filters.rb | 8 +------- test/test_filters.rb | 9 +++++++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index d688fca9..0ab50d49 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -4,7 +4,6 @@ require "date" require "liquid" module Jekyll - # rubocop:disable Metrics/ModuleLength module Filters # Convert a Markdown string into HTML output. # @@ -269,12 +268,7 @@ module Jekyll def to_integer(input) return 1 if input == true return 0 if input == false - begin - input.to_i - rescue - raise ArgumentError, - "Object '#{input.inspect}' could not be converted into an integer." - end + input.to_i end # Sort an array of objects diff --git a/test/test_filters.rb b/test/test_filters.rb index c8d4a68b..bb979524 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -645,8 +645,13 @@ class TestFilters < JekyllUnitTest context "to_integer filter" do should "raise Exception when input is not integer or string" do - err_msg = "Object '[1, 2]' could not be converted into an integer." - err = assert_raises ArgumentError do + err_msg = <<-EOS.strip! +undefined method `to_i' for [1, 2]:Array +Did you mean? to_s + to_a + to_h +EOS + err = assert_raises NoMethodError do @filter.to_integer([1, 2]) end assert_equal err_msg, err.message From 9ef9c2fb644e1ec3b2f91aa5a598ddfa0e6a4519 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Thu, 14 Jul 2016 14:15:23 +0800 Subject: [PATCH 10/11] Remove error message assert --- test/test_filters.rb | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/test/test_filters.rb b/test/test_filters.rb index bb979524..399ade72 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -645,16 +645,9 @@ class TestFilters < JekyllUnitTest context "to_integer filter" do should "raise Exception when input is not integer or string" do - err_msg = <<-EOS.strip! -undefined method `to_i' for [1, 2]:Array -Did you mean? to_s - to_a - to_h -EOS - err = assert_raises NoMethodError do + assert_raises NoMethodError 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) From 20b3758edb05130135cfb620a8aa5ca0db059679 Mon Sep 17 00:00:00 2001 From: David Zhang Date: Wed, 13 Jul 2016 10:52:18 +0800 Subject: [PATCH 11/11] 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 })