File: registers.rb

package info (click to toggle)
ruby-liquid 5.4.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,176 kB
  • sloc: ruby: 10,561; makefile: 6
file content (61 lines) | stat: -rw-r--r-- 1,125 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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 keys
      (@static.keys + @changes.keys).uniq
    end

    def each(&block)
      keys.each do |key|
        yield(key, fetch(key))
      end
    end

    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