module SimpleJson::SimpleJsonRenderable

The module for overriding rendering with SimpleJson

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

  ...
end

Public Instance Methods

default_render(*args) click to toggle source

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

Calls superclass method
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
Calls superclass method
# 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_format() click to toggle source
Calls superclass method
# File lib/simple_json/simple_json_renderable.rb, line 50
def rendered_format
  return @rendered_format if defined?(@rendered_format)

  super
end
simple_renderer() click to toggle source
# 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) click to toggle source
# File lib/simple_json/simple_json_renderable.rb, line 77
def template_name(name)
  return name if name.include?('/')

  "#{template_path}/#{name}"
end
template_path() click to toggle source
# File lib/simple_json/simple_json_renderable.rb, line 73
def template_path
  self.class.name.delete_suffix('Controller').underscore
end