mjml-ruby 0.3.3 → 0.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 +4 -4
- data/lib/mjml.rb +24 -21
- data/lib/mjml/parser.rb +11 -13
- data/lib/mjml/rails/template_handler.rb +2 -2
- data/lib/mjml/railtie.rb +3 -1
- data/lib/mjml/version.rb +1 -1
- metadata +58 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdd00c3aaf67c0ea113af29c2c006303f093e73e7ccd71c6ba5d7350dd118c86
|
4
|
+
data.tar.gz: 247f6acb9629a449a070f6c36dfb53ca02a62af0f888e635f45599ce8865a5ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c92212ba3864acb3eba46ff920217a45ad2aa3ea218e3b07c44df2b6cffa0acc1d950419415e67e1f17306911c0eafc666507c12cf13a4b0925968b9ddddaa1
|
7
|
+
data.tar.gz: 91cec12b92e26a73e2b136d44e1c2212bc3ff2c3fa05f2bfa05eeaf7ff891aeeac8464af8ec75a7ca516110db8d77558f6621665f8aef854f6c8dce6b2df287e
|
data/lib/mjml.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'dry-configurable'
|
2
1
|
require 'mjml/logger'
|
3
2
|
require 'mjml/feature'
|
4
3
|
require 'mjml/parser'
|
@@ -10,32 +9,35 @@ module MJML
|
|
10
9
|
# Constants
|
11
10
|
MIME_TYPE = 'text/mjml'.freeze
|
12
11
|
EXTENSION = '.mjml'.freeze
|
13
|
-
VERSION_3_REGEX = /^(\d
|
14
|
-
VERSION_4_REGEX = /^mjml-cli: (\d
|
12
|
+
VERSION_3_REGEX = /^(\d+\.\d+\.\d+)/i
|
13
|
+
VERSION_4_REGEX = /^mjml-cli: (\d+\.\d+\.\d+)/i
|
15
14
|
|
16
|
-
extend Dry::Configurable
|
17
15
|
# Available settings
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
module Config
|
17
|
+
class << self
|
18
|
+
attr_accessor(
|
19
|
+
:bin_path,
|
20
|
+
:debug,
|
21
|
+
:logger,
|
22
|
+
:minify_output,
|
23
|
+
:validation_level
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
23
27
|
|
24
28
|
def self.setup!
|
25
29
|
# Init config
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
config.validation_level = :skip
|
32
|
-
end
|
30
|
+
Config.bin_path = find_executable
|
31
|
+
Config.debug = nil
|
32
|
+
Config.logger = Logger.setup!(STDOUT)
|
33
|
+
Config.minify_output = false
|
34
|
+
Config.validation_level = :skip
|
33
35
|
end
|
34
36
|
|
35
37
|
def self.find_executable
|
36
38
|
local_path = File.expand_path('node_modules/.bin/mjml', Dir.pwd)
|
37
39
|
return local_path if File.file?(local_path)
|
38
|
-
`/usr/bin/env
|
40
|
+
`/usr/bin/env which mjml`.strip
|
39
41
|
end
|
40
42
|
|
41
43
|
def self.executable_version
|
@@ -43,7 +45,7 @@ module MJML
|
|
43
45
|
end
|
44
46
|
|
45
47
|
def self.extract_executable_version
|
46
|
-
ver, _status = Open3.capture2(
|
48
|
+
ver, _status = Open3.capture2(Config.bin_path, '--version')
|
47
49
|
|
48
50
|
# mjml 3.x outputs version directly:
|
49
51
|
# 3.3.5
|
@@ -65,15 +67,16 @@ module MJML
|
|
65
67
|
|
66
68
|
match.nil? ? nil : match[1]
|
67
69
|
rescue Errno::ENOENT => _e
|
68
|
-
raise BinaryNotFound, "mjml binary not found for path '#{
|
70
|
+
raise BinaryNotFound, "mjml binary not found for path '#{Config.bin_path}'"
|
69
71
|
end
|
70
72
|
|
71
73
|
def self.logger
|
72
|
-
|
74
|
+
Config.logger
|
73
75
|
end
|
74
76
|
end
|
75
77
|
|
76
|
-
|
78
|
+
# Let Rails take care of the initialization...
|
79
|
+
MJML.setup! unless defined?(Rails)
|
77
80
|
|
78
81
|
require 'tilt/mjml' if defined?(Tilt)
|
79
82
|
require 'sprockets/mjml' if defined?(Sprockets)
|
data/lib/mjml/parser.rb
CHANGED
@@ -6,17 +6,14 @@ module MJML
|
|
6
6
|
class InvalidTemplate < StandardError; end
|
7
7
|
class ExecutableNotFound < StandardError; end
|
8
8
|
|
9
|
-
ROOT_TAGS_REGEX = %r{<mjml
|
9
|
+
ROOT_TAGS_REGEX = %r{<mjml.*>.*<\/mjml>}im
|
10
10
|
|
11
11
|
def initialize
|
12
|
-
MJML.logger.debug("Path: #{mjml_bin};" \
|
13
|
-
"Version: #{MJML.executable_version}")
|
14
12
|
raise ExecutableNotFound if MJML.executable_version.nil?
|
15
13
|
end
|
16
14
|
|
17
15
|
def call(template)
|
18
|
-
|
19
|
-
exec!
|
16
|
+
call!(template)
|
20
17
|
rescue InvalidTemplate
|
21
18
|
nil
|
22
19
|
end
|
@@ -29,20 +26,21 @@ module MJML
|
|
29
26
|
private
|
30
27
|
|
31
28
|
def exec!
|
32
|
-
MJML.logger.debug("Template:\n #{@template}")
|
33
29
|
raise InvalidTemplate if @template.empty?
|
34
30
|
|
35
|
-
MJML.logger.debug("Partial: #{partial?}")
|
36
31
|
return @template if partial?
|
37
32
|
|
38
33
|
out, err = should_get_outpout_from_file? ? output_from_file : output_from_memory
|
39
34
|
parsed = parse_output(out)
|
40
35
|
|
41
|
-
MJML.logger.debug("Output:\n #{parsed[:output]}")
|
42
36
|
MJML.logger.error(err) unless err.empty?
|
43
37
|
MJML.logger.warn(parsed[:warnings]) unless parsed[:warnings].empty?
|
44
38
|
|
45
|
-
|
39
|
+
unless err.empty?
|
40
|
+
message = [err, parsed[:warnings]].reject(&:empty?).join("\n")
|
41
|
+
raise InvalidTemplate.new(message)
|
42
|
+
end
|
43
|
+
|
46
44
|
parsed[:output]
|
47
45
|
end
|
48
46
|
|
@@ -51,7 +49,7 @@ module MJML
|
|
51
49
|
end
|
52
50
|
|
53
51
|
def mjml_bin
|
54
|
-
MJML.
|
52
|
+
MJML::Config.bin_path
|
55
53
|
end
|
56
54
|
|
57
55
|
def cmd(file_path = nil)
|
@@ -67,11 +65,11 @@ module MJML
|
|
67
65
|
end
|
68
66
|
|
69
67
|
def minify_output
|
70
|
-
'--min' if MJML.
|
68
|
+
'--min' if MJML::Config.minify_output
|
71
69
|
end
|
72
70
|
|
73
71
|
def validation_level
|
74
|
-
"--level=#{MJML.
|
72
|
+
"--level=#{MJML::Config.validation_level}" if MJML::Feature.available?(:validation_level)
|
75
73
|
end
|
76
74
|
|
77
75
|
def output_from_file
|
@@ -103,7 +101,7 @@ module MJML
|
|
103
101
|
end
|
104
102
|
end
|
105
103
|
|
106
|
-
{ warnings: warnings.join, output: output.join }
|
104
|
+
{ warnings: warnings.join("\n"), output: output.join }
|
107
105
|
end
|
108
106
|
end
|
109
107
|
end
|
@@ -9,8 +9,8 @@ module MJML
|
|
9
9
|
@base_handler = base_handler
|
10
10
|
end
|
11
11
|
|
12
|
-
def call(template)
|
13
|
-
compiled = get_handler(@base_handler).call(template)
|
12
|
+
def call(template, source=nil)
|
13
|
+
compiled = get_handler(@base_handler).call(template, source)
|
14
14
|
"::MJML::Parser.new.call!(begin;#{compiled};end).html_safe"
|
15
15
|
end
|
16
16
|
|
data/lib/mjml/railtie.rb
CHANGED
@@ -7,10 +7,12 @@ module MJML
|
|
7
7
|
# Rails plugin for MJML ruby
|
8
8
|
class Railtie < ::Rails::Railtie
|
9
9
|
# Config
|
10
|
-
config.mjml = MJML
|
10
|
+
config.mjml = MJML::Config
|
11
11
|
|
12
12
|
# Initializers
|
13
13
|
initializer 'mjml.register_extension' do
|
14
|
+
MJML.setup!
|
15
|
+
|
14
16
|
unless Mime::Type.lookup ::MJML::MIME_TYPE
|
15
17
|
Mime::Type.register ::MJML::MIME_TYPE, :mjml
|
16
18
|
end
|
data/lib/mjml/version.rb
CHANGED
metadata
CHANGED
@@ -1,37 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mjml-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mykola Basov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
20
24
|
- - ">="
|
21
25
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0
|
23
|
-
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: railties
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '6'
|
34
|
+
type: :development
|
24
35
|
prerelease: false
|
25
36
|
version_requirements: !ruby/object:Gem::Requirement
|
26
37
|
requirements:
|
27
38
|
- - "~>"
|
28
39
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
30
|
-
|
40
|
+
version: '6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: actionmailer
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
31
53
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
54
|
+
version: '6'
|
33
55
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
56
|
+
name: tzinfo-data
|
35
57
|
requirement: !ruby/object:Gem::Requirement
|
36
58
|
requirements:
|
37
59
|
- - ">="
|
@@ -48,83 +70,83 @@ dependencies:
|
|
48
70
|
name: minitest
|
49
71
|
requirement: !ruby/object:Gem::Requirement
|
50
72
|
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '5.0'
|
54
73
|
- - "~>"
|
55
74
|
- !ruby/object:Gem::Version
|
56
75
|
version: '5.9'
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '5.0'
|
57
79
|
type: :development
|
58
80
|
prerelease: false
|
59
81
|
version_requirements: !ruby/object:Gem::Requirement
|
60
82
|
requirements:
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '5.0'
|
64
83
|
- - "~>"
|
65
84
|
- !ruby/object:Gem::Version
|
66
85
|
version: '5.9'
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '5.0'
|
67
89
|
- !ruby/object:Gem::Dependency
|
68
90
|
name: tilt
|
69
91
|
requirement: !ruby/object:Gem::Requirement
|
70
92
|
requirements:
|
71
|
-
- - "
|
93
|
+
- - "~>"
|
72
94
|
- !ruby/object:Gem::Version
|
73
95
|
version: '2.0'
|
74
|
-
- - "
|
96
|
+
- - ">="
|
75
97
|
- !ruby/object:Gem::Version
|
76
98
|
version: '2.0'
|
77
99
|
type: :development
|
78
100
|
prerelease: false
|
79
101
|
version_requirements: !ruby/object:Gem::Requirement
|
80
102
|
requirements:
|
81
|
-
- - "
|
103
|
+
- - "~>"
|
82
104
|
- !ruby/object:Gem::Version
|
83
105
|
version: '2.0'
|
84
|
-
- - "
|
106
|
+
- - ">="
|
85
107
|
- !ruby/object:Gem::Version
|
86
108
|
version: '2.0'
|
87
109
|
- !ruby/object:Gem::Dependency
|
88
110
|
name: sprockets
|
89
111
|
requirement: !ruby/object:Gem::Requirement
|
90
112
|
requirements:
|
91
|
-
- - ">="
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '3.0'
|
94
113
|
- - "~>"
|
95
114
|
- !ruby/object:Gem::Version
|
96
115
|
version: '3.7'
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '3.0'
|
97
119
|
type: :development
|
98
120
|
prerelease: false
|
99
121
|
version_requirements: !ruby/object:Gem::Requirement
|
100
122
|
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '3.0'
|
104
123
|
- - "~>"
|
105
124
|
- !ruby/object:Gem::Version
|
106
125
|
version: '3.7'
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '3.0'
|
107
129
|
- !ruby/object:Gem::Dependency
|
108
130
|
name: byebug
|
109
131
|
requirement: !ruby/object:Gem::Requirement
|
110
132
|
requirements:
|
111
|
-
- - "
|
133
|
+
- - "~>"
|
112
134
|
- !ruby/object:Gem::Version
|
113
135
|
version: '9.0'
|
114
|
-
- - "
|
136
|
+
- - ">="
|
115
137
|
- !ruby/object:Gem::Version
|
116
138
|
version: '9.0'
|
117
139
|
type: :development
|
118
140
|
prerelease: false
|
119
141
|
version_requirements: !ruby/object:Gem::Requirement
|
120
142
|
requirements:
|
121
|
-
- - "
|
143
|
+
- - "~>"
|
122
144
|
- !ruby/object:Gem::Version
|
123
145
|
version: '9.0'
|
124
|
-
- - "
|
146
|
+
- - ">="
|
125
147
|
- !ruby/object:Gem::Version
|
126
148
|
version: '9.0'
|
127
|
-
description:
|
149
|
+
description:
|
128
150
|
email:
|
129
151
|
- kolybasov@gmail.com
|
130
152
|
executables: []
|
@@ -144,7 +166,7 @@ homepage: https://github.com/kolybasov/mjml-ruby
|
|
144
166
|
licenses:
|
145
167
|
- MIT
|
146
168
|
metadata: {}
|
147
|
-
post_install_message:
|
169
|
+
post_install_message:
|
148
170
|
rdoc_options: []
|
149
171
|
require_paths:
|
150
172
|
- lib
|
@@ -159,8 +181,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
181
|
- !ruby/object:Gem::Version
|
160
182
|
version: '0'
|
161
183
|
requirements: []
|
162
|
-
rubygems_version: 3.
|
163
|
-
signing_key:
|
184
|
+
rubygems_version: 3.2.15
|
185
|
+
signing_key:
|
164
186
|
specification_version: 4
|
165
187
|
summary: MJML parser and template engine for Ruby
|
166
188
|
test_files: []
|