mjml-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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)
@@ -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
@@ -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
@@ -0,0 +1,3 @@
1
+ module MJML
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -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: