Sha256: 63ef78238add6b0721bbfe427c7e2730dcb284c4eae7a1a02f89ba6317f53813

Contents?: true

Size: 837 Bytes

Versions: 1

Compression:

Stored size: 837 Bytes

Contents

module Bindy

  class Context

    attr_reader :variables

    def initialize(variables)
      @variables = variables
    end

    def bind(object)
      case object
        when Hash   then bind_hash object
        when Array  then bind_array object
        when String then bind_string object
        else raise "Unbindable #{object}"
      end
    end

    def var(name)
      name.split('.').inject(variables) do |vars, key| 
        vars.fetch(key, vars.fetch(key.to_sym))
      end
    rescue KeyError
      raise "Undefined variable #{name}"
    end

    private

    def bind_hash(hash)
      hash.each_with_object({}) do |(k,v),h|
        h[k] = bind v
      end
    end

    def bind_array(array)
      array.map { |v| bind v }
    end

    def bind_string(string)
      Language.parse(string).evaluate(self)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bindy-0.0.1 lib/bindy/context.rb