Sha256: 813d9ca76fb566b33f008667553067091ffbcdbdf5724fe409c93a78d12f19c2

Contents?: true

Size: 1.47 KB

Versions: 27

Compression:

Stored size: 1.47 KB

Contents

require 'liquid/context'

module Alula
  class Context
    def initialize(default = {})
      @data = {}
      default.each do |key, value|
        @data[key.to_s] = value
      end
    end

    def []=(key, value)
      key = key.to_s
      if value.kind_of?(Hash)
        value = Context.new value
      end
      @data[key] = value
    end

    def [](key)
      key = key.to_s
      if @data[key].kind_of?(Hash)
        @data[key] = Context.new @data[key]
      end
      @data[key]
    end

    def data=(new_data)
      @data = new_data
    end
    
    def respond_to?(name)
      if name.to_s =~ /=$/ and @data.key?(name.to_s[0..-2])
        true
      elsif @data.key?(name)
        true
      else
        super
      end
    end

    def method_missing(meth, *args, &block)
      if meth.to_s =~ /=$/
        self.send(:[]=, meth.to_s[0..-2], *args)
      elsif @data.key?(meth.to_s)
        self.send(:[], meth.to_s)
      else
        nil
      end
    end

    def to_liquid
      @liquid ||= begin
        liquid = Liquid::Context.new(
          nil,  # Environments
          nil,  # Outer Scope
          {:proxy => self}, # Registers
          true) # Rethrow errors
        liquid.class.class_eval do
          def method_missing(meth, *args, &blk)
            if registers[:proxy].respond_to?(meth.to_s)
              registers[:proxy].send(meth, *args)
            else
              super
            end
          end
        end
        @liquid = liquid
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
alula-0.4.24 lib/alula/context.rb
alula-0.4.23 lib/alula/context.rb
alula-0.4.22 lib/alula/context.rb
alula-0.4.21 lib/alula/context.rb
alula-0.4.20 lib/alula/context.rb
alula-0.4.19 lib/alula/context.rb
alula-0.4.18 lib/alula/context.rb
alula-0.4.17 lib/alula/context.rb
alula-0.4.16 lib/alula/context.rb
alula-0.4.15 lib/alula/context.rb
alula-0.4.14 lib/alula/context.rb
alula-0.4.13 lib/alula/context.rb
alula-0.4.12 lib/alula/context.rb
alula-0.4.11 lib/alula/context.rb
alula-0.4.11a lib/alula/context.rb
alula-0.4.10 lib/alula/context.rb
alula-0.4.9 lib/alula/context.rb
alula-0.4.8 lib/alula/context.rb
alula-0.4.7 lib/alula/context.rb
alula-0.4.6 lib/alula/context.rb