This finalizer is needed (and exactly with a proc inside another proc) otherwise templates leak in development.
# File lib/action_view/template.rb, line 115 def initialize(source, identifier, handler, details) format = details[:format] || (handler.default_format if handler.respond_to?(:default_format)) @source = source @identifier = identifier @handler = handler @compiled = false @original_encoding = nil @locals = details[:locals] || [] @virtual_path = details[:virtual_path] @updated_at = details[:updated_at] || Time.now @formats = Array.wrap(format).map { |f| f.is_a?(Mime::Type) ? f.ref : f } end
# File lib/action_view/template.rb, line 173 def inspect @inspect ||= defined?(Rails.root) ? identifier.sub("#{Rails.root}/", '') : identifier end
# File lib/action_view/template.rb, line 150 def mime_type @mime_type ||= Mime::Type.lookup_by_extension(@formats.first.to_s) if @formats.first end
Receives a view object and return a template similar to self by using @virtual_path.
This method is useful if you have a template object but it does not contain its source anymore since it was already compiled. In such cases, all you need to do is to call refresh passing in the view object.
Notice this method raises an error if the template to be refreshed does not have a virtual path set (true just for inline templates).
# File lib/action_view/template.rb, line 162 def refresh(view) raise "A template needs to have a virtual path in order to be refreshed" unless @virtual_path lookup = view.lookup_context pieces = @virtual_path.split("/") name = pieces.pop partial = !!name.sub!(/^_/, "") lookup.disable_cache do lookup.find_template(name, [ pieces.join('/') ], partial, @locals) end end
Render a template. If the template was not compiled yet, it is done exactly before rendering.
This method is instrumented as “!render_template.action_view”. Notice that we use a bang in this instrumentation because you don’t want to consume this in production. This is only slow if it’s being listened to.
# File lib/action_view/template.rb, line 141 def render(view, locals, buffer=nil, &block) ActiveSupport::Notifications.instrument("!render_template.action_view", :virtual_path => @virtual_path) do compile!(view) view.send(method_name, locals, buffer, &block) end rescue Exception => e handle_render_error(view, e) end
Returns if the underlying handler supports streaming. If so, a streaming buffer may be passed when it start rendering.
# File lib/action_view/template.rb, line 131 def supports_streaming? handler.respond_to?(:supports_streaming?) && handler.supports_streaming? end
Generated with the Darkfish Rdoc Generator 2.