Sha256: 627fa83111bb7868e853e1ab55a3933cdb7ee69af37253f3b08307947f33439b
Contents?: true
Size: 1.2 KB
Versions: 6
Compression:
Stored size: 1.2 KB
Contents
require_relative '../exceptions' require 'dentaku/string_casing' module Dentaku module AST class Identifier < Node include StringCasing attr_reader :identifier, :case_sensitive def initialize(token, options = {}) @case_sensitive = options.fetch(:case_sensitive, false) @identifier = standardize_case(token.value) end def value(context = {}) v = context.fetch(identifier) do raise UnboundVariableError.new([identifier]), "no value provided for variables: #{identifier}" end case v when Node value = v.value(context) context[identifier] = value if Dentaku.cache_identifier? value when Proc v.call else v end end def dependencies(context = {}) context.key?(identifier) ? dependencies_of(context[identifier], context) : [identifier] end def accept(visitor) visitor.visit_identifier(self) end def to_s identifier.to_s end private def dependencies_of(node, context) node.respond_to?(:dependencies) ? node.dependencies(context) : [] end end end end
Version data entries
6 entries across 6 versions & 2 rubygems