mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
Compare commits
4 Commits
styling-fi
...
format_fil
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2f5cf30f6 | ||
|
|
917ae7a6ab | ||
|
|
bfe4f60e13 | ||
|
|
32b9530985 |
@@ -391,6 +391,17 @@ module Liquid
|
||||
raise Liquid::FloatDomainError, e.message
|
||||
end
|
||||
|
||||
# Defaults are passed as nil so systems can easily override
|
||||
def format_number(input, options = {})
|
||||
options = {} unless options.is_a?(Hash)
|
||||
precision = options['precision'] || 2
|
||||
delimiter = options['delimiter'] || " ".freeze
|
||||
separator = options['separator'] || ".".freeze
|
||||
return input if (prec = Utils.to_number(precision).to_i) < 0
|
||||
whole_part, decimal_part = Kernel.format("%.#{prec}f", Utils.to_number(input)).split('.')
|
||||
[whole_part.gsub(/(\d)(?=\d{3}+$)/, "\\1#{delimiter}"), decimal_part].compact.join(separator.to_s)
|
||||
end
|
||||
|
||||
def ceil(input)
|
||||
Utils.to_number(input).ceil.to_i
|
||||
rescue ::FloatDomainError => e
|
||||
|
||||
@@ -610,6 +610,25 @@ class StandardFiltersTest < Minitest::Test
|
||||
assert_template_result "4", "{{ price | round }}", 'price' => NumberLikeThing.new(4.3)
|
||||
end
|
||||
|
||||
def test_format_number
|
||||
assert_template_result "4.60", "{{ input | format_number }}", 'input' => 4.6
|
||||
assert_template_result "4.30", "{{ '4.3' | format_number }}"
|
||||
assert_template_result "4.56", "{{ input | format_number: precision: 2 }}", 'input' => 4.5612
|
||||
assert_template_result "5", "{{ price | format_number: precision: 0 }}", 'price' => NumberLikeThing.new(4.6)
|
||||
assert_template_result "4", "{{ price | format_number: precision: 0 }}", 'price' => NumberLikeThing.new(4.3)
|
||||
assert_template_result "4.30", "{{ price | format_number: precision: 2 }}", 'price' => NumberLikeThing.new(4.3)
|
||||
assert_template_result "5.0000000", "{{ price | format_number: precision: 7 }}", 'price' => 5
|
||||
assert_template_result "50", "{{ price | format_number: precision: -1 }}", 'price' => 50
|
||||
assert_template_result "50.00", "{{ price | format_number: precision: A }}", 'price' => 50
|
||||
assert_template_result "50.00", "{{ price | format_number: precision: '2e' }}", 'price' => 50
|
||||
assert_template_result "50 000 000", "{{ price | format_number: precision: 0 }}", 'price' => 50000000
|
||||
assert_template_result "50 000 000.00", "{{ price | format_number }}", 'price' => 50000000
|
||||
assert_template_result "50000000.00", "{{ price | format_number: precision: 2, delimiter: '', separator: '.'}}", 'price' => 50000000
|
||||
assert_template_result "50$000$000#00", "{{ price | format_number: precision: 2, delimiter: '$', separator:'#'}}", 'price' => 50000000
|
||||
assert_template_result "-50$000$000#00", "{{ price | format_number: precision: 2, delimiter: '$', separator: '#'}}", 'price' => -50000000
|
||||
assert_template_result "-50 000 000.00", "{{ price | format_number: precision: A, delimiter: A, separator: A}}", 'price' => -50000000
|
||||
end
|
||||
|
||||
def test_ceil
|
||||
assert_template_result "5", "{{ input | ceil }}", 'input' => 4.6
|
||||
assert_template_result "5", "{{ '4.3' | ceil }}"
|
||||
|
||||
Reference in New Issue
Block a user