Skip to content

Commit

Permalink
Add to_integer filter
Browse files Browse the repository at this point in the history
  • Loading branch information
crispgm committed Jul 13, 2016
1 parent 5194d1a commit 9336ad0
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
9 changes: 8 additions & 1 deletion lib/jekyll/filters.rb
Expand Up @@ -266,7 +266,14 @@ def where_exp(input, variable, expression)
#
# 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
Expand Down
32 changes: 32 additions & 0 deletions test/test_filters.rb
Expand Up @@ -26,6 +26,7 @@ def initialize(opts = {})
@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" },
Expand Down Expand Up @@ -235,6 +236,13 @@ def initialize(opts = {})
@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
Expand Down Expand Up @@ -635,6 +643,30 @@ def to_liquid
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 "{&quot;&lt;a&gt;&quot;=&gt;1}", @filter.inspect({ "<a>" => 1 })
Expand Down

0 comments on commit 9336ad0

Please sign in to comment.