Module: Toolchest::Renderer

Defined in:
lib/toolchest/renderer.rb

Class Method Summary collapse

Class Method Details

.render(toolbox, action_or_template) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/toolchest/renderer.rb', line 6

def render(toolbox, action_or_template)
  ensure_handlers_registered!

  name = action_or_template.to_s
  template_name = name.include?("/") ? name : "#{toolbox.controller_name}/#{name}"
  assigns = extract_assigns(toolbox)

  lookup = ActionView::LookupContext.new(view_paths)
  view = ActionView::Base.with_empty_template_cache.new(lookup, assigns, nil)
  apply_helpers(view, toolbox)

  result = view.render(template: template_name, formats: [:json])

  case result
  when String
    # jb returns JSON string via monkey patches, jbuilder returns JSON string natively
    begin
      JSON.parse(result)
    rescue JSON::ParserError
      result
    end
  when Hash, Array
    result
  else
    result
  end
rescue ActionView::MissingTemplate
  raise Toolchest::MissingTemplate,
    "Missing template toolboxes/#{template_name} with formats: json (searched in: #{view_paths.join(", ")})"
end