Class: ActionView::TemplateRenderer
- Inherits:
-
AbstractRenderer
- Object
- AbstractRenderer
- ActionView::TemplateRenderer
- Defined in:
- actionview/lib/action_view/renderer/template_renderer.rb
Overview
:nodoc:
Direct Known Subclasses
Instance Method Summary collapse
-
#determine_template(options) ⇒ Object
Determine the template to be rendered using the given options.
-
#find_layout(layout, keys) ⇒ Object
This is the method which actually finds the layout using details in the lookup context object.
- #render(context, options) ⇒ Object
-
#render_template(template, layout_name = nil, locals = nil) ⇒ Object
Renders the given template.
-
#render_with_layout(path, locals) ⇒ Object
:nodoc:.
- #resolve_layout(layout, keys) ⇒ Object
Methods inherited from AbstractRenderer
Constructor Details
This class inherits a constructor from ActionView::AbstractRenderer
Instance Method Details
#determine_template(options) ⇒ Object
Determine the template to be rendered using the given options.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'actionview/lib/action_view/renderer/template_renderer.rb', line 21 def determine_template() #:nodoc: keys = .fetch(:locals, {}).keys if .key?(:body) Template::Text.new([:body]) elsif .key?(:text) Template::Text.new([:text], formats.first) elsif .key?(:plain) Template::Text.new([:plain]) elsif .key?(:html) Template::HTML.new([:html], formats.first) elsif .key?(:file) with_fallbacks { find_template([:file], nil, false, keys, @details) } elsif .key?(:inline) handler = Template.handler_for_extension([:type] || "erb") Template.new([:inline], "inline template", handler, :locals => keys) elsif .key?(:template) if [:template].respond_to?(:render) [:template] else find_template([:template], [:prefixes], false, keys, @details) end else raise ArgumentError, "You invoked render but did not give any of :partial, :template, :inline, :file, :plain, :text or :body option." end end |
#find_layout(layout, keys) ⇒ Object
This is the method which actually finds the layout using details in the lookup context object. If no layout is found, it checks if at least a layout with the given name exists across all details before raising the error.
76 77 78 |
# File 'actionview/lib/action_view/renderer/template_renderer.rb', line 76 def find_layout(layout, keys) with_layout_format { resolve_layout(layout, keys) } end |
#render(context, options) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'actionview/lib/action_view/renderer/template_renderer.rb', line 5 def render(context, ) @view = context @details = extract_details() template = determine_template() context = @lookup_context prepend_formats(template.formats) unless context.rendered_format context.rendered_format = template.formats.first || formats.first end render_template(template, [:layout], [:locals]) end |
#render_template(template, layout_name = nil, locals = nil) ⇒ Object
Renders the given template. A string representing the layout can be supplied as well.
50 51 52 53 54 55 56 57 58 |
# File 'actionview/lib/action_view/renderer/template_renderer.rb', line 50 def render_template(template, layout_name = nil, locals = nil) #:nodoc: view, locals = @view, locals || {} render_with_layout(layout_name, locals) do |layout| instrument(:template, :identifier => template.identifier, :layout => layout.try(:virtual_path)) do template.render(view, locals) { |*name| view._layout_for(*name) } end end end |
#render_with_layout(path, locals) ⇒ Object
:nodoc:
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'actionview/lib/action_view/renderer/template_renderer.rb', line 60 def render_with_layout(path, locals) #:nodoc: layout = path && find_layout(path, locals.keys) content = yield(layout) if layout view = @view view.view_flow.set(:layout, content) layout.render(view, locals){ |*name| view._layout_for(*name) } else content end end |
#resolve_layout(layout, keys) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'actionview/lib/action_view/renderer/template_renderer.rb', line 80 def resolve_layout(layout, keys) case layout when String begin if layout =~ /^\// with_fallbacks { find_template(layout, nil, false, keys, @details) } else find_template(layout, nil, false, keys, @details) end rescue ActionView::MissingTemplate all_details = @details.merge(:formats => @lookup_context.default_formats) raise unless template_exists?(layout, nil, false, keys, all_details) end when Proc resolve_layout(layout.call, keys) when FalseClass nil else layout end end |