Change behaviour of arithmetic filters to cast arguments to numbers

This commit is contained in:
James MacAulay
2010-02-04 11:45:55 -05:00
parent 97548d4f01
commit fce8bcb1e7
2 changed files with 32 additions and 10 deletions
+17 -4
View File
@@ -185,22 +185,35 @@ module Liquid
# addition
def plus(input, operand)
input + operand if input.respond_to?('+')
to_number(input) + to_number(operand)
end
# subtraction
def minus(input, operand)
input - operand if input.respond_to?('-')
to_number(input) - to_number(operand)
end
# multiplication
def times(input, operand)
input * operand if input.respond_to?('*')
to_number(input) * to_number(operand)
end
# division
def divided_by(input, operand)
input / operand if input.respond_to?('/')
to_number(input) / to_number(operand)
end
private
def to_number(obj)
case obj
when Numeric
obj
when String
(obj.strip =~ /^\d+\.\d+$/) ? obj.to_f : obj.to_i
else
0
end
end
end