mirror of
https://github.com/kemko/liquid.git
synced 2026-01-02 16:25:42 +03:00
Compare commits
8 Commits
v4.0.0.rc2
...
range-to_l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
00f53b16e8 | ||
|
|
e4cf55b112 | ||
|
|
5bb211d933 | ||
|
|
6adc431a19 | ||
|
|
23d2beed41 | ||
|
|
a80ecb7678 | ||
|
|
361c695264 | ||
|
|
f93243cc1a |
@@ -25,6 +25,12 @@ class Numeric # :nodoc:
|
||||
end
|
||||
end
|
||||
|
||||
class Range # :nodoc:
|
||||
def to_liquid
|
||||
self
|
||||
end
|
||||
end
|
||||
|
||||
class Time # :nodoc:
|
||||
def to_liquid
|
||||
self
|
||||
|
||||
@@ -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, :+)
|
||||
|
||||
@@ -6,9 +6,7 @@ module Liquid
|
||||
def initialize(tag_name, markup, parse_context)
|
||||
super
|
||||
|
||||
unless markup =~ Syntax
|
||||
raise SyntaxError.new(parse_context.locale.t("errors.syntax.tag_unexpected_args".freeze, tag: tag_name))
|
||||
end
|
||||
ensure_valid_markup(tag_name, markup, parse_context)
|
||||
end
|
||||
|
||||
def parse(tokens)
|
||||
@@ -35,6 +33,14 @@ module Liquid
|
||||
def blank?
|
||||
@body.empty?
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def ensure_valid_markup(tag_name, markup, parse_context)
|
||||
unless markup =~ Syntax
|
||||
raise SyntaxError.new(parse_context.locale.t("errors.syntax.tag_unexpected_args".freeze, tag: tag_name))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Template.register_tag('raw'.freeze, Raw)
|
||||
|
||||
@@ -19,6 +19,8 @@ module Liquid
|
||||
@@file_system = BlankFileSystem.new
|
||||
|
||||
class TagRegistry
|
||||
include Enumerable
|
||||
|
||||
def initialize
|
||||
@tags = {}
|
||||
@cache = {}
|
||||
@@ -41,6 +43,10 @@ module Liquid
|
||||
@cache.delete(tag_name)
|
||||
end
|
||||
|
||||
def each(&block)
|
||||
@tags.each(&block)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def lookup_class(name)
|
||||
|
||||
@@ -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 }}"
|
||||
|
||||
@@ -306,4 +306,14 @@ class TemplateTest < Minitest::Test
|
||||
t.render!({ 'x' => 'foo' }, { strict_filters: true })
|
||||
end
|
||||
end
|
||||
|
||||
def test_using_range_literal_works_as_expected
|
||||
t = Template.parse("{% assign foo = (x..y) %}{{ foo }}")
|
||||
result = t.render({ 'x' => 1, 'y' => 5 })
|
||||
assert_equal '1..5', result
|
||||
|
||||
t = Template.parse("{% assign nums = (x..y) %}{% for num in nums %}{{ num }}{% endfor %}")
|
||||
result = t.render({ 'x' => 1, 'y' => 5 })
|
||||
assert_equal '12345', result
|
||||
end
|
||||
end
|
||||
|
||||
@@ -46,6 +46,8 @@ class BlockUnitTest < Minitest::Test
|
||||
def test_with_custom_tag
|
||||
Liquid::Template.register_tag("testtag", Block)
|
||||
assert Liquid::Template.parse("{% testtag %} {% endtesttag %}")
|
||||
ensure
|
||||
Liquid::Template.tags.delete('testtag')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -67,4 +67,12 @@ class TemplateUnitTest < Minitest::Test
|
||||
Template.tags.delete('fake')
|
||||
assert_nil Template.tags['fake']
|
||||
end
|
||||
|
||||
def test_tags_can_be_looped_over
|
||||
Template.register_tag('fake', FakeTag)
|
||||
result = Template.tags.map { |name, klass| [name, klass] }
|
||||
assert result.include?(["fake", "TemplateUnitTest::FakeTag"])
|
||||
ensure
|
||||
Template.tags.delete('fake')
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user