Module: SimpleJson::SimpleJsonRenderable

Extended by:
ActiveSupport::Concern
Defined in:
lib/simple_json/simple_json_renderable.rb

Overview

The module for overriding rendering with SimpleJson

class XXXController < ActionController::Base
  include SimpleJson::SimpleJsonRenderable

  ...
end

Instance Method Summary collapse

Instance Method Details

#default_render(*args) ⇒ Object

monkey-patch for ActionController::ImplicitRender#default_render bypassing template search



15
16
17
18
19
20
21
22
23
24
# File 'lib/simple_json/simple_json_renderable.rb', line 15

def default_render(*args)
  return super unless request.format.json?

  @simple_json_template = simple_renderer.renderer(template_name(action_name))
  if @simple_json_template
    render(*args)
  else
    super
  end
end

#process_options(options) ⇒ Object



46
47
48
# File 'lib/simple_json/simple_json_renderable.rb', line 46

def process_options(options)
  head options[:status] if options.key?(:status)
end

#render_json_template(template_name, **_options) ⇒ Object



62
63
64
65
# File 'lib/simple_json/simple_json_renderable.rb', line 62

def render_json_template(template_name, **_options)
  json = simple_renderer.render(template_name)
  SimpleJson.json_module.encode(json)
end

#render_to_body(options) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/simple_json/simple_json_renderable.rb', line 26

def render_to_body(options)
  return super unless request.format.json?
  return super if options[:skip_simple_json]
  # use super when any of [:body, :plain, :html] exist in options
  return super if self.class::RENDER_FORMATS_IN_PRIORITY.any? { |key| options.key? key }

  template_name = template_name(options[:template] || action_name)
  if options.key?(:json)
    process_options(options)
    @rendered_format = 'application/json; charset=utf-8'
    SimpleJson.json_module.encode(options[:json])
  elsif simple_renderer.renderer(template_name)
    process_options(options)
    @rendered_format = 'application/json; charset=utf-8'
    render_json_template(template_name, **options)
  else
    super
  end
end

#rendered_formatObject



50
51
52
53
54
# File 'lib/simple_json/simple_json_renderable.rb', line 50

def rendered_format
  return @rendered_format if defined?(@rendered_format)

  super
end

#simple_rendererObject



56
57
58
59
60
# File 'lib/simple_json/simple_json_renderable.rb', line 56

def simple_renderer
  @simple_renderer ||= SimpleJsonRenderer.new(self).tap do |r|
    r.extend(_helpers) if respond_to?(:_helpers)
  end
end

#template_name(name) ⇒ Object



77
78
79
80
81
# File 'lib/simple_json/simple_json_renderable.rb', line 77

def template_name(name)
  return name if name.include?('/')

  "#{template_path}/#{name}"
end

#template_pathObject



73
74
75
# File 'lib/simple_json/simple_json_renderable.rb', line 73

def template_path
  self.class.name.delete_suffix('Controller').underscore
end