mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
Compare commits
3 Commits
v5.0.0
...
optimize-a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9cc410478e | ||
|
|
4196a94aa3 | ||
|
|
0de722968c |
@@ -84,6 +84,7 @@ require 'liquid/usage'
|
||||
require 'liquid/register'
|
||||
require 'liquid/static_registers'
|
||||
require 'liquid/template_factory'
|
||||
require 'liquid/optimizer'
|
||||
|
||||
# Load all the tags of the standard library
|
||||
#
|
||||
|
||||
19
lib/liquid/optimizer.rb
Normal file
19
lib/liquid/optimizer.rb
Normal file
@@ -0,0 +1,19 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Liquid
|
||||
class Optimizer
|
||||
class << self
|
||||
attr_accessor :enabled
|
||||
|
||||
def optimize_variable(node)
|
||||
return unless enabled
|
||||
|
||||
# Turn chained `| append: "..."| append: "..."`, into a single `append_all: [...]`
|
||||
if node.filters.size > 1 && node.filters.all? { |f, _| f == "append" }
|
||||
node.filters = [["append_all", node.filters.map { |f, (arg)| arg }]]
|
||||
end
|
||||
end
|
||||
end
|
||||
self.enabled = true
|
||||
end
|
||||
end
|
||||
@@ -281,6 +281,10 @@ module Liquid
|
||||
input.to_s + string.to_s
|
||||
end
|
||||
|
||||
def append_all(input, *items)
|
||||
input.to_s + items.join
|
||||
end
|
||||
|
||||
def concat(input, array)
|
||||
unless array.respond_to?(:to_ary)
|
||||
raise ArgumentError, "concat filter requires an array argument"
|
||||
|
||||
@@ -31,6 +31,8 @@ module Liquid
|
||||
@line_number = parse_context.line_number
|
||||
|
||||
parse_with_selected_parser(markup)
|
||||
|
||||
Optimizer.optimize_variable(self)
|
||||
end
|
||||
|
||||
def raw
|
||||
|
||||
16
test/unit/optimizer_test.rb
Normal file
16
test/unit/optimizer_test.rb
Normal file
@@ -0,0 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'test_helper'
|
||||
|
||||
class OptimizerUnitTest < Minitest::Test
|
||||
include Liquid
|
||||
|
||||
def test_combines_append_filters
|
||||
optimizer = Optimizer.new
|
||||
var = Variable.new('hello | append: "a" | append: b', ParseContext.new)
|
||||
var = optimizer.optimize(var)
|
||||
assert_equal([
|
||||
['append_all', ["a", VariableLookup.new("b")]]
|
||||
], var.filters)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user