module SelfRenderer

Constants

VERSION

Public Instance Methods

render_to_hash(template: nil, partial: nil, assigns: {}, locals: {}) click to toggle source

Returns a Hash representation of this object as rendered by render_to_json

# File lib/self_renderer.rb, line 17
def render_to_hash(template: nil, partial: nil, assigns: {}, locals: {})
  raise ArgumentError.new("Must use json template") unless template.nil? || template.to_s.include?(".json")
  raise ArgumentError.new("Must use json partial") unless partial.nil? || partial.to_s.include?(".json")
  JSON.load render_with(template: template, partial: partial, assigns: assigns, locals: locals)
end
render_with(template: nil, partial: nil, assigns: {}, locals: {}) click to toggle source

Renders an string representing this object using the specified template or partial

# File lib/self_renderer.rb, line 7
def render_with(template: nil, partial: nil, assigns: {}, locals: {})
  name          = self.class.name.parameterize(separator: "_").to_sym
  assigns[name] = self
  locals[name]  = self
  return self_renderer.render(template, assigns: assigns, locals: locals).squish if template.present?
  return self_renderer.render(partial: partial, assigns: assigns, locals: locals).squish if partial.present?
  nil
end

Protected Instance Methods

self_renderer() click to toggle source
# File lib/self_renderer.rb, line 25
def self_renderer
  @self_renderer ||= begin
    renderer = ApplicationController.renderer.new

    # get around limitations in devise/warden when rendering views outside the contect of a formal http request
    if defined? Warden
      env = renderer.instance_eval { @env }
      warden = Warden::Proxy.new(env, Warden::Manager.new(Rails.application))
      env["warden"] = warden
    end

    renderer
  end
end