mjml-rails 4.4.0 → 4.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88e3f9ecbcbb4ddc89a64ae73dc35f62df462edc2e52a80ffcce8b76b17e7324
4
- data.tar.gz: 44f3771373b38d7ba49ebee9ae6e503a4f094f2c7ab96bb0be88e6b3326ee38d
3
+ metadata.gz: c6b32baf83ab79233e1ad36b23d7e4656f56b18e1c43f8e3c9c3ad6ac2670699
4
+ data.tar.gz: fba92c52f14fa3123b19e812a29c641ddbbe70be5976767ee34c602f6beaac90
5
5
  SHA512:
6
- metadata.gz: 60001f52fd6d52b7ed1babb9e1387e6488b7f05624ddc5565f411caf87c4455c1c92d47466216b84f7aec540ad3e19343c178c9c64f82f8751447f52500e2dce
7
- data.tar.gz: 43df7639a83deb7ffa0fb2e13ce28c5d2e6faa357fb18d7415a1b3a7ea022d25875365653b989783de72d4f4b7a4453cf0bc340e36d4a9f69769807c93e8815e
6
+ metadata.gz: 8f2157b8498a9dcd3a4ae6d25b7e8caa77b17dc41e89aa69c0824efbaba675272a33df3a082d1db89d2d40da672a4587c040250ed135b481162904e9a3be3c59
7
+ data.tar.gz: 996fb2afbabfb97a04d4c28a6d1c5acc1c29e728d2c3f03f48c2b04a4f8ebdbe5e0dc7101583b7eb2f43356844f319078da80d0f991945617888c3365678eb43
Binary file
data.tar.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -66,13 +66,19 @@ Run the following command to install it:
66
66
  bundle install
67
67
  ```
68
68
 
69
- Install the MJML parser (optional -g to install it globally):
69
+ Add the MJML parser to your project with your favourite package manager:
70
70
 
71
71
  ```console
