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 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: