class LtdTemplate::Code::Variable

Public Class Methods

new(template, name) click to toggle source
Calls superclass method LtdTemplate::Code::new
# File lib/ltdtemplate/code/variable.rb, line 11
def initialize (template, name)
    super template
    if name.size > 1 && (name[0] == '@' || name[0] == '^')
        # @var is in the root namespace
        # ^var is in the parent namespace
        @modifier = name[0]
        @name = name[1..-1]
        @name = @name.to_i if @name =~ /^(?:0|[1-9]\d*)$/
    else
        # Standard bottom-to-top namespace search variable
        @modifier = nil
        @name = name
    end
end

Public Instance Methods

evaluate(opts = {}) click to toggle source

Evaluate

# File lib/ltdtemplate/code/variable.rb, line 29
def evaluate (opts = {})
    case opts[:method]
    when '=', '?='
        if opts[:method] != '?=' || self.namespace[@name].nil?
            params = opts[:parameters]
            params = params[0] if params.is_a? LtdTemplate::Univalue
            self.namespace[@name] = params
        end
        nil
    else
        self.namespace[@name] = "" if
          opts[:method] == 'methods' && self.namespace[@name].nil?
        rubyversed(self.namespace[@name]).evaluate opts
    end
end
namespace() click to toggle source

Return the namespace in which this variable currently resides (or would reside, if it doesn't currently exist).

# File lib/ltdtemplate/code/variable.rb, line 49
def namespace
    case @modifier
    when '@' then base = @template.namespace.root
    when '^' then base = @template.namespace.parent || @template.namespace
    else base = @template.namespace
    end
    base.find_item(@name) || base
end