Merge pull request #954 from Shopify/max-min-filters

Add max and min filters
This commit is contained in:
Nithin Bekal
2017-11-30 14:18:43 -05:00
committed by GitHub
2 changed files with 38 additions and 0 deletions

View File

@@ -355,6 +355,22 @@ module Liquid
raise Liquid::FloatDomainError, e.message
end
def max(input, n)
max_value = Utils.to_number(n)
result = Utils.to_number(input)
result = max_value if result > max_value
result.is_a?(BigDecimal) ? result.to_f : result
end
def min(input, n)
min_value = Utils.to_number(n)
result = Utils.to_number(input)
result = min_value if result < min_value
result.is_a?(BigDecimal) ? result.to_f : result
end
def default(input, default_value = ''.freeze)
if !input || input.respond_to?(:empty?) && input.empty?
default_value

View File

@@ -498,6 +498,28 @@ class StandardFiltersTest < Minitest::Test
assert_template_result "5", "{{ price | floor }}", 'price' => NumberLikeThing.new(5.4)
end
def test_max
assert_template_result "4", "{{ 5 | max:4 }}"
assert_template_result "5", "{{ 5 | max:5 }}"
assert_template_result "5", "{{ 5 | max:6 }}"
assert_template_result "4.5", "{{ 4.5 | max:5 }}"
assert_template_result "5", "{{ width | max:5 }}", 'width' => NumberLikeThing.new(6)
assert_template_result "4", "{{ width | max:5 }}", 'width' => NumberLikeThing.new(4)
assert_template_result "4", "{{ 5 | max: width }}", 'width' => NumberLikeThing.new(4)
end
def test_min
assert_template_result "5", "{{ 5 | min:4 }}"
assert_template_result "5", "{{ 5 | min:5 }}"
assert_template_result "6", "{{ 5 | min:6 }}"
assert_template_result "5", "{{ 4.5 | min:5 }}"
assert_template_result "6", "{{ width | min:5 }}", 'width' => NumberLikeThing.new(6)
assert_template_result "5", "{{ width | min:5 }}", 'width' => NumberLikeThing.new(4)
assert_template_result "6", "{{ 5 | min: width }}", 'width' => NumberLikeThing.new(6)
end
def test_append
assigns = { 'a' => 'bc', 'b' => 'd' }
assert_template_result('bcd', "{{ a | append: 'd'}}", assigns)