mjml-rails 4.6.1 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a845d39f307dd7d452b0766805154e622aecaed3bbb3b4d392ead880939dc04
4
- data.tar.gz: 13a7793222a8253ce62dd97f2a225379615515225e7f987deb23f5a93d6dbbfd
3
+ metadata.gz: 7b9582e0d35041cd78aa95808af7d2808ce467eb1b70eb511b57f39679b661af
4
+ data.tar.gz: 402a1cf82168f58d8abde20ad280473e897eb0d0489d88281c72d52e830c71c8
5
5
  SHA512:
6
- metadata.gz: f05c5580304ececa283ea79e17b61c7a281ce9b327d8aa3c73bacbdeaa8873049f3491243f03964e8fe0bf33f4c4e9ff2c0c70c2424100ae23f7d1a26d3322da
7
- data.tar.gz: 111b70710d670a442564aa877652f3711c0ad9c934e1be8edd24a6fc0011f7019c3c9aaa58abec7cfcc338b7ca5ecac2aa6c3e3bd9af30cbb68402dcfa5a3165
6
+ metadata.gz: 31edb6ed2fbfaa8e1888a97e6a07334e0551b67ab1ed66153445be516ca2f916b76e4cf0d378915d7ee3cb5082cdd307570bfc1191760bb19243472e4758b757
7
+ data.tar.gz: 85be7ae9d1be8adeac4020cfed26e9a30fa917bb7c051b88b3c9c14a1a204b9ad64d37c3a5920d72a9593fc6389fd71cad59ae0baf3b0bdc5f9cb7892c8501c6
checksums.yaml.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  An example template might look like:
10
10
 
