Class: ActionView::CompiledTemplates
- Inherits:
-
Module
- Object
- Module
- ActionView::CompiledTemplates
- Defined in:
- lib/action_view/compiled_templates.rb
Overview
CompiledTemplates modules hold methods that have been compiled. Templates are compiled into these methods so that they do not need to be re-read and re-parsed each request.
Each template may be compiled into one or more methods. Each method accepts a given set of parameters which is used to implement local assigns passing.
To use a compiled template module, create a new instance and include it into the class in which you want the template to be rendered.
Instance Attribute Summary collapse
-
#method_names ⇒ Object
readonly
:nodoc:.
Instance Method Summary collapse
-
#compile_source(identifier, arg_names, source, initial_line_number = 0, file_name = nil) ⇒ Object
Compile the provided source code for the given argument names and with the given initial line number.
-
#full_key(identifier, arg_names) ⇒ Object
Return the full key for the given identifier and argument names.
-
#initialize ⇒ CompiledTemplates
constructor
A new instance of CompiledTemplates.
-
#mtime(identifier, arg_names) ⇒ Object
Return the time at which the method for the given identifier and argument names was compiled.
-
#selector(identifier, arg_names) ⇒ Object
(also: #compiled?)
Return the selector for this method or nil if it has not been compiled.
-
#wrap_source(name, arg_names, source) ⇒ Object
Wrap the provided source in a def …
Constructor Details
#initialize ⇒ CompiledTemplates
Returns a new instance of CompiledTemplates.
16 17 18 19 20 21 |
# File 'lib/action_view/compiled_templates.rb', line 16 def initialize @method_names = Hash.new do |hash, key| hash[key] = "__compiled_method_#{(hash.length + 1)}" end @mtimes = {} end |
Instance Attribute Details
#method_names ⇒ Object (readonly)
:nodoc:
14 15 16 |
# File 'lib/action_view/compiled_templates.rb', line 14 def method_names @method_names end |
Instance Method Details
#compile_source(identifier, arg_names, source, initial_line_number = 0, file_name = nil) ⇒ Object
Compile the provided source code for the given argument names and with the given initial line number. The identifier should be unique to this source.
The file_name, if provided will appear in backtraces. If not provded, the file_name defaults to the identifier.
This method will return the selector for the compiled version of this method.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/action_view/compiled_templates.rb', line 47 def compile_source(identifier, arg_names, source, initial_line_number = 0, file_name = nil) file_name ||= identifier name = method_names[full_key(identifier, arg_names)] arg_desc = arg_names.empty? ? '' : "(#{arg_names * ', '})" fake_file_name = "#{file_name}#{arg_desc}" # Include the arguments for this version (for now) method_def = wrap_source(name, arg_names, source) begin module_eval(method_def, fake_file_name, initial_line_number) @mtimes[full_key(identifier, arg_names)] = Time.now rescue Object => e e.blame_file! identifier raise end name end |
#full_key(identifier, arg_names) ⇒ Object
Return the full key for the given identifier and argument names
24 25 26 |
# File 'lib/action_view/compiled_templates.rb', line 24 def full_key(identifier, arg_names) [identifier, arg_names] end |
#mtime(identifier, arg_names) ⇒ Object
Return the time at which the method for the given identifier and argument names was compiled.
36 37 38 |
# File 'lib/action_view/compiled_templates.rb', line 36 def mtime(identifier, arg_names) @mtimes[full_key(identifier, arg_names)] end |
#selector(identifier, arg_names) ⇒ Object Also known as: compiled?
Return the selector for this method or nil if it has not been compiled
29 30 31 32 |
# File 'lib/action_view/compiled_templates.rb', line 29 def selector(identifier, arg_names) key = full_key(identifier, arg_names) method_names.key?(key) ? method_names[key] : nil end |
#wrap_source(name, arg_names, source) ⇒ Object
Wrap the provided source in a def … end block.
66 67 68 |
# File 'lib/action_view/compiled_templates.rb', line 66 def wrap_source(name, arg_names, source) "def #{name}(#{arg_names * ', '})\n#{source}\nend" end |