module ActionView::Template::Handlers

def self.extended(base)

def self.extended(base)
  base.register_default_template_handler :raw, Raw.new
  base.register_template_handler :erb, ERB.new
  base.register_template_handler :html, Html.new
  base.register_template_handler :builder, Builder.new
  base.register_template_handler :ruby, lambda { |_, source| source }
end

def self.extensions

def self.extensions
  @@template_extensions ||= @@template_handlers.keys
end

def handler_for_extension(extension)

def handler_for_extension(extension)
  registered_template_handler(extension) || @@default_template_handlers
end

def register_default_template_handler(extension, klass)

def register_default_template_handler(extension, klass)
  register_template_handler(extension, klass)
  @@default_template_handlers = klass
end

def register_template_handler(*extensions, handler)

and should return the rendered template as a String.
The handler must respond to +:call+, which will be passed the template
extensions. This can be used to implement new template types.
Register an object that knows how to handle template files with the given
def register_template_handler(*extensions, handler)
  raise(ArgumentError, "Extension is required") if extensions.empty?
  extensions.each do |extension|
    @@template_handlers[extension.to_sym] = handler
  end
  @@template_extensions = nil
end

def registered_template_handler(extension)

def registered_template_handler(extension)
  extension && @@template_handlers[extension.to_sym]
end

def template_handler_extensions

def template_handler_extensions
  @@template_handlers.keys.map(&:to_s).sort
end

def unregister_template_handler(*extensions)

Opposite to register_template_handler.
def unregister_template_handler(*extensions)
  extensions.each do |extension|
    handler = @@template_handlers.delete extension.to_sym
    @@default_template_handlers = nil if @@default_template_handlers == handler
  end
  @@template_extensions = nil
end