mjml-rails 4.4.0 → 4.4.1

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: 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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
- GPdoYotiH3R5BLvhfPQGI5yz4Dr3W8g5Z3vgtbL+4NS3XCGs3DjdmkLNBIjYJQC9
20
- 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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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
- VR0RBBcwFYETc2lnaG1vbkBzaWdobW9uLmNvbTAeBgNVHRIEFzAVgRNzaWdobW9u
28
- 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
- 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
- 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
- alxsWGeFcutKGWWkcbmZne4wB0usxzukKOwLzTcg48xG4tk5e/uV6ujlPdDx48+f
32
- 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
- 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
- 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
- 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
- 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
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