Merge pull request #1569 from Shopify/registers-refactor

Rename and alias Liquid::StaticRegisters to Liquid::Registers
This commit is contained in:
Dylan Thacker-Smith 2022-06-06 10:26:11 -04:00 committed by GitHub
commit f64471eb4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 36 additions and 40 deletions

View File

@ -13,7 +13,7 @@
* Hash registers no longer leak into subcontexts as static registers (#1564) [Chris AtLee] * Hash registers no longer leak into subcontexts as static registers (#1564) [Chris AtLee]
### Changed ### Changed
* Liquid::Context#registers now always returns a Liquid::StaticRegisters object, though supports the most used Hash functions for compatibility (#1553) * Liquid::Context#registers now always returns a Liquid::Registers object, though supports the most used Hash functions for compatibility (#1553)
## 5.3.0 2022-03-22 ## 5.3.0 2022-03-22

View File

@ -84,8 +84,7 @@ require 'liquid/tokenizer'
require 'liquid/parse_context' require 'liquid/parse_context'
require 'liquid/partial_cache' require 'liquid/partial_cache'
require 'liquid/usage' require 'liquid/usage'
require 'liquid/register' require 'liquid/registers'
require 'liquid/static_registers'
require 'liquid/template_factory' require 'liquid/template_factory'
# Load all the tags of the standard library # Load all the tags of the standard library

View File

@ -28,7 +28,7 @@ module Liquid
@static_environments = [static_environments].flat_map(&:freeze).freeze @static_environments = [static_environments].flat_map(&:freeze).freeze
@scopes = [(outer_scope || {})] @scopes = [(outer_scope || {})]
@registers = registers.is_a?(StaticRegisters) ? registers : StaticRegisters.new(registers) @registers = registers.is_a?(Registers) ? registers : Registers.new(registers)
@errors = [] @errors = []
@partial = false @partial = false
@strict_variables = false @strict_variables = false
@ -144,7 +144,7 @@ module Liquid
self.class.build( self.class.build(
resource_limits: resource_limits, resource_limits: resource_limits,
static_environments: static_environments, static_environments: static_environments,
registers: StaticRegisters.new(registers) registers: Registers.new(registers)
).tap do |subcontext| ).tap do |subcontext|
subcontext.base_scope_depth = base_scope_depth + 1 subcontext.base_scope_depth = base_scope_depth + 1
subcontext.exception_renderer = exception_renderer subcontext.exception_renderer = exception_renderer

View File

@ -1,6 +0,0 @@
# frozen_string_literal: true
module Liquid
class Register
end
end

View File

@ -1,35 +1,35 @@
# frozen_string_literal: true # frozen_string_literal: true
module Liquid module Liquid
class StaticRegisters class Registers
attr_reader :static attr_reader :static
def initialize(registers = {}) def initialize(registers = {})
@static = registers.is_a?(StaticRegisters) ? registers.static : registers @static = registers.is_a?(Registers) ? registers.static : registers
@registers = {} @changes = {}
end end
def []=(key, value) def []=(key, value)
@registers[key] = value @changes[key] = value
end end
def [](key) def [](key)
if @registers.key?(key) if @changes.key?(key)
@registers[key] @changes[key]
else else
@static[key] @static[key]
end end
end end
def delete(key) def delete(key)
@registers.delete(key) @changes.delete(key)
end end
UNDEFINED = Object.new UNDEFINED = Object.new
def fetch(key, default = UNDEFINED, &block) def fetch(key, default = UNDEFINED, &block)
if @registers.key?(key) if @changes.key?(key)
@registers.fetch(key) @changes.fetch(key)
elsif default != UNDEFINED elsif default != UNDEFINED
if block_given? if block_given?
@static.fetch(key, &block) @static.fetch(key, &block)
@ -42,7 +42,10 @@ module Liquid
end end
def key?(key) def key?(key)
@registers.key?(key) || @static.key?(key) @changes.key?(key) || @static.key?(key)
end end
end end
# Alias for backwards compatibility
StaticRegisters = Registers
end end

View File

@ -529,7 +529,7 @@ class ContextTest < Minitest::Test
registers = { registers = {
my_register: :my_value, my_register: :my_value,
} }
super_context = Context.new({}, {}, StaticRegisters.new(registers)) super_context = Context.new({}, {}, Registers.new(registers))
super_context.registers[:my_register] = :my_alt_value super_context.registers[:my_register] = :my_alt_value
subcontext = super_context.new_isolated_subcontext subcontext = super_context.new_isolated_subcontext
assert_equal(:my_value, subcontext.registers[:my_register]) assert_equal(:my_value, subcontext.registers[:my_register])
@ -623,12 +623,12 @@ class ContextTest < Minitest::Test
my_register: :my_value, my_register: :my_value,
} }
c = Context.new({}, {}, registers) c = Context.new({}, {}, registers)
assert_instance_of(StaticRegisters, c.registers) assert_instance_of(Registers, c.registers)
assert_equal(:my_value, c.registers[:my_register]) assert_equal(:my_value, c.registers[:my_register])
r = StaticRegisters.new(registers) r = Registers.new(registers)
c = Context.new({}, {}, r) c = Context.new({}, {}, r)
assert_instance_of(StaticRegisters, c.registers) assert_instance_of(Registers, c.registers)
assert_equal(:my_value, c.registers[:my_register]) assert_equal(:my_value, c.registers[:my_register])
end end

