mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-29 07:05:12 -07:00
use Ruby Hash as default expression cache
This commit is contained in:
@@ -13,6 +13,7 @@ group :benchmark, :test do
|
|||||||
gem 'benchmark-ips'
|
gem 'benchmark-ips'
|
||||||
gem 'memory_profiler'
|
gem 'memory_profiler'
|
||||||
gem 'terminal-table'
|
gem 'terminal-table'
|
||||||
|
gem "lru_redux"
|
||||||
|
|
||||||
install_if -> { RUBY_PLATFORM !~ /mingw|mswin|java/ && RUBY_ENGINE != 'truffleruby' } do
|
install_if -> { RUBY_PLATFORM !~ /mingw|mswin|java/ && RUBY_ENGINE != 'truffleruby' } do
|
||||||
gem 'stackprof'
|
gem 'stackprof'
|
||||||
|
|||||||
@@ -16,8 +16,12 @@ module Liquid
|
|||||||
# This StringScanner will be shared by all of them
|
# This StringScanner will be shared by all of them
|
||||||
@string_scanner = StringScanner.new("")
|
@string_scanner = StringScanner.new("")
|
||||||
|
|
||||||
@expression_cache = if options[:expression_cache] != false
|
@expression_cache = if options[:expression_cache].nil?
|
||||||
options[:expression_cache] || LruRedux::Cache.new(10_000)
|
{}
|
||||||
|
elsif options[:expression_cache].respond_to?(:[]) && options[:expression_cache].respond_to?(:[]=)
|
||||||
|
options[:expression_cache]
|
||||||
|
elsif options[:expression_cache]
|
||||||
|
{}
|
||||||
end
|
end
|
||||||
|
|
||||||
self.depth = 0
|
self.depth = 0
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
|
|||||||
|
|
||||||
s.add_dependency("strscan", ">= 3.1.1")
|
s.add_dependency("strscan", ">= 3.1.1")
|
||||||
s.add_dependency("bigdecimal")
|
s.add_dependency("bigdecimal")
|
||||||
s.add_dependency("lru_redux")
|
|
||||||
|
|
||||||
s.add_development_dependency('rake', '~> 13.0')
|
s.add_development_dependency('rake', '~> 13.0')
|
||||||
s.add_development_dependency('minitest')
|
s.add_development_dependency('minitest')
|
||||||
|
|||||||
@@ -58,6 +58,51 @@ class ExpressionTest < Minitest::Test
|
|||||||
def test_expression_cache
|
def test_expression_cache
|
||||||
skip("Liquid-C does not support Expression caching") if defined?(Liquid::C) && Liquid::C.enabled
|
skip("Liquid-C does not support Expression caching") if defined?(Liquid::C) && Liquid::C.enabled
|
||||||
|
|
||||||
|
cache = {}
|
||||||
|
template = <<~LIQUID
|
||||||
|
{% assign x = 1 %}
|
||||||
|
{{ x }}
|
||||||
|
{% assign x = 2 %}
|
||||||
|
{{ x }}
|
||||||
|
{% assign y = 1 %}
|
||||||
|
{{ y }}
|
||||||
|
LIQUID
|
||||||
|
|
||||||
|
Liquid::Template.parse(template, expression_cache: cache).render
|
||||||
|
|
||||||
|
assert_equal(
|
||||||
|
["1", "2", "x", "y"],
|
||||||
|
cache.to_a.map { _1[0] }.sort,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_expression_cache_with_true_boolean
|
||||||
|
skip("Liquid-C does not support Expression caching") if defined?(Liquid::C) && Liquid::C.enabled
|
||||||
|
|
||||||
|
template = <<~LIQUID
|
||||||
|
{% assign x = 1 %}
|
||||||
|
{{ x }}
|
||||||
|
{% assign x = 2 %}
|
||||||
|
{{ x }}
|
||||||
|
{% assign y = 1 %}
|
||||||
|
{{ y }}
|
||||||
|
LIQUID
|
||||||
|
|
||||||
|
parse_context = ParseContext.new(expression_cache: true)
|
||||||
|
|
||||||
|
Liquid::Template.parse(template, parse_context).render
|
||||||
|
|
||||||
|
cache = parse_context.instance_variable_get(:@expression_cache)
|
||||||
|
|
||||||
|
assert_equal(
|
||||||
|
["1", "2", "x", "y"],
|
||||||
|
cache.to_a.map { _1[0] }.sort,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_expression_cache_with_lru_redux
|
||||||
|
skip("Liquid-C does not support Expression caching") if defined?(Liquid::C) && Liquid::C.enabled
|
||||||
|
|
||||||
cache = LruRedux::Cache.new(10)
|
cache = LruRedux::Cache.new(10)
|
||||||
template = <<~LIQUID
|
template = <<~LIQUID
|
||||||
{% assign x = 1 %}
|
{% assign x = 1 %}
|
||||||
|
|||||||
Reference in New Issue
Block a user