mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-15 08:50:45 -07:00
52 lines
965 B
Ruby
52 lines
965 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Liquid
|
|
class Registers
|
|
attr_reader :static
|
|
|
|
def initialize(registers = {})
|
|
@static = registers.is_a?(Registers) ? registers.static : registers
|
|
@changes = {}
|
|
end
|
|
|
|
def []=(key, value)
|
|
@changes[key] = value
|
|
end
|
|
|
|
def [](key)
|
|
if @changes.key?(key)
|
|
@changes[key]
|
|
else
|
|
@static[key]
|
|
end
|
|
end
|
|
|
|
def delete(key)
|
|
@changes.delete(key)
|
|
end
|
|
|
|
UNDEFINED = Object.new
|
|
|
|
def fetch(key, default = UNDEFINED, &block)
|
|
if @changes.key?(key)
|
|
@changes.fetch(key)
|
|
elsif default != UNDEFINED
|
|
if block_given?
|
|
@static.fetch(key, &block)
|
|
else
|
|
@static.fetch(key, default)
|
|
end
|
|
else
|
|
@static.fetch(key, &block)
|
|
end
|
|
end
|
|
|
|
def key?(key)
|
|
@changes.key?(key) || @static.key?(key)
|
|
end
|
|
end
|
|
|
|
# Alias for backwards compatibility
|
|
StaticRegisters = Registers
|
|
end
|