Class: Mjml::Handler

Inherits:
Object
  • Object
show all
Defined in:
lib/mjml/handler.rb

Instance Method Summary collapse

Instance Method Details

#call(template, source = nil) ⇒ Object

Optional second source parameter to make it work with Rails >= 6: Beginning with Rails 6 template handlers get the source of the template as the second parameter.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/mjml/handler.rb', line 16

def call(template, source = nil)
  compiled_source = compile_source(source, template)

  parser_class = Mjml.use_mrml ? 'MrmlParser' : 'Parser'
  # Per MJML v4 syntax documentation[0] valid/render'able document MUST start with <mjml> root tag
  # If we get here and template source doesn't start with one it means
  # that we are rendering partial named according to legacy naming convention (partials ending with '.mjml')
  # Therefore we skip MJML processing and return raw compiled source. It will be processed
  # by MJML library when top-level layout/template is rendered
  #
  # [0] - https://github.com/mjmlio/mjml/blob/master/doc/components_1.md#mjml
  if /<mjml.*?>/i.match?(compiled_source)
    "Mjml::#{parser_class}.new(begin;#{compiled_source};end).render.html_safe"
  else
    compiled_source
  end
end

#template_handlerObject



9
10
11
# File 'lib/mjml/handler.rb', line 9

def template_handler
  @template_handler ||= ActionView::Template.registered_template_handler(Mjml.template_language)
end