Module: Mjml

Defined in:
lib/mjml.rb,
lib/mjml/parser.rb,
lib/mjml/handler.rb,
lib/mjml/railtie.rb,
lib/mjml/version.rb,
lib/mjml/mrml_parser.rb,
lib/generators/mjml/mailer/mailer_generator.rb

Defined Under Namespace

Modules: Generators Classes: Handler, MrmlParser, Parser, Railtie

Constant Summary collapse

VERSION =

Version number no longer matches MJML.io version

'4.12.1'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject



126
127
128
129
130
# File 'lib/mjml.rb', line 126

def logger
  @logger ||= Logger.new($stdout).tap do |log|
    log.progname = name
  end
end

Class Method Details

.check_for_custom_mjml_binaryObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/mjml.rb', line 60

def self.check_for_custom_mjml_binary
  if const_defined?('BIN') && Mjml::BIN.present?
    logger.warn('Setting `Mjml::BIN` is deprecated and will be removed in a future version! ' \
                'Please use `Mjml.mjml_binary=` instead.')
    self.mjml_binary = Mjml::BIN
    remove_const 'BIN'
  end

  return if mjml_binary.blank?

  return mjml_binary if check_version(mjml_binary)

  raise "MJML.mjml_binary is set to '#{mjml_binary}' but MJML-Rails could not validate that " \
        'it is a valid MJML binary. Please check your configuration.'
end

.check_for_global_mjml_binaryObject



97
98
99
100
101
102
103
# File 'lib/mjml.rb', line 97

def self.check_for_global_mjml_binary
  stdout, _, status = Open3.capture3('which mjml')
  return unless status.success?

  mjml_bin = stdout.chomp
  return mjml_bin if mjml_bin.present? && check_version(mjml_bin)
end

.check_for_mjml_package(package_manager, bin_command, binary_path) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/mjml.rb', line 76

def self.check_for_mjml_package(package_manager, bin_command, binary_path)
  stdout, _, status = Open3.capture3("which #{package_manager}")
  return unless status.success?

  pm_bin = stdout.chomp

  stdout, _, status = Open3.capture3("#{pm_bin} #{bin_command}")
  return unless status.success?

  mjml_bin = File.join(stdout.chomp, *binary_path)
  return mjml_bin if check_version(mjml_bin)
rescue Errno::ENOENT # package manager is not installed
  nil
end

.check_for_mrml_binaryObject



105
106
107
108
109
110
111
112
# File 'lib/mjml.rb', line 105

def self.check_for_mrml_binary
  return unless Mjml.use_mrml

  MRML.present?
rescue NameError
  Mjml.mjml_binary_error_string = 'Couldn\'t find MRML - did you add \'mrml\' to your Gemfile?'
  false
end

.check_for_package_mjml_binaryObject



91
92
93
94
95
# File 'lib/mjml.rb', line 91

def self.check_for_package_mjml_binary
  check_for_mjml_package('bun', 'pm bin', ['mjml']) ||
    check_for_mjml_package('npm', 'root', ['.bin', 'mjml']) ||
    check_for_mjml_package('yarn', 'bin mjml', [])
end

.check_version(bin) ⇒ Object



37
38
39
40
41
42
# File 'lib/mjml.rb', line 37

def self.check_version(bin)
  stdout, _, status = run_mjml('--version', mjml_bin: bin)
  status.success? && stdout.include?("mjml-core: #{Mjml.mjml_binary_version_supported}")
rescue StandardError
  false
end

.discover_mjml_binObject



114
115
116
117
# File 'lib/mjml.rb', line 114

def self.discover_mjml_bin
  logger.warn('`Mjml.discover_mjml_bin` is deprecated and has no effect anymore! ' \
              'Please use `Mjml.mjml_binary=` to set a custom MJML binary.')
end

.run_mjml(args, mjml_bin: valid_mjml_binary) ⇒ Object



44
45
46
# File 'lib/mjml.rb', line 44

def self.run_mjml(args, mjml_bin: valid_mjml_binary)
  Open3.capture3("#{mjml_bin} #{args}")
end

.setup {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Mjml)

    the object that the method was called on



119
120
121
# File 'lib/mjml.rb', line 119

def self.setup
  yield self if block_given?
end

.valid_mjml_binaryObject



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/mjml.rb', line 48

def self.valid_mjml_binary
  self.valid_mjml_binary = @@valid_mjml_binary ||
                           check_for_custom_mjml_binary ||
                           check_for_package_mjml_binary ||
                           check_for_global_mjml_binary ||
                           check_for_mrml_binary

  return @@valid_mjml_binary if @@valid_mjml_binary

  puts Mjml.mjml_binary_error_string
end