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]
### 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

View File

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

View File

@ -28,7 +28,7 @@ module Liquid
@static_environments = [static_environments].flat_map(&:freeze).freeze
@scopes = [(outer_scope || {})]
@registers = registers.is_a?(StaticRegisters) ? registers : StaticRegisters.new(registers)
@registers = registers.is_a?(Registers) ? registers : Registers.new(registers)
@errors = []
@partial = false
@strict_variables = false
@ -144,7 +144,7 @@ module Liquid
self.class.build(
resource_limits: resource_limits,
static_environments: static_environments,
registers: StaticRegisters.new(registers)
registers: Registers.new(registers)
).tap do |subcontext|
subcontext.base_scope_depth = base_scope_depth + 1
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
module Liquid
class StaticRegisters
class Registers
attr_reader :static
def initialize(registers = {})
@static = registers.is_a?(StaticRegisters) ? registers.static : registers
@registers = {}
@static = registers.is_a?(Registers) ? registers.static : registers
@changes = {}
end
def []=(key, value)
@registers[key] = value
@changes[key] = value
end
def [](key)
if @registers.key?(key)
@registers[key]
if @changes.key?(key)
@changes[key]
else
@static[key]
end
end
def delete(key)
@registers.delete(key)
@changes.delete(key)
end
UNDEFINED = Object.new
def fetch(key, default = UNDEFINED, &block)
if @registers.key?(key)
@registers.fetch(key)
if @changes.key?(key)
@changes.fetch(key)
elsif default != UNDEFINED
if block_given?
@static.fetch(key, &block)
@ -42,7 +42,10 @@ module Liquid
end
def key?(key)
@registers.key?(key) || @static.key?(key)
@changes.key?(key) || @static.key?(key)
end
end
# Alias for backwards compatibility
StaticRegisters = Registers
end

View File

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

View File

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

View File

@ -2,11 +2,11 @@
require 'test_helper'
class StaticRegistersUnitTest < Minitest::Test
class RegistersUnitTest < Minitest::Test
include Liquid
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[:c] = 33
@ -16,13 +16,13 @@ class StaticRegistersUnitTest < Minitest::Test
end
def test_get_missing_key
static_register = StaticRegisters.new
static_register = Registers.new
assert_nil(static_register[:missing])
end
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[:c] = 33
@ -37,7 +37,7 @@ class StaticRegistersUnitTest < Minitest::Test
end
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[:c] = 33
@ -61,7 +61,7 @@ class StaticRegistersUnitTest < Minitest::Test
end
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[:c] = 33
@ -72,7 +72,7 @@ class StaticRegistersUnitTest < Minitest::Test
end
def test_static_register_can_be_frozen
static_register = StaticRegisters.new(a: 1)
static_register = Registers.new(a: 1)
static_register.static.freeze
@ -94,14 +94,14 @@ class StaticRegistersUnitTest < Minitest::Test
end
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[:c] = 33
new_static_register = StaticRegisters.new(static_register)
new_static_register = Registers.new(static_register)
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
assert_equal(1, static_register[:a])
@ -118,11 +118,11 @@ class StaticRegistersUnitTest < Minitest::Test
end
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[: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[:c] = 330
@ -138,11 +138,11 @@ class StaticRegistersUnitTest < Minitest::Test
end
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[: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(2, static_register_2[:b])