Sha256: 34de0390a41ebf6a296d8cf90f4a86f54dcc837373d7bcd83550c26cd35b03fe

Contents?: true

Size: 954 Bytes

Versions: 6

Compression:

Stored size: 954 Bytes

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
          v.value(context)
        else
          v
        end
      end

      def dependencies(context = {})
        context.key?(identifier) ? dependencies_of(context[identifier]) : [identifier]
      end

      private

      def dependencies_of(node)
        node.respond_to?(:dependencies) ? node.dependencies : []
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dentaku-3.3.2 lib/dentaku/ast/identifier.rb
dentaku-3.3.1 lib/dentaku/ast/identifier.rb
dentaku-3.3.0 lib/dentaku/ast/identifier.rb
dentaku-3.2.1 lib/dentaku/ast/identifier.rb
dentaku-3.2.0 lib/dentaku/ast/identifier.rb
dentaku-3.1.0 lib/dentaku/ast/identifier.rb