mjml-ruby 0.1.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 +7 -0
- data/lib/mjml.rb +31 -0
- data/lib/mjml/parser.rb +51 -0
- data/lib/mjml/railtie.rb +36 -0
- data/lib/mjml/version.rb +3 -0
- data/lib/sprockets/mjml.rb +26 -0
- data/lib/tilt/mjml.rb +17 -0
- metadata +159 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f3beb394b5441baaea8d96efc76277d50a9f8e50
|
4
|
+
data.tar.gz: 26fc01fc8de842878c07b6882403694a50ea117f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ea8764f01d936b75c59e83ae092018aba6162459871c21fde0d68ee39d257e5790a97d6c2a084875280f58ff293446d1d4be5783fd5b535a5db22b78554ccb29
|
7
|
+
data.tar.gz: 43df378564423c3e962354d7b32784e64a7bf1a3b6f90cd7c76309e2efb2d776a0cc439ccfc5a8fdb894754dbe5658cf496bed5ae548b1592c9d20592e0e3aa1
|
data/lib/mjml.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'dry-configurable'
|
2
|
+
|
3
|
+
# MJML library for ruby
|
4
|
+
module MJML
|
5
|
+
# Constants
|
6
|
+
MIME_TYPE = 'text/mjml'.freeze
|
7
|
+
EXTENSION = '.mjml'.freeze
|
8
|
+
|
9
|
+
extend Dry::Configurable
|
10
|
+
# Available settings
|
11
|
+
setting :bin_path
|
12
|
+
|
13
|
+
def self.setup!
|
14
|
+
# Init config
|
15
|
+
configure do |config|
|
16
|
+
config.bin_path = find_executable
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find_executable
|
21
|
+
local_path = File.expand_path('node_modules/.bin/mjml', Dir.pwd)
|
22
|
+
return local_path if File.file?(local_path)
|
23
|
+
`/usr/bin/which mjml`.strip
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
MJML.setup!
|
28
|
+
|
29
|
+
require 'tilt/mjml' if defined?(Tilt)
|
30
|
+
require 'sprockets/mjml' if defined?(Sprockets)
|
31
|
+
require 'mjml/railtie' if defined?(Rails)
|
data/lib/mjml/parser.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
module MJML
|
4
|
+
# Parser for MJML templates
|
5
|
+
class Parser
|
6
|
+
class InvalidTemplate < StandardError; end
|
7
|
+
class ExecutableNotFound < StandardError; end
|
8
|
+
|
9
|
+
ROOT_TAGS_REGEX = %r{<mjml>.*<\/mjml>}im
|
10
|
+
VERSION_REGEX = /^\d\.\d\.\d/i
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
raise ExecutableNotFound if mjml_version.nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(template)
|
17
|
+
exec!(template)
|
18
|
+
rescue InvalidTemplate
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def call!(template)
|
23
|
+
exec!(template)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def exec!(template)
|
29
|
+
raise InvalidTemplate if template.empty?
|
30
|
+
return template if partial?(template)
|
31
|
+
|
32
|
+
out, err, _status = Open3.capture3("#{mjml_bin} -is <<< '#{template}'")
|
33
|
+
|
34
|
+
raise InvalidTemplate unless err.empty?
|
35
|
+
out
|
36
|
+
end
|
37
|
+
|
38
|
+
def partial?(template)
|
39
|
+
(template =~ ROOT_TAGS_REGEX).nil?
|
40
|
+
end
|
41
|
+
|
42
|
+
def mjml_bin
|
43
|
+
MJML.config.bin_path
|
44
|
+
end
|
45
|
+
|
46
|
+
def mjml_version
|
47
|
+
ver, _status = Open3.capture2(mjml_bin, '-V')
|
48
|
+
(ver =~ VERSION_REGEX).nil? ? nil : ver
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/mjml/railtie.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rails/railtie'
|
2
|
+
require 'mjml'
|
3
|
+
require 'mjml/parser'
|
4
|
+
|
5
|
+
module MJML
|
6
|
+
# Rails plugin for MJML ruby
|
7
|
+
class Railtie < ::Rails::Railtie
|
8
|
+
# Template handler for Rails
|
9
|
+
class Handler
|
10
|
+
def call(template)
|
11
|
+
compiled = erb_handler.call(template)
|
12
|
+
"::MJML::Parser.new.call(begin;#{compiled};end).html_safe"
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def erb_handler
|
18
|
+
@erb_handler ||= ActionView::Template.registered_template_handler(:erb)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Config
|
23
|
+
config.mjml = MJML.config
|
24
|
+
|
25
|
+
# Initializers
|
26
|
+
initializer 'mjml.register_extension' do
|
27
|
+
unless Mime::Type.lookup ::MJML::MIME_TYPE
|
28
|
+
Mime::Type.register ::MJML::MIME_TYPE, :mjml
|
29
|
+
end
|
30
|
+
|
31
|
+
ActiveSupport.on_load(:action_view) do
|
32
|
+
ActionView::Template.register_template_handler(:mjml, Handler.new)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/mjml/version.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'sprockets'
|
2
|
+
require 'mjml'
|
3
|
+
|
4
|
+
# Sprockets
|
5
|
+
module Sprockets
|
6
|
+
# MJML interface for Sprockets
|
7
|
+
class MJML
|
8
|
+
def self.call(input)
|
9
|
+
input.merge(data: ::MJML::Parser.new.call(input[:data]))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
if respond_to?(:register_transformer)
|
14
|
+
register_mime_type ::MJML::MIME_TYPE, extensions: [::MJML::EXTENSION],
|
15
|
+
charset: :unicode
|
16
|
+
register_transformer ::MJML::MIME_TYPE, 'text/html', MJML
|
17
|
+
end
|
18
|
+
|
19
|
+
if respond_to?(:register_engine)
|
20
|
+
args = [::MJML::EXTENSION, MJML]
|
21
|
+
if Sprockets::VERSION.start_with?('3')
|
22
|
+
args << { mime_type: ::MJML::MIME_TYPE, silence_deprecation: true }
|
23
|
+
end
|
24
|
+
register_engine(*args)
|
25
|
+
end
|
26
|
+
end
|
data/lib/tilt/mjml.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'tilt/template'
|
2
|
+
require 'mjml/parser'
|
3
|
+
|
4
|
+
# Tilt namespace
|
5
|
+
module Tilt
|
6
|
+
# MJML template for Tilt
|
7
|
+
class MJML < Template
|
8
|
+
def prepare
|
9
|
+
end
|
10
|
+
|
11
|
+
def evaluate(scope, locals, &block)
|
12
|
+
@output ||= ::MJML::Parser.new.call(data)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
register MJML, 'mjml' if respond_to?(:register)
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mjml-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mykola Basov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dry-configurable
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.7
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.7
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 5.9.0
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 5.0.0
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 5.9.0
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 5.0.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: tilt
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 2.0.0
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 2.0.0
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.0.0
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 2.0.0
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: sprockets
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 3.7.0
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 3.0.0
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 3.7.0
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 3.0.0
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: byebug
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: 9.0.0
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 9.0.0
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 9.0.0
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 9.0.0
|
121
|
+
description:
|
122
|
+
email:
|
123
|
+
- kolybasov@gmail.com
|
124
|
+
executables: []
|
125
|
+
extensions: []
|
126
|
+
extra_rdoc_files: []
|
127
|
+
files:
|
128
|
+
- lib/mjml.rb
|
129
|
+
- lib/mjml/parser.rb
|
130
|
+
- lib/mjml/railtie.rb
|
131
|
+
- lib/mjml/version.rb
|
132
|
+
- lib/sprockets/mjml.rb
|
133
|
+
- lib/tilt/mjml.rb
|
134
|
+
homepage: https://github.com/kolybasov/mjml-ruby
|
135
|
+
licenses:
|
136
|
+
- MIT
|
137
|
+
metadata: {}
|
138
|
+
post_install_message: Don't forget to run $ npm install -g mjml@^2.0
|
139
|
+
rdoc_options: []
|
140
|
+
require_paths:
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
requirements: []
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 2.5.1
|
155
|
+
signing_key:
|
156
|
+
specification_version: 4
|
157
|
+
summary: MJML parser and template engine for Ruby
|
158
|
+
test_files: []
|
159
|
+
has_rdoc:
|