11
11
  ```erb
12
- <!-- ./app/views/user_mailer/email.html.mjml -->
12
+ <!-- ./app/views/user_mailer/user_signup_confirmation.mjml -->
13
13
  <mjml>
14
14
  <mj-head>
15
15
  <mj-preview>Hello World</mj-preview>
@@ -18,7 +18,7 @@ An example template might look like:
18
18
  <mj-section>
19
19
  <mj-column>
20
20
  <mj-text>Hello World</mj-text>
21
- <%= render partial: "info" %>
21
+ <%= render partial: "info", formats: [:html] %>
22
22
  </mj-column>
23
23
  </mj-section>
24
24
  </mj-body>
@@ -1,9 +1,11 @@
1
- require "rails/generators/erb/mailer/mailer_generator"
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators/erb/mailer/mailer_generator'
2
4
 
3
5
  module Mjml
4
6
  module Generators
5
7
  class MailerGenerator < Erb::Generators::MailerGenerator
6
- source_root File.expand_path("../templates", __FILE__)
8
+ source_root File.expand_path('templates', __dir__)
7
9
 
8
10
  private
9
11
 
@@ -26,8 +28,8 @@ module Mjml
26
28
  def filename_with_extensions(name, file_format = format)
27
29
  # Due to MJML single-pass processing nature
28
30
  # layout files MUST have .mjml extension, but views/templates cannot
29
- is_layout_file = name.in?([:layout, "mailer"])
30
- [name, file_format, is_layout_file ? handler : view_handler].compact.join(".")
31
+ is_layout_file = name.in?([:layout, 'mailer'])
32
+ [name, file_format, is_layout_file ? handler : view_handler].compact.join('.')
31
33
  end
32
34
  end
33
35
  end
data/lib/mjml/handler.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'action_view'
2
4
  require 'action_view/template'
3
5
  require 'rails/version'
@@ -12,12 +14,7 @@ module Mjml
12
14
  # Beginning with Rails 6 template handlers get the source of the template as the second
13
15
  # parameter.
14
16
  def call(template, source = nil)
15
- compiled_source =
16
- if Rails::VERSION::MAJOR >= 6
17
- template_handler.call(template, source)
18
- else
19
- template_handler.call(template)
20
- end
17
+ compiled_source = compile_source(source, template)
21
18
 
22
19
  # Per MJML v4 syntax documentation[0] valid/render'able document MUST start with <mjml> root tag
23
20
  # If we get here and template source doesn't start with one it means
@@ -25,12 +22,22 @@ module Mjml
25
22
  # Therefore we skip MJML processing and return raw compiled source. It will be processed
26
23
  # by MJML library when top-level layout/template is rendered
27
24
  #
28
- # [0] - https://github.com/mjmlio/mjml/blob/master/doc/guide.md#mjml
29
- if compiled_source =~ /<mjml.*?>/i
25
+ # [0] - https://github.com/mjmlio/mjml/blob/master/doc/components_1.md#mjml
26
+ if /<mjml.*?>/i.match?(compiled_source)
30
27
  "Mjml::Parser.new(begin;#{compiled_source};end).render.html_safe"
31
28
  else
32
29
  compiled_source
33
30
  end
34
31
  end
32
+
33
+ private
34
+
35
+ def compile_source(source, template)
36
+ if Rails::VERSION::MAJOR >= 6
37
+ template_handler.call(template, source)
38
+ else
39
+ template_handler.call(template)
40
+ end
41
+ end
35
42
  end
36
43
  end
data/lib/mjml/parser.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mjml
2
4
  class Parser
3
5
  class ParseError < StandardError; end
@@ -7,8 +9,9 @@ module Mjml
7
9
  # Create new parser
8
10
  #
9
11
  # @param input [String] The string to transform in html
10
- def initialize input
12
+ def initialize(input)
11
13
  raise Mjml.mjml_binary_error_string unless Mjml.valid_mjml_binary
14
+
12
15
  @input = input
13
16
  end
14
17
 
@@ -16,14 +19,15 @@ module Mjml
16
19
  #
17
20
  # @return [String]
18
21
  def render
19
- in_tmp_file = Tempfile.open(["in", ".mjml"]) do |file|
22
+ in_tmp_file = Tempfile.open(['in', '.mjml']) do |file|
20
23
  file.write(input)
21
24
  file # return tempfile from block so #unlink works later
22
25
  end
23
26
  run(in_tmp_file.path, Mjml.beautify, Mjml.minify, Mjml.validation_level)
24
- rescue
27
+ rescue StandardError
25
28
  raise if Mjml.raise_render_exception
26
- ""
29
+
30
+ ''
27
31
  ensure
28
32
  in_tmp_file.unlink
29
33
  end
@@ -31,14 +35,18 @@ module Mjml
31
35
  # Exec mjml command
32
36
  #
33
37
  # @return [String] The result as string
34
- def run(in_tmp_file, beautify=true, minify=false, validation_level="strict")
35
- Tempfile.create(["out", ".html"]) do |out_tmp_file|
36
- command = "-r #{in_tmp_file} -o #{out_tmp_file.path} --config.beautify #{beautify} --config.minify #{minify} --config.validationLevel #{validation_level}"
38
+ # rubocop:disable Style/OptionalBooleanParameter: Fixing this offense would imply a change in the public API.
39
+ def run(in_tmp_file, beautify = true, minify = false, validation_level = 'strict')
40
+ Tempfile.create(['out', '.html']) do |out_tmp_file|
41
+ command = "-r #{in_tmp_file} -o #{out_tmp_file.path} " \
42
+ "--config.beautify #{beautify} --config.minify #{minify} --config.validationLevel #{validation_level}"
37
43
  _, stderr, status = Mjml.run_mjml(command)
38
- raise ParseError.new(stderr.chomp) unless status.success?
39
- Mjml.logger.warn(stderr.chomp) unless stderr.blank?
44
+ raise ParseError, stderr.chomp unless status.success?
45
+
46
+ Mjml.logger.warn(stderr.chomp) if stderr.present?
40
47
  out_tmp_file.read
41
48
  end
42
49
  end
50
+ # rubocop:enable Style/OptionalBooleanParameter
43
51
  end
44
52
  end
data/lib/mjml/railtie.rb CHANGED
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mjml
2
4
  class Railtie < Rails::Railtie
3
5
  config.mjml = Mjml
4
- config.app_generators.mailer :template_engine => :mjml
6
+ config.app_generators.mailer template_engine: :mjml
5
7
 
6
- initializer "mjml-rails.register_template_handler" do
8
+ initializer 'mjml-rails.register_template_handler' do
7
9
  ActionView::Template.register_template_handler :mjml, Mjml::Handler.new
8
- Mime::Type.register_alias "text/html", :mjml
10
+ Mime::Type.register_alias 'text/html', :mjml
9
11
  end
10
12
 
11
13
  config.to_prepare do
data/lib/mjml/version.rb CHANGED
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mjml
2
- # Version number no longer matches MJML.io version
3
- VERSION = "4.6.1"
4
+ # Version number no longer matches MJML.io version
5
+ VERSION = '4.7.0'
4
6
  end
data/lib/mjml-rails.rb CHANGED
@@ -1 +1,5 @@
1
- require "mjml"
1
+ # rubocop:disable Naming/FileName
2
+ # frozen_string_literal: true
3
+
4
+ require 'mjml'
5
+ # rubocop:enable Naming/FileName
data/lib/mjml.rb CHANGED
@@ -1,10 +1,12 @@
1
- require "rubygems"
2
- require "open3"
1
+ # frozen_string_literal: true
3
2
 
4
- require "mjml/handler"
5
- require "mjml/parser"
3
+ require 'rubygems'
4
+ require 'open3'
6
5
 
7
- require "mjml/railtie" if defined?(Rails)
6
+ require 'mjml/handler'
7
+ require 'mjml/parser'
8
+
9
+ require 'mjml/railtie' if defined?(Rails)
8
10
 
9
11
  module Mjml
10
12
  mattr_accessor \
@@ -19,13 +21,14 @@ module Mjml
19
21
 
20
22
  mattr_writer :valid_mjml_binary
21
23
 
22
- @@template_language = :erb
23
- @@raise_render_exception = true
24
- @@mjml_binary_version_supported = "4."
25
- @@mjml_binary_error_string = "Couldn't find the MJML #{Mjml.mjml_binary_version_supported} binary.. have you run $ npm install mjml?"
26
- @@beautify = true
27
- @@minify = false
28
- @@validation_level = "strict"
24
+ self.template_language = :erb
25
+ self.raise_render_exception = true
26
+ self.mjml_binary_version_supported = '4.'
27
+ self.mjml_binary_error_string = "Couldn't find the MJML #{Mjml.mjml_binary_version_supported} binary.." \
28
+ ' have you run $ npm install mjml?'
29
+ self.beautify = true
30
+ self.minify = false
31
+ self.validation_level = 'strict'
29
32
 
30
33
  def self.check_version(bin)
31
34
  stdout, _, status = run_mjml('--version', mjml_bin: bin)
@@ -39,11 +42,11 @@ module Mjml
39
42
  end
40
43
 
41
44
  def self.valid_mjml_binary
42
- @@valid_mjml_binary ||=
43
- check_for_custom_mjml_binary ||
44
- check_for_yarn_mjml_binary ||
45
- check_for_npm_mjml_binary ||
46
- check_for_global_mjml_binary
45
+ self.valid_mjml_binary = @@valid_mjml_binary ||
46
+ check_for_custom_mjml_binary ||
47
+ check_for_yarn_mjml_binary ||
48
+ check_for_npm_mjml_binary ||
49
+ check_for_global_mjml_binary
47
50
 
48
51
  return @@valid_mjml_binary if @@valid_mjml_binary
49
52
 
@@ -52,21 +55,23 @@ module Mjml
52
55
 
53
56
  def self.check_for_custom_mjml_binary
54
57
  if const_defined?('BIN') && Mjml::BIN.present?
55
- logger.warn('Setting `Mjml::BIN` is deprecated and will be removed in a future version! Please use `Mjml.mjml_binary=` instead.')
58
+ logger.warn('Setting `Mjml::BIN` is deprecated and will be removed in a future version! ' \
59
+ 'Please use `Mjml.mjml_binary=` instead.')
56
60
  self.mjml_binary = Mjml::BIN
57
61
  remove_const 'BIN'
58
62
  end
59
63
 
60
- return unless mjml_binary.present?
64
+ return if mjml_binary.blank?
61
65
 
62
66
  return mjml_binary if check_version(mjml_binary)
63
67
 
64
- 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."
68
+ raise "MJML.mjml_binary is set to '#{mjml_binary}' but MJML-Rails could not validate that " \
69
+ 'it is a valid MJML binary. Please check your configuration.'
65
70
  end
66
71
 
67
72
  def self.check_for_yarn_mjml_binary
68
73
  yarn_bin = `which yarn`.chomp
69
- return unless yarn_bin.present?
74
+ return if yarn_bin.blank?
70
75
 
71
76
  mjml_bin = "#{yarn_bin} run mjml"
72
77
  return mjml_bin if check_version(mjml_bin)
@@ -96,7 +101,8 @@ module Mjml
96
101
  end
97
102
 
98
103
  def self.discover_mjml_bin
99
- logger.warn('`Mjml.discover_mjml_bin` is deprecated and has no effect anymore! Please use `Mjml.mjml_binary=` to set a custom MJML binary.')
104
+ logger.warn('`Mjml.discover_mjml_bin` is deprecated and has no effect anymore! ' \
105
+ 'Please use `Mjml.mjml_binary=` to set a custom MJML binary.')
100
106
  end
101
107
 
102
108
  def self.setup
@@ -108,7 +114,7 @@ module Mjml
108
114
 
109
115
  def logger
110
116
  @logger ||= Logger.new($stdout).tap do |log|
111
- log.progname = self.name
117
+ log.progname = name
112
118
  end
113
119
  end
114
120
  end
@@ -1,26 +1,28 @@
1
- require "test_helper"
2
- require "generators/mjml/mailer/mailer_generator"
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ require 'generators/mjml/mailer/mailer_generator'
3
5
 
4
6
  class GeneratorTest < Rails::Generators::TestCase
5
7
  tests Mjml::Generators::MailerGenerator
6
- destination File.expand_path("../tmp", __FILE__)
8
+ destination File.expand_path('tmp', __dir__)
7
9
  setup :prepare_destination
8
10
 
9
- test "assert all views are properly created with given name" do
10
- run_generator %w(notifier foo bar baz)
11
+ test 'assert all views are properly created with given name' do
12
+ run_generator %w[notifier foo bar baz]
11
13
 
12
- assert_file "app/views/layouts/mailer.html.mjml" do |mailer|
13
- assert_match "<mjml>", mailer
14
- assert_match "<mj-body>", mailer
15
- assert_match "<%= yield %>", mailer
14
+ assert_file 'app/views/layouts/mailer.html.mjml' do |mailer|
15
+ assert_match '<mjml>', mailer
16
+ assert_match '<mj-body>', mailer
17
+ assert_match '<%= yield %>', mailer
16
18
  end
17
19
 
18
- assert_file "app/views/notifier_mailer/foo.html.erb" do |template|
19
- assert_match "<%= @greeting %>", template
20
- assert_match "app/views/notifier_mailer/foo.html.erb", template
20
+ assert_file 'app/views/notifier_mailer/foo.html.erb' do |template|
21
+ assert_match '<%= @greeting %>', template
22
+ assert_match 'app/views/notifier_mailer/foo.html.erb', template
21
23
  end
22
24
 
23
- assert_file "app/views/notifier_mailer/bar.html.erb"
24
- assert_file "app/views/notifier_mailer/baz.html.erb"
25
+ assert_file 'app/views/notifier_mailer/bar.html.erb'
26
+ assert_file 'app/views/notifier_mailer/baz.html.erb'
25
27
  end
26
28
  end
data/test/mjml_test.rb CHANGED
@@ -1,14 +1,16 @@
1
- require "test_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
2
4
 
3
5
  class NotifierMailer < ActionMailer::Base
4
- self.view_paths = File.expand_path("../views", __FILE__)
6
+ self.view_paths = File.expand_path('views', __dir__)
5
7
 
6
- layout "default"
8
+ layout 'default'
7
9
 
8
10
  def inform_contact(recipient)
9
11
  @recipient = recipient
10
12
 
11
- mail(to: @recipient, from: "app@example.com") do |format|
13
+ mail(to: @recipient, from: 'app@example.com') do |format|
12
14
  format.text
13
15
  format.html
14
16
  end
@@ -17,7 +19,7 @@ class NotifierMailer < ActionMailer::Base
17
19
  def invalid_template(recipient)
18
20
  @recipient = recipient
19
21
 
20
- mail(to: @recipient, from: "app@example.com") do |format|
22
+ mail(to: @recipient, from: 'app@example.com') do |format|
21
23
  format.html
22
24
  format.text
23
25
  end
@@ -25,91 +27,90 @@ class NotifierMailer < ActionMailer::Base
25
27
  end
26
28
 
27
29
  class NoLayoutMailer < ActionMailer::Base
28
- self.view_paths = File.expand_path("../views", __FILE__)
30
+ self.view_paths = File.expand_path('views', __dir__)
29
31
 
30
32
  layout nil
31
33
 
32
34
  def inform_contact(recipient)
33
35
  @recipient = recipient
34
36
 
35
- mail(to: @recipient, from: "app@example.com") do |format|
36
- format.mjml
37
- end
37
+ mail(to: @recipient, from: 'app@example.com', &:mjml)
38
38
  end
39
39
 
40
40
  def with_owa(recipient)
41
41
  @recipient = recipient
42
42
 
43
- mail(to: @recipient, from: "app@example.com") do |format|
44
- format.mjml
45
- end
43
+ mail(to: @recipient, from: 'app@example.com', &:mjml)
46
44
  end
47
45
  end
48
46
 
49
47
  class NotifierMailerTest < ActiveSupport::TestCase
50
- test "MJML layout based multipart email is generated correctly" do
51
- email = NotifierMailer.inform_contact("user@example.com")
48
+ test 'MJML layout based multipart email is generated correctly' do
49
+ email = NotifierMailer.inform_contact('user@example.com')
52
50
 
53
- assert_equal "multipart/alternative", email.mime_type
51
+ assert_equal 'multipart/alternative', email.mime_type
54
52
 
55
53
  # To debug tests:
56
54
  # Mjml.logger.info email.mime_type
57
55
  # Mjml.logger.info email.to_s
58
56
  # Mjml.logger.info email.html_part.body
59
57
 
60
- refute email.html_part.body.match(%r{</?mj.+?>})
61
- assert email.html_part.body.match(/<body>/)
58
+ assert_not email.html_part.body.match(%r{</?mj.+?>})
59
+ assert email.html_part.body.include?('<body')
62
60
  assert email.html_part.body.match(/Hello, user@example.com!/)
63
- assert email.html_part.body.match(%r{<h2>We inform you about something</h2>})
61
+ assert email.html_part.body.include?('<h2>We inform you about something</h2>')
64
62
  assert email.html_part.body.match(%r{<a href="https://www.example.com">this link</a>})
65
- assert email.html_part.body.match(/tracking-code-123/)
63
+ assert email.html_part.body.include?('tracking-code-123')
66
64
 
67
- assert email.text_part.body.match(/We inform you about something/)
65
+ assert email.text_part.body.include?('We inform you about something')
68
66
  assert email.text_part.body.match(%r{Please visit https://www.example.com})
69
67
  end
70
68
 
71
- test "Invalid template raises error with validation level strict" do
69
+ test 'Invalid template raises error with validation level strict' do
72
70
  with_settings(validation_level: 'strict') do
73
- email = NotifierMailer.invalid_template("user@example.com")
71
+ email = NotifierMailer.invalid_template('user@example.com')
74
72
  assert_raise(ActionView::Template::Error) { email.html_part.body.to_s }
75
73
  end
76
74
  end
77
75
 
78
- test "Invalid template gets compiled with validation level soft" do
76
+ test 'Invalid template gets compiled with validation level soft' do
77
+ # suppress warning of MJML binary
78
+ Mjml.logger.stubs(:warn)
79
+
79
80
  with_settings(validation_level: 'soft') do
80
- email = NotifierMailer.invalid_template("user@example.com")
81
- assert email.text_part.body.match(/This is valid/)
82
- assert email.html_part.body.match(/This is valid/)
83
- refute email.html_part.body.match(/This is invalid/)
81
+ email = NotifierMailer.invalid_template('user@example.com')
82
+ assert email.text_part.body.include?('This is valid')
83
+ assert email.html_part.body.include?('This is valid')
84
+ assert_not email.html_part.body.include?('This is invalid')
84
85
  end
85
86
  end
86
87
  end
87
88
 
88
89
  class NotifierMailerTest < ActiveSupport::TestCase
89
- test "old mjml-rails configuration style MJML template is rendered correctly" do
90
- email = NoLayoutMailer.inform_contact("user@example.com")
90
+ test 'old mjml-rails configuration style MJML template is rendered correctly' do
91
+ email = NoLayoutMailer.inform_contact('user@example.com')
91
92
 
92
- assert_equal "text/html", email.mime_type
93
+ assert_equal 'text/html', email.mime_type
93
94
 
94
- refute email.body.match(%r{</?mj.+?>})
95
- assert email.body.match(/<body>/)
95
+ assert_not email.body.match(%r{</?mj.+?>})
96
+ assert email.body.include?('<body')
96
97
  assert email.body.match(/Welcome, user@example.com!/)
97
- assert email.body.match(%r{<h2>We inform you about something</h2>})
98
+ assert email.body.include?('<h2>We inform you about something</h2>')
98
99
  assert email.body.match(%r{<a href="https://www.example.com">this link</a>})
99
- refute email.body.match(/tracking-code-123/)
100
+ assert_not email.body.include?('tracking-code-123')
100
101
  end
101
102
 
102
- test "old mjml-rails MJML template with owa is rendered correctly" do
103
- email = NoLayoutMailer.with_owa("user@example.com")
103
+ test 'old mjml-rails MJML template with owa is rendered correctly' do
104
+ email = NoLayoutMailer.with_owa('user@example.com')
104
105
 
105
- assert_equal "text/html", email.mime_type
106
+ assert_equal 'text/html', email.mime_type
106
107
 
107
- refute email.body.match(%r{</?mj.+?>})
108
- assert email.body.match(/<body>/)
108
+ assert_not email.body.match(%r{</?mj.+?>})
109
+ assert email.body.include?('<body')
109
110
  assert email.body.match(/Welcome, user@example.com!/)
110
- assert email.body.match(%r{<h2>We inform you about something</h2>})
111
+ assert email.body.include?('<h2>We inform you about something</h2>')
111
112
  assert email.body.match(%r{<a href="https://www.example.com">this link</a>})
112
- refute email.body.match(/tracking-code-123/)
113
+ assert_not email.body.include?('tracking-code-123')
113
114
  end
114
115
  end
115
116
 
@@ -135,13 +136,16 @@ describe Mjml do
135
136
  it 'raises an error if mjml_binary is invalid' do
136
137
  Mjml.mjml_binary = 'some custom value'
137
138
  err = expect { Mjml.valid_mjml_binary }.must_raise(StandardError)
138
- expect(err.message).must_match(/MJML\.mjml_binary is set to 'some custom value' but MJML-Rails could not validate that it is a valid MJML binary/)
139
+ assert(err.message.start_with?("MJML.mjml_binary is set to 'some custom value' " \
140
+ 'but MJML-Rails could not validate that it is a valid MJML binary'))
139
141
  end
140
142
 
141
143
  it 'honors old Mjml::BIN way of setting custom binary' do
142
- Mjml::BIN = 'set by old way'
144
+ silence_warnings { Mjml::BIN = 'set by old way' }
145
+ Mjml.logger.expects(:warn).with(regexp_matches(/Setting `Mjml::BIN` is deprecated/))
143
146
  err = expect { Mjml.valid_mjml_binary }.must_raise(StandardError)
144
- expect(err.message).must_match(/MJML\.mjml_binary is set to 'set by old way' but MJML-Rails could not validate that it is a valid MJML binary/)
147
+ assert(err.message.start_with?("MJML.mjml_binary is set to 'set by old way' " \
148
+ 'but MJML-Rails could not validate that it is a valid MJML binary'))
145
149
  end
146
150
 
147
151
  it 'ignores empty Mjml::BIN' do
@@ -149,7 +153,8 @@ describe Mjml do
149
153
  Mjml.mjml_binary = 'set by mjml_binary'
150
154
 
151
155
  err = expect { Mjml.valid_mjml_binary }.must_raise(StandardError)
152
- expect(err.message).must_match(/MJML\.mjml_binary is set to 'set by mjml_binary' but MJML-Rails could not validate that it is a valid MJML binary/)
156
+ assert(err.message.start_with?("MJML.mjml_binary is set to 'set by mjml_binary' " \
157
+ 'but MJML-Rails could not validate that it is a valid MJML binary'))
153
158
  end
154
159
  end
155
160
  end
data/test/parser_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  describe Mjml::Parser do
@@ -57,7 +59,7 @@ describe Mjml::Parser do
57
59
  describe '#run' do
58
60
  describe 'when shell command failed' do
59
61
  it 'raises exception' do
60
- err = expect { parser.run "/tmp/non_existent_file.mjml" }.must_raise(Mjml::Parser::ParseError)
62
+ err = expect { parser.run '/tmp/non_existent_file.mjml' }.must_raise(Mjml::Parser::ParseError)
61
63
  expect(err.message).must_include 'Command line error'
62
64
  end
63
65
  end
data/test/test_helper.rb CHANGED
@@ -1,21 +1,24 @@
1
- require "rubygems"
2
- require "bundler"
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
3
5
  Bundler.setup
4
6
 
5
- require "minitest/autorun"
6
- require "active_support/test_case"
7
+ require 'minitest/autorun'
8
+ require 'active_support/test_case'
7
9
 
8
- require "action_mailer"
9
- require "rails/railtie"
10
- require "rails/generators"
11
- require "rails/generators/test_case"
10
+ require 'action_mailer'
11
+ require 'rails/railtie'
12
+ require 'rails/generators'
13
+ require 'rails/generators/test_case'
12
14
  require 'mocha/minitest'
15
+ require 'byebug'
13
16
 
14
17
  # require "minitest/reporters"
15
18
  # Minitest::Reporters.use!
16
19
 
17
- $:.unshift File.expand_path("../../lib", __FILE__)
18
- require "mjml"
20
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
21
+ require 'mjml'
19
22
  Mjml::Railtie.run_initializers
20
23
 
21
24
  ActiveSupport::TestCase.test_order = :sorted if ActiveSupport::TestCase.respond_to? :test_order=
@@ -27,18 +30,16 @@ ActionMailer::Base.delivery_method = :test
27
30
  ActionMailer::Base.perform_deliveries = true
28
31
 
29
32
  def with_settings(settings)
30
- original_settings =
31
- settings.each_with_object({}) do |(key, _), agg|
32
- agg[key] = Mjml.public_send(key)
33
- end
34
-
35
- settings.each do |key, value|
36
- Mjml.public_send("#{key}=", value)
37
- end
38
-
33
+ original_settings = settings.each_with_object({}) { |(key, _), agg| agg[key] = Mjml.public_send(key) }
34
+ settings.each { |key, value| Mjml.public_send("#{key}=", value) }
39
35
  yield
40
36
  ensure
41
- original_settings.each do |key, value|
42
- Mjml.public_send("#{key}=", value)
43
- end
37
+ original_settings.each { |key, value| Mjml.public_send("#{key}=", value) }
44
38
  end
39
+
40
+ # Suppress all ruby warnings of the mail gem, see:
41
+ # * https://github.com/mikel/mail/issues/1424
42
+ # * https://github.com/mikel/mail/issues/1384
43
+ # * https://github.com/mikel/mail/pull/1162
44
+ require 'warning'
45
+ Warning.ignore(//, %r{.*gems/mail.*/lib/mail/})
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mjml-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.1
4
+ version: 4.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Loffler
@@ -11,32 +11,130 @@ bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIEKDCCApCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBR5b3Vy
15
- L0RDPWVtYWlsL0RDPWNvbTAeFw0yMDExMjIwNTA5MjJaFw0yMTExMjIwNTA5MjJa
16
- MB8xHTAbBgNVBAMMFHlvdXIvREM9ZW1haWwvREM9Y29tMIIBojANBgkqhkiG9w0B
17
- AQEFAAOCAY8AMIIBigKCAYEAmYphpc2KJNqmKAAKTE53F59mnVv2aW8r5NFDZqG0
18
- DF6V8N5rdWanaMLlo1HyU9r7D1f/h7O/LnjZemvgH6MROd19Qe64GIdIPRXC/ZxM
19
- cTBNC7GMoZf9LomBmg8sXnoL0Z2enUP6BV716I00EecxrEb8drtvZlRwjUgRcZrv
20
- iEaanYYp1Sw3+koyOsof/xYb3Pn2TAh9UE58lbVDpf88zc74ij3Vs3+LW/k+jZzh
21
- pzo7qq47XeVNGWtVDGm3dk8QLrIyQdk28B2ZRJ+HeuLEgx7ASDYFVZc05QlAjehS
22
- 4k37CIgF0ODDnscoSNNb6toFzaiD/kU9+ManRj871qOAMDlcX6cM4Wl08xfXZsxh
23
- VgmIv7vFoSkBDw6t3xrHGD1HiYYQl2tFQsS9D/X9I+1ArChtUTSxEyN6VGP1YVd6
24
- jsf4A/eMNRO6+udEQjYHontemi1xFeeyb6PDbP14oLMOls73fKvGZ3eW5uO3qCOb
25
- tKhPFou/w1GgU3vR3O26Q3EZAgMBAAGjbzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQD
26
- AgSwMB0GA1UdDgQWBBTx6I3ZLm1G7VCtTJWWSKR2qv6x7TAZBgNVHREEEjAQgQ55
27
- b3VyQGVtYWlsLmNvbTAZBgNVHRIEEjAQgQ55b3VyQGVtYWlsLmNvbTANBgkqhkiG
28
- 9w0BAQsFAAOCAYEAKCpNu5+MmYNrb+oOws9m8mghO4KDO53EQsfHtRcpsBxzwzV3
29
- MLO4el5fMiAiv2PrULEWVyEoe3k65bEiSEQP7m7w02B02OGugXNzwbetG56gogFy
30
- aJ4VJ95aiPEwDmGORLg7RmZcL/07ikDfb96ebPn3v2REYN2lWrqu4fT1MdTmA+hZ
31
- vhfqJeSuWM5wNsWxA66SgbQe8BMHcsqV1CTG+Ir8FIAHzfa+c7CNke/28htRKYJV
32
- 6+lk55Ueov5TjjgLTUvjdqbAEtyCZpgxe2e0o3xqKh5d5YjWVQ4mSNvBsqK7UXOx
33
- MGsePVBV9lnSFEJkGB3iOvavQSVUvqybF+yk6DrJR9iZtKCvAqd96PjkcFoM19dG
34
- 5ofv88TRZwXM9lWn4UKuekSSF1ElH3UBVDbH4zEHaOzrOvgfnZw3VteDigwfmmwF
35
- lsAqKbu4nrHhtGhkwdYbflf2URJTUxXGptrnPYV7okmEg4rsykK3RAsZ6kMNdKmx
36
- DcQ7RSt1TU5eck6c
14
+ MIIEPDCCAqSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAkMSIwIAYDVQQDDBlzaWdo
15
+ bW9uL0RDPXNpZ2htb24vREM9Y29tMB4XDTIxMTIxODA1MDcyM1oXDTIyMTIxODA1
16
+ MDcyM1owJDEiMCAGA1UEAwwZc2lnaG1vbi9EQz1zaWdobW9uL0RDPWNvbTCCAaIw
17
+ DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALvTbM9xGlGQ9pByLEAJjAqc6U76
18
+ 64uCOSIkgIFbC4iQdU5vzB/w4Y+mjgkH4oMsuW2NQfFBV+xI3jxQA0dN4qMgHooB
19
+ AWT/CSk0AAqTY1qCfCSASHLUWb5ZxURvsHmlXX/HCLX9bPcaYB0nQ+VT/u0lCicZ
20
+ beXMczHsNAj8f3ZJWDR9mw5OYc6cdGHM7Se3sqrmEsMYL9s8d08tChDcllxKV7cE
21
+ r2zb0oPrRFoYpakOIz1ViCl4KqBpQsDqXbwEw1kDCkKMXGHCsmDKML55kXsVVu4Q
22
+ 9vqGvtEuvseWsDpKb6Psy4nJoktswhotUf21dNVM9k8ufXNaWvZed+cYnBFPLdQV
23
+ daaEqh6hIC/yUP98D5u+xmTYLRQQEsjhkbdfoLmB8UOwrsEZu79TXN6Iq4MZqmBe
24
+ qkCTlXOMaO/EbWVRRvs64iibC/boVVlXu6RZCVNyzXEvYxg/zyl0zjS8KPR8Vf4f
25
+ RKOUVKJCcL/nW4VZ1mvmJtiXI3eARaJdrBEjjQIDAQABo3kwdzAJBgNVHRMEAjAA
26
+ MAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUC9Ln2Rotb61VZFq2rxBPP7sJIiUwHgYD
27
+ VR0RBBcwFYETc2lnaG1vbkBzaWdobW9uLmNvbTAeBgNVHRIEFzAVgRNzaWdobW9u
28
+ QHNpZ2htb24uY29tMA0GCSqGSIb3DQEBCwUAA4IBgQBN7i1ChHKDNa5ceCXUXdJ/
29
+ ZQnVQTx2KMvWwZ6qpkIWFbzwwL5w/xQdhQbLMjuaie5X1ZYOB9753ipw3tvl7iJz
30
+ vHEdTcOWAzMzHytySVcSa2DhanDopC+hrO5N+GoQ+5X9CN+xKG1Png4ho4FsuUtI
31
+ fESG8Kb48iNlpLGbfcM8Nqm/mYk/Xwqh3aSVb2E1NVUNr3QW84xB/xmzy2d9qNBm
32
+ 0GecfnBmH+ARmR9Qk9H7YjtnhQv1W2wOBiz1k6GeO8wMLKRRHVI2TGcPR8AqhQGd
33
+ ejWL8tjMzIw5ggxro3WDklV1hn0iFSeWXNWd9tN40PjLYZqZ3krQ2wWgcgw/9eC9
34
+ yVr+12iQ7XbbPqlveO/FhP4gLa8e2q1TgWjYAXIaM61em83Dlm/3p75ch0YCB3X5
35
+ R9NsaxhBfawJEJcYoPZflGkLjJU8pjSuvIW5+rNgAiqY8D37hTtZMu/n2Fz8Qp24
36
+ 7EZetZmcvBzARf8vQSJjga3y0Bftk8u7LmblOEWddzE=
37
37
  -----END CERTIFICATE-----
38
- date: 2020-12-19 00:00:00.000000000 Z
39
- dependencies: []
38
+ date: 2021-12-18 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: byebug
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: mocha
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '='
59
+ - !ruby/object:Gem::Version
60
+ version: 1.4.0
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '='
66
+ - !ruby/object:Gem::Version
67
+ version: 1.4.0
68
+ - !ruby/object:Gem::Dependency
69
+ name: rails
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rubocop
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 1.23.0
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 1.23.0
96
+ - !ruby/object:Gem::Dependency
97
+ name: rubocop-performance
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 1.12.0
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 1.12.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: rubocop-rails
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 2.12.4
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 2.12.4
124
+ - !ruby/object:Gem::Dependency
125
+ name: warning
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '='
129
+ - !ruby/object:Gem::Version
130
+ version: 1.2.1
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - '='
136
+ - !ruby/object:Gem::Version
137
+ version: 1.2.1
40
138
  description: Render MJML + ERb template views in Rails
41
139
  email: sighmon@sighmon.com
42
140
  executables: []
@@ -70,14 +168,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
168
  requirements:
71
169
  - - ">="
72
170
  - !ruby/object:Gem::Version
73
- version: '0'
171
+ version: '2.5'
74
172
  required_rubygems_version: !ruby/object:Gem::Requirement
75
173
  requirements:
76
174
  - - ">="
77
175
  - !ruby/object:Gem::Version
78
176
  version: '0'
79
177
  requirements: []
80
- rubygems_version: 3.1.4
178
+ rubygems_version: 3.1.6
81
179
  signing_key:
82
180
  specification_version: 4
83
181
  summary: MJML + ERb templates
metadata.gz.sig CHANGED
Binary file