Class: ActionView::Template
- Inherits:
-
Object
- Object
- ActionView::Template
- Extended by:
- Handlers, ActiveSupport::Autoload
- Defined in:
- lib/action_view/template.rb,
lib/action_view/template/text.rb,
lib/action_view/template/error.rb,
lib/action_view/template/handler.rb,
lib/action_view/template/handlers.rb,
lib/action_view/template/handlers/erb.rb
Overview
Action View Template Handlers
Defined Under Namespace
Modules: Handlers Classes: Error, Handler, Text
Constant Summary collapse
- Finalizer =
This finalizer is needed (and exactly with a proc inside another proc) otherwise templates leak in development.
proc do |method_name, mod| proc do mod.module_eval do remove_possible_method method_name end end end
Instance Attribute Summary collapse
-
#formats ⇒ Object
Returns the value of attribute formats.
-
#handler ⇒ Object
readonly
Returns the value of attribute handler.
-
#identifier ⇒ Object
readonly
Returns the value of attribute identifier.
-
#locals ⇒ Object
Returns the value of attribute locals.
-
#original_encoding ⇒ Object
readonly
Returns the value of attribute original_encoding.
-
#source ⇒ Object
readonly
Returns the value of attribute source.
-
#updated_at ⇒ Object
readonly
Returns the value of attribute updated_at.
-
#virtual_path ⇒ Object
Returns the value of attribute virtual_path.
Instance Method Summary collapse
-
#initialize(source, identifier, handler, details) ⇒ Template
constructor
A new instance of Template.
- #inspect ⇒ Object
- #mime_type ⇒ Object
-
#refresh(view) ⇒ Object
Receives a view object and return a template similar to self by using @virtual_path.
-
#render(view, locals, buffer = nil, &block) ⇒ Object
Render a template.
-
#supports_streaming? ⇒ Boolean
Returns if the underlying handler supports streaming.
Methods included from Handlers
extended, extensions, handler_class_for_extension, handler_for_extension, register_default_template_handler, register_template_handler, registered_template_handler, template_handler_extensions
Constructor Details
#initialize(source, identifier, handler, details) ⇒ Template
Returns a new instance of Template.
142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/action_view/template.rb', line 142 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 |
Instance Attribute Details
#formats ⇒ Object
Returns the value of attribute formats.
128 129 130 |
# File 'lib/action_view/template.rb', line 128 def formats @formats end |
#handler ⇒ Object (readonly)
Returns the value of attribute handler.
130 131 132 |
# File 'lib/action_view/template.rb', line 130 def handler @handler end |
#identifier ⇒ Object (readonly)
Returns the value of attribute identifier.
130 131 132 |
# File 'lib/action_view/template.rb', line 130 def identifier @identifier end |
#locals ⇒ Object
Returns the value of attribute locals.
128 129 130 |
# File 'lib/action_view/template.rb', line 128 def locals @locals end |
#original_encoding ⇒ Object (readonly)
Returns the value of attribute original_encoding.
130 131 132 |
# File 'lib/action_view/template.rb', line 130 def original_encoding @original_encoding end |
#source ⇒ Object (readonly)
Returns the value of attribute source.
130 131 132 |
# File 'lib/action_view/template.rb', line 130 def source @source end |
#updated_at ⇒ Object (readonly)
Returns the value of attribute updated_at.
130 131 132 |
# File 'lib/action_view/template.rb', line 130 def updated_at @updated_at end |
#virtual_path ⇒ Object
Returns the value of attribute virtual_path.
128 129 130 |
# File 'lib/action_view/template.rb', line 128 def virtual_path @virtual_path end |
Instance Method Details
#inspect ⇒ Object
200 201 202 |
# File 'lib/action_view/template.rb', line 200 def inspect @inspect ||= defined?(Rails.root) ? identifier.sub("#{Rails.root}/", '') : identifier end |
#mime_type ⇒ Object
177 178 179 |
# File 'lib/action_view/template.rb', line 177 def mime_type @mime_type ||= Mime::Type.lookup_by_extension(@formats.first.to_s) if @formats.first end |
#refresh(view) ⇒ Object
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).
189 190 191 192 193 194 195 196 197 198 |
# File 'lib/action_view/template.rb', line 189 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(view, locals, buffer = nil, &block) ⇒ Object
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.
168 169 170 171 172 173 174 175 |
# File 'lib/action_view/template.rb', line 168 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 |
#supports_streaming? ⇒ Boolean
Returns if the underlying handler supports streaming. If so, a streaming buffer may be passed when it start rendering.
158 159 160 |
# File 'lib/action_view/template.rb', line 158 def supports_streaming? handler.respond_to?(:supports_streaming?) && handler.supports_streaming? end |