class Erubis::Context

#
# print eruby.evaluate(context)
# eruby = Erubis::Eruby.new(template)
#
# # context = [‘a’, ‘b’, ‘c’]
# # context = ‘World’
# # context = Erubis::Context.new
# # or
# context = Erubis::Context.new(:user=>‘World’, :list=>)
#
# END
# <% end %>
# - <%= item %>
# <% for item in @list %>
# Hello <%= @user %>!
# template = <<‘END’
# ex.
#
# context object for Engine#evaluate
#

def [](key)

def [](key)
  return instance_variable_get("@#{key}")
end

def []=(key, value)

def []=(key, value)
  return instance_variable_set("@#{key}", value)
end

def each

def each
  instance_variables.each do |name|
    key = name[1..-1]
    value = instance_variable_get(name)
    yield(key, value)
  end
end

def initialize(hash=nil)

def initialize(hash=nil)
  hash.each do |name, value|
    self[name] = value
  end if hash
end

def keys

def keys
  return instance_variables.collect { |name| name[1..-1] }
end

def to_hash

def to_hash
  hash = {}
  self.keys.each { |key| hash[key] = self[key] }
  return hash
end

def update(context_or_hash)

def update(context_or_hash)
  arg = context_or_hash
  if arg.is_a?(Hash)
    arg.each do |key, val|
      self[key] = val
    end
  else
    arg.instance_variables.each do |varname|
      key = varname[1..-1]
      val = arg.instance_variable_get(varname)
      self[key] = val
    end
  end
end