72
- npm install -g mjml
72
+ # with npm
73
+ npm install mjml
74
+
75
+ # with yarn
76
+ yarn add mjml
73
77
  ```
74
78
 
75
- Note that you'll need at least Node.js version 6 for MJML to function properly.
79
+ MJML-Rails falls back to a global installation of MJML but it is strongly recommended to add MJML directly to your project.
80
+
81
+ You'll need at least Node.js version 6 for MJML to function properly.
76
82
 
77
83
  If you're using ```:haml``` or any other Rails template language, create an initializer to set it up:
78
84
 
@@ -18,33 +18,47 @@ module Mjml
18
18
  @@validation_level = "soft"
19
19
 
20
20
  def self.check_version(bin)
21
- IO.popen([bin, '--version']) { |io| io.read.include?("mjml-core: #{Mjml.mjml_binary_version_supported}") }
22
- rescue
21
+ stdout, _, status = run_mjml('--version', mjml_bin: bin)
22
+ status.success? && stdout.include?("mjml-core: #{Mjml.mjml_binary_version_supported}")
23
+ rescue StandardError
23
24
  false
24
25
  end
25
26
 
27
+ def self.run_mjml(args, mjml_bin: nil)
28
+ mjml_bin ||= BIN
29
+
30
+ Open3.capture3("#{mjml_bin} #{args}")
31
+ end
32
+
26
33
  def self.discover_mjml_bin
27
- # Check for a global install of MJML binary
28
- mjml_bin = 'mjml'
29
- return mjml_bin if check_version(mjml_bin)
30
-
31
- # Check for a local install of MJML binary
32
- installer_path = bin_path_from('npm') || bin_path_from('yarn')
33
- unless installer_path
34
- puts Mjml.mjml_binary_error_string
35
- return nil
34
+ # Check for local install of MJML with yarn
35
+ yarn_bin = `which yarn`.chomp
36
+ if yarn_bin.present?
37
+ mjml_bin = "#{yarn_bin} run mjml"
38
+ return mjml_bin if check_version(mjml_bin)
36
39
  end
37
40
 
38
- mjml_bin = File.join(installer_path, 'mjml')
39
- return mjml_bin if check_version(mjml_bin)
41
+ # Check for a local install of MJML with npm
42
+ npm_bin = `which npm`.chomp
43
+ if npm_bin.present? && (installer_path = bin_path_from(npm_bin)).present?
44
+ mjml_bin = File.join(installer_path, 'mjml')
45
+ return mjml_bin if check_version(mjml_bin)
46
+ end
47
+
48
+ # Check for a global install of MJML
49
+ mjml_bin = `which mjml`.chomp
50
+ return mjml_bin if mjml_bin.present? && check_version(mjml_bin)
40
51
 
41
52
  puts Mjml.mjml_binary_error_string
42
53
  nil
43
54
  end
44
55
 
45
56
  def self.bin_path_from(package_manager)
46
- _, stdout, _, _ = Open3.popen3("#{package_manager} bin")
47
- stdout.read.chomp
57
+ stdout, _, status = Open3.capture3("#{package_manager} bin")
58
+
59
+ return unless status.success?
60
+
61
+ stdout.chomp
48
62
  rescue Errno::ENOENT # package manager is not installed
49
63
  nil
50
64
  end
@@ -35,9 +35,9 @@ module Mjml
35
35
  # @return [String] The result as string
36
36
  def run(in_tmp_file, beautify=true, minify=false, validation_level="soft")
37
37
  Tempfile.create(["out", ".html"]) do |out_tmp_file|
38
- command = "#{mjml_bin} -r #{in_tmp_file} -o #{out_tmp_file.path} --config.beautify #{beautify} --config.minify #{minify} --config.validationLevel #{validation_level}"
39
- _, _, stderr, _ = Open3.popen3(command)
40
- raise ParseError.new(stderr.read.chomp) unless stderr.eof?
38
+ command = "-r #{in_tmp_file} -o #{out_tmp_file.path} --config.beautify #{beautify} --config.minify #{minify} --config.validationLevel #{validation_level}"
39
+ _, stderr, status = Mjml.run_mjml(command)
40
+ raise ParseError.new(stderr.chomp) unless status.success?
41
41
  out_tmp_file.read
42
42
  end
43
43
  end
@@ -1,4 +1,4 @@
1
1
  module Mjml
2
2
  # Version number no longer matches MJML.io version
3
- VERSION = "4.4.0"
3
+ VERSION = "4.4.1"
4
4
  end
@@ -21,7 +21,8 @@ describe Mjml::Parser do
21
21
  end
22
22
 
23
23
  it 'raises exception' do
24
- -> { parser.render }.must_raise(custom_error_class, error.message)
24
+ err = expect { parser.render }.must_raise(custom_error_class)
25
+ expect(err.message).must_equal error.message
25
26
  end
26
27
  end
27
28
 
@@ -33,7 +34,7 @@ describe Mjml::Parser do
33
34
  end
34
35
 
35
36
  it 'returns empty string' do
36
- parser.render.must_equal ''
37
+ expect(parser.render).must_equal ''
37
38
  end
38
39
  end
39
40
  end
@@ -55,19 +56,21 @@ describe Mjml::Parser do
55
56
  expect(Mjml.beautify).must_equal(false)
56
57
  expect(Mjml.minify).must_equal(true)
57
58
  expect(Mjml.validation_level).must_equal('strict')
59
+
60
+ Mjml.setup do |config|
61
+ config.beautify = true
62
+ config.minify = false
63
+ config.validation_level = 'soft'
64
+ end
58
65
  end
59
66
  end
60
67
  end
61
68
 
62
69
  describe '#run' do
63
- describe 'when shell command is failed' do
64
- let(:error) { 'shell error' }
65
- let(:stderr) { mock('stderr', eof?: false, read: error) }
66
-
67
- before { Open3.stubs(popen3: [nil, nil, stderr, nil]) }
68
-
70
+ describe 'when shell command failed' do
69
71
  it 'raises exception' do
70
- -> { parser.run "/tmp/input_file.mjml" }.must_raise(Mjml::Parser::ParseError, error)
72
+ err = expect { parser.run "/tmp/non_existent_file.mjml" }.must_raise(Mjml::Parser::ParseError)
73
+ expect(err.message).must_include 'Command line error'
71
74
  end
72
75
  end
73
76
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mjml-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.0
4
+ version: 4.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Loffler
8
8
  - Steven Pickles
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- idzSNN/0YR5bKqsWu6Vc/Rn0X5nj4ZKKFNHcDHdQ0vmegW6W2IEfz4tluaj/Musd
25
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Z3vePI5/udzlcrq80eIHh5Ch5NVPG8B7O1qMSwJo4to=
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
37
37
  -----END CERTIFICATE-----
38
- date: 2020-04-04 00:00:00.000000000 Z
38
+ date: 2020-11-22 00:00:00.000000000 Z
39
39
  dependencies: []
40
40
  description: Render MJML + ERb template views in Rails
41
41
  email: sighmon@sighmon.com
@@ -78,8 +78,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
80
  requirements: []
81
- rubygems_version: 3.0.6
82
- signing_key:
81
+ rubygems_version: 3.1.4
82
+ signing_key:
83
83
  specification_version: 4
84
84
  summary: MJML + ERb templates
85
85
  test_files:
metadata.gz.sig CHANGED
Binary file