mirror of
https://github.com/kemko/liquid.git
synced 2026-01-02 00:05:42 +03:00
Compare commits
4 Commits
liquid-usa
...
format_fil
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2f5cf30f6 | ||
|
|
917ae7a6ab | ||
|
|
bfe4f60e13 | ||
|
|
32b9530985 |
2
Gemfile
2
Gemfile
@@ -20,6 +20,6 @@ group :test do
|
||||
gem 'rubocop-performance', require: false
|
||||
|
||||
platform :mri, :truffleruby do
|
||||
gem 'liquid-c', github: 'Shopify/liquid-c', ref: 'master'
|
||||
gem 'liquid-c', github: 'Shopify/liquid-c', ref: 'liquid-tag'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -106,9 +106,3 @@ template = Liquid::Template.parse("{{x}} {{y}}")
|
||||
template.render!({ 'x' => 1}, { strict_variables: true })
|
||||
#=> Liquid::UndefinedVariable: Liquid error: undefined variable y
|
||||
```
|
||||
|
||||
### Usage tracking
|
||||
|
||||
To help track usages of a feature or code path in production, we have released opt-in usage tracking. To enable this, we provide an empty `Liquid:: Usage.increment` method which you can customize to your needs. The feature is well suited to https://github.com/Shopify/statsd-instrument. However, the choice of implementation is up to you.
|
||||
|
||||
Once you have enabled usage tracking, we recommend reporting any events through Github Issues that your system may be logging. It is highly likely this event has been added to consider deprecating or improving code specific to this event, so please raise any concerns.
|
||||
@@ -75,7 +75,6 @@ require 'liquid/utils'
|
||||
require 'liquid/tokenizer'
|
||||
require 'liquid/parse_context'
|
||||
require 'liquid/partial_cache'
|
||||
require 'liquid/usage'
|
||||
|
||||
# Load all the tags of the standard library
|
||||
#
|
||||
|
||||
@@ -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
|
||||
@@ -421,7 +432,6 @@ module Liquid
|
||||
|
||||
def default(input, default_value = ''.freeze)
|
||||
if !input || input.respond_to?(:empty?) && input.empty?
|
||||
Usage.increment("default_filter_received_false_value") if input == false # See https://github.com/Shopify/liquid/issues/1127
|
||||
default_value
|
||||
else
|
||||
input
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
module Liquid
|
||||
class Render < Tag
|
||||
SYNTAX = /(#{QuotedString})#{QuotedFragment}*/o
|
||||
Syntax = /(#{QuotedString})#{QuotedFragment}*/o
|
||||
|
||||
attr_reader :template_name_expr, :attributes
|
||||
|
||||
def initialize(tag_name, markup, options)
|
||||
super
|
||||
|
||||
raise SyntaxError.new(options[:locale].t("errors.syntax.render".freeze)) unless markup =~ SYNTAX
|
||||
raise SyntaxError.new(options[:locale].t("errors.syntax.render".freeze)) unless markup =~ Syntax
|
||||
|
||||
template_name = $1
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
module Liquid
|
||||
module Usage
|
||||
def self.increment(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -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 }}"
|
||||
|
||||
@@ -110,7 +110,7 @@ class RenderTagTest < Minitest::Test
|
||||
file_system = StubFileSystem.new('snippet' => 'echo')
|
||||
assert_equal 'echoecho',
|
||||
Template.parse('{% render "snippet" %}{% render "snippet" %}')
|
||||
.render!({}, registers: { file_system: file_system })
|
||||
.render!({}, registers: { file_system: file_system })
|
||||
assert_equal 1, file_system.file_read_count
|
||||
end
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ class PartialCacheUnitTest < Minitest::Test
|
||||
def test_uses_the_file_system_register_if_present
|
||||
context = Liquid::Context.build(
|
||||
registers: {
|
||||
file_system: StubFileSystem.new('my_partial' => 'my partial body'),
|
||||
file_system: StubFileSystem.new('my_partial' => 'my partial body')
|
||||
}
|
||||
)
|
||||
|
||||
@@ -41,12 +41,12 @@ class PartialCacheUnitTest < Minitest::Test
|
||||
)
|
||||
context_one = Liquid::Context.build(
|
||||
registers: {
|
||||
file_system: shared_file_system,
|
||||
file_system: shared_file_system
|
||||
}
|
||||
)
|
||||
context_two = Liquid::Context.build(
|
||||
registers: {
|
||||
file_system: shared_file_system,
|
||||
file_system: shared_file_system
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user