Module: Cadmus::Renderable

Included in:
MarkdownRenderable, PagesController
Defined in:
lib/cadmus/renderers.rb

Overview

A helper module that can be included in classes that wish to provide a Cadmus renderer. For example, an Email class might want to provide a renderer so that it can be easily transformed into HTML or text formats.

This will expose a +cadmus_renderer+ method that constructs a new renderer. Optionally, you can implement methods called +liquid_assigns+, +liquid_registers+, and +liquid_filters+, which will specify the default assigns, registers, and filters for the renderer. You can also override the +cadmus_renderer_class+ method if you want to use a renderer class aside from Cadmus::Renderers::Base.

== Example

class Email < ActiveRecord::Base
  include Cadmus::Renderable

  def liquid_template
    Liquid::Template.new(self.content)
  end

  def liquid_assigns
    { recipient: self.recipient, sender: self.sender, sent_at: self.sent_at }
  end
end

Instance Method Summary collapse

Instance Method Details

#cadmus_rendererObject

Returns a new Cadmus renderer set up using the +default_assigns+, +default_registers+ and +default_filters+ methods, if they exist.

Returns:

  • a new Cadmus renderer set up using the +default_assigns+, +default_registers+ and +default_filters+ methods, if they exist.



104
105
106
# File 'lib/cadmus/renderers.rb', line 104

def cadmus_renderer
  cadmus_renderer_class.new.tap { |renderer| setup_renderer(renderer) }
end

#cadmus_renderer_classObject

Returns the Cadmus renderer class to instanciate in the +cadmus_renderer+ method. By default, Cadmus::Renderers::Base.

Returns:

  • the Cadmus renderer class to instanciate in the +cadmus_renderer+ method. By default, Cadmus::Renderers::Base.



110
111
112
# File 'lib/cadmus/renderers.rb', line 110

def cadmus_renderer_class
  Cadmus::Renderers::Base
end

#setup_renderer(renderer) ⇒ Object (protected)

Sets the values of +default_assigns+, +default_registers+ and +default_filters+ on a given renderer using the +liquid_assigns+, +liquid_registers+ and +liquid_filters+ methods, if they're defined.



118
119
120
121
122
# File 'lib/cadmus/renderers.rb', line 118

def setup_renderer(renderer)
  renderer.default_assigns = liquid_assigns if respond_to?(:liquid_assigns, true)
  renderer.default_registers = liquid_registers if respond_to?(:liquid_registers, true)
  renderer.default_filters = liquid_filters if respond_to?(:liquid_filters, true)
end