From f93243cc1ad8e9eadab3949d94972c311fe19314 Mon Sep 17 00:00:00 2001 From: Florian Weingarten Date: Thu, 31 Mar 2016 09:27:13 -0400 Subject: [PATCH] abs filter --- lib/liquid/standardfilters.rb | 6 ++++++ test/integration/standard_filter_test.rb | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 206e66a8..90dfdd3a 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -289,6 +289,12 @@ module Liquid array.last if array.respond_to?(:last) end + # absolute value + def abs(input) + result = Utils.to_number(input).abs + result.is_a?(BigDecimal) ? result.to_f : result + end + # addition def plus(input, operand) apply_operation(input, operand, :+) diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index 98f37f54..a20e1c39 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -385,6 +385,19 @@ class StandardFiltersTest < Minitest::Test assert_template_result "5", "{{ price | minus:'2' }}", 'price' => NumberLikeThing.new(7) end + def test_abs + assert_template_result "17", "{{ 17 | abs }}" + assert_template_result "17", "{{ -17 | abs }}" + assert_template_result "17", "{{ '17' | abs }}" + assert_template_result "17", "{{ '-17' | abs }}" + assert_template_result "0", "{{ 0 | abs }}" + assert_template_result "0", "{{ '0' | abs }}" + assert_template_result "17.42", "{{ 17.42 | abs }}" + assert_template_result "17.42", "{{ -17.42 | abs }}" + assert_template_result "17.42", "{{ '17.42' | abs }}" + assert_template_result "17.42", "{{ '-17.42' | abs }}" + end + def test_times assert_template_result "12", "{{ 3 | times:4 }}" assert_template_result "0", "{{ 'foo' | times:4 }}"