class PageContext

def dup

def dup
  rv = self.class.new(page)
  rv.globals = globals.dup
  rv.definitions = definitions.dup
  rv
end

def initialize(page)

def initialize(page)
  super
  @page = page
  globals.page = @page
  page.tags.each do |name|
    define_tag(name) { |tag_binding| page.render_tag(name, tag_binding) }
  end
end

def raise_errors?

def raise_errors?
  Rails.env != 'production'
end

def render_error_message(message)

def render_error_message(message)
  "<div><strong>#{message}</strong></div>"
end

def render_tag(name, attributes = {}, &block)

def render_tag(name, attributes = {}, &block)
  binding = @tag_binding_stack.last
  locals = binding ? binding.locals : globals
  set_process_variables(locals.page)
  super
rescue Exception => e
  raise e if raise_errors?
  @tag_binding_stack.pop unless @tag_binding_stack.last == binding
  render_error_message(e.message)
end

def set_process_variables(page)

def set_process_variables(page)
  page.request ||= @page.request
  page.response ||= @page.response
end