View File

@ -132,7 +132,7 @@ class PartialCacheUnitTest < Minitest::Test
'my_partial' => 'my shared value' 'my_partial' => 'my shared value'
) )
context = Liquid::Context.build( context = Liquid::Context.build(
registers: Liquid::StaticRegisters.new( registers: Liquid::Registers.new(
file_system: shared_file_system, file_system: shared_file_system,
) )
) )

View File

@ -2,11 +2,11 @@
require 'test_helper' require 'test_helper'
class StaticRegistersUnitTest < Minitest::Test class RegistersUnitTest < Minitest::Test
include Liquid include Liquid
def test_set def test_set
static_register = StaticRegisters.new(a: 1, b: 2) static_register = Registers.new(a: 1, b: 2)
static_register[:b] = 22 static_register[:b] = 22
static_register[:c] = 33 static_register[:c] = 33
@ -16,13 +16,13 @@ class StaticRegistersUnitTest < Minitest::Test
end end
def test_get_missing_key def test_get_missing_key
static_register = StaticRegisters.new static_register = Registers.new
assert_nil(static_register[:missing]) assert_nil(static_register[:missing])
end end
def test_delete def test_delete
static_register = StaticRegisters.new(a: 1, b: 2) static_register = Registers.new(a: 1, b: 2)
static_register[:b] = 22 static_register[:b] = 22
static_register[:c] = 33 static_register[:c] = 33
@ -37,7 +37,7 @@ class StaticRegistersUnitTest < Minitest::Test
end end
def test_fetch def test_fetch
static_register = StaticRegisters.new(a: 1, b: 2) static_register = Registers.new(a: 1, b: 2)
static_register[:b] = 22 static_register[:b] = 22
static_register[:c] = 33 static_register[:c] = 33
@ -61,7 +61,7 @@ class StaticRegistersUnitTest < Minitest::Test
end end
def test_key def test_key
static_register = StaticRegisters.new(a: 1, b: 2) static_register = Registers.new(a: 1, b: 2)
static_register[:b] = 22 static_register[:b] = 22
static_register[:c] = 33 static_register[:c] = 33
@ -72,7 +72,7 @@ class StaticRegistersUnitTest < Minitest::Test
end end
def test_static_register_can_be_frozen def test_static_register_can_be_frozen
static_register = StaticRegisters.new(a: 1) static_register = Registers.new(a: 1)
static_register.static.freeze static_register.static.freeze
@ -94,14 +94,14 @@ class StaticRegistersUnitTest < Minitest::Test
end end
def test_new_static_retains_static def test_new_static_retains_static
static_register = StaticRegisters.new(a: 1, b: 2) static_register = Registers.new(a: 1, b: 2)
static_register[:b] = 22 static_register[:b] = 22
static_register[:c] = 33 static_register[:c] = 33
new_static_register = StaticRegisters.new(static_register) new_static_register = Registers.new(static_register)
new_static_register[:b] = 222 new_static_register[:b] = 222
newest_static_register = StaticRegisters.new(new_static_register) newest_static_register = Registers.new(new_static_register)
newest_static_register[:c] = 333 newest_static_register[:c] = 333
assert_equal(1, static_register[:a]) assert_equal(1, static_register[:a])
@ -118,11 +118,11 @@ class StaticRegistersUnitTest < Minitest::Test
end end
def test_multiple_instances_are_unique def test_multiple_instances_are_unique
static_register_1 = StaticRegisters.new(a: 1, b: 2) static_register_1 = Registers.new(a: 1, b: 2)
static_register_1[:b] = 22 static_register_1[:b] = 22
static_register_1[:c] = 33 static_register_1[:c] = 33
static_register_2 = StaticRegisters.new(a: 10, b: 20) static_register_2 = Registers.new(a: 10, b: 20)
static_register_2[:b] = 220 static_register_2[:b] = 220
static_register_2[:c] = 330 static_register_2[:c] = 330
@ -138,11 +138,11 @@ class StaticRegistersUnitTest < Minitest::Test
end end
def test_initialization_reused_static_same_memory_object def test_initialization_reused_static_same_memory_object
static_register_1 = StaticRegisters.new(a: 1, b: 2) static_register_1 = Registers.new(a: 1, b: 2)
static_register_1[:b] = 22 static_register_1[:b] = 22
static_register_1[:c] = 33 static_register_1[:c] = 33
static_register_2 = StaticRegisters.new(static_register_1) static_register_2 = Registers.new(static_register_1)
assert_equal(1, static_register_2[:a]) assert_equal(1, static_register_2[:a])
assert_equal(2, static_register_2[:b]) assert_equal(2, static_register_2[:b])