class Ducktape::Expression::IndexerExp

Public Instance Methods

bind(src, type, qual = nil, root = src) click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 8
def bind(src, type, qual = nil, root = src)
  unbind
  src = left.bind(src, :path, qual, root)
  @source = WeakReference.new(src)
  @type = type
  params.each { |param| param.bind(root, :path) }

  src.on_store(self) if src.is_a?(Hookable) && src.respond_to?(:on_store) #convention hook for []=

  value
end
call(parms) click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 32
def call(parms)
  parms = parms.args.dup
  parms.pop
  return unless parms == params_values
  owner.send("#{@type}_changed")
end
owner=(o) click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 39
def owner=(o)
  @owner, left.owner = o, o
  params.each { |param| param.owner = o }
end
rightmost() click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 44
def rightmost
  self
end
unbind() click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 20
def unbind
  params.each { |param| param.unbind }

  return unless @source
  src = @source.object
  return @source, @type, @qual = nil unless src

  src = source
  src.remove_hook(:on_store, self) if src.is_a?(Hookable) && src.respond_to?(:on_store)
  nil
end
unparse() click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 48
def unparse
  "#{left.unparse}[#{params.map(&:unparse).join(',')}]"
end
value() click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 52
def value
  source[*params_values]
end
value=(v) click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 56
def value=(v)
  source[*params_values] = v
end

Protected Instance Methods

params_values() click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 68
def params_values
  params.map { |param| param.value }
end
source() click to toggle source
# File lib/ducktape/expression/indexer_exp.rb, line 61
def source
  raise UnboundError unless @source
  src = @source.object
  raise UnboundError unless src
  src
end