class Msgtrail::PageRenderer

Attributes

article[RW]
articles[RW]
config[RW]
layout[RW]
markdown[RW]
plaintext[RW]
template[RW]
theme_directory[RW]

Public Class Methods

new(layout_filepath, template_filepath, config) click to toggle source
# File lib/msgtrail/renderers.rb, line 33
def initialize(layout_filepath, template_filepath, config)
  self.article = {}
  self.config = config
  self.markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, fenced_code_blocks: true, strikethrough: true)
  self.plaintext = Redcarpet::Markdown.new(Redcarpet::Render::StripDown)
  self.theme_directory = File.join(config.working_directory, config.settings.file_matter.theme_directory)
  begin
    self.layout = File.read(layout_filepath)
  rescue
    puts("Can't find '#{layout_filepath}' (#{$!})")
    exit(2)
  end
  begin
    self.template = File.read(template_filepath)
  rescue
    puts("Can't find '#{template_filepath}' (#{$!})")
    exit(2)
  end
end

Public Instance Methods

_render(template) click to toggle source
# File lib/msgtrail/renderers.rb, line 65
def _render(template)
  ERB.new(template).result(binding)
end
method_missing(missing_method_name, *args, &block) click to toggle source

Offer shortcut `cfg` to `settings.config` for use inside ERBs

Calls superclass method
# File lib/msgtrail/renderers.rb, line 79
def method_missing(missing_method_name, *args, &block)
  if 'cfg' == missing_method_name.to_s
    self.config.settings
  else
    super
  end
end
render() click to toggle source
# File lib/msgtrail/renderers.rb, line 53
def render
  erbs = [self.template, self.layout] # Note order!
  # Inject accepts value and block. Nil in inject(nil) sets initial value.
  # First iteration: prev = nil and erb = self.template.
  # Since self.template has no yield only a string is rendered.
  # Second iteration: prev = rendered string and erb = self.layout.
  # Since self.layout has yield, yield will be replaced by string in prev.
  erbs.inject(nil) do |prev, erb|
    _render(erb) { prev }
  end
end
render_partial(partial_filename, variables) click to toggle source
# File lib/msgtrail/renderers.rb, line 69
def render_partial(partial_filename, variables)
  partial_filepath = File.join(self.theme_directory, "_#{partial_filename}.html.erb")
  PartialRenderer.new(partial_filepath, variables, self.config).render
end
track(event, sub_event = nil) click to toggle source
# File lib/msgtrail/renderers.rb, line 74
def track(event, sub_event = nil)
  "<img src=\"#{self.config.settings.domain_matter.tracking_pixel_url}?e=#{event}&se=#{sub_event}\" width=\"1\" height=\"1\" alt=\".\"/>" if self.config.settings.domain_matter.tracking_pixel_url
end