instiki/vendor/plugins/erubis-2.6.5/lib/erubis/context.rb

84 lines
1.6 KiB
Ruby
Raw Normal View History

##
## $Release: 2.6.5 $
## copyright(c) 2006-2009 kuwata-lab.com all rights reserved.
##
module Erubis
##
## context object for Engine#evaluate
##
## ex.
## template = <<'END'
## Hello <%= @user %>!
## <% for item in @list %>
## - <%= item %>
## <% end %>
## END
##
## context = Erubis::Context.new(:user=>'World', :list=>['a','b','c'])
## # or
## # context = Erubis::Context.new
## # context[:user] = 'World'
## # context[:list] = ['a', 'b', 'c']
##
## eruby = Erubis::Eruby.new(template)
## print eruby.evaluate(context)
##
class Context
include Enumerable
def initialize(hash=nil)
hash.each do |name, value|
self[name] = value
end if hash
end
def [](key)
return instance_variable_get("@#{key}")
end
def []=(key, value)
return instance_variable_set("@#{key}", value)
end
def keys
return instance_variables.collect { |name| name[1..-1] }
end
def each
instance_variables.each do |name|
key = name[1..-1]
value = instance_variable_get(name)
yield(key, value)
end
end
def to_hash
hash = {}
self.keys.each { |key| hash[key] = self[key] }
return hash
end
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
end
end