actionmailer-markdown 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 874c3169e4c82c8ca92ede8f58400d04266df87c
4
- data.tar.gz: 5b05edf6162e53a0df8219a37a147918a8b86c20
3
+ metadata.gz: 286269f0bc2b88e8598c2dfe0c3082b57664155d
4
+ data.tar.gz: 5ee1501c9776bf0027a19d4173712de98db8aa9f
5
5
  SHA512:
6
- metadata.gz: caa5bf5a3638f51410da282d057a7cc1ee19d94d7c54e083a34c7abe125c75cf3897771047f61e16c3082ce7754fc8fe189b906ab6470191bf6349fea80a16f0
7
- data.tar.gz: db8a7e8212ad66eb758bf36f36191c67a39507fb172d5bb93d84a453e9e53e9d05274c90d60511f5d507473d0508b9728e3119980cb1e5e5d7b5f89cce913c82
6
+ metadata.gz: 577bb5245e8c6111a0b9758ac09dd7254ca8c1c764910b5f62d931530958ca703ae6644ebf990631f84993ca5ca596ee073389a4fc7d584df0c6f6701904229e
7
+ data.tar.gz: 1091e0b11499b8b098aa36bc5b8d58ce5d55a737d065caa6f4e4023a8ecab38ea7fc3b89193eb01a5e28b381a99511cccd1cb7468a1f7b5541629d5d777b1c44
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ log
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ActionMailer::Markdown
2
2
 
3
- ![build status](https://travis-ci.org/fnando/actionmailer-markdown.svg)
3
+ [![build status](https://travis-ci.org/fnando/actionmailer-markdown.svg)](https://travis-ci.org/fnando/actionmailer-markdown)
4
4
 
5
5
  A different take on using ActionMailer, Markdown and I18n.
6
6
 
@@ -194,7 +194,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
194
194
 
195
195
  ## Contributing
196
196
 
197
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/actionmailer-markdown. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
197
+ Bug reports and pull requests are welcome on GitHub at https://github.com/fnando/actionmailer-markdown. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
198
198
 
199
199
 
200
200
  ## License
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_development_dependency 'bundler', '~> 1.10'
21
21
  spec.add_development_dependency 'rake', '~> 10.0'
22
+ spec.add_development_dependency 'rails'
22
23
  spec.add_development_dependency 'minitest'
23
24
  spec.add_development_dependency 'minitest-utils'
24
25
  spec.add_development_dependency 'pry-meta'
@@ -1,11 +1,18 @@
1
1
  module ActionMailer
2
2
  module Markdown
3
3
  require 'action_mailer'
4
+ require 'action_view'
4
5
  require 'redcarpet'
5
6
 
6
7
  require 'action_mailer/markdown/version'
8
+ require 'action_mailer/markdown/resolver'
7
9
  require 'action_mailer/markdown/ext'
8
10
  require 'action_mailer/markdown/renderer'
9
11
  require 'action_mailer/markdown/renderer/text'
12
+ require 'action_mailer/markdown/template_handler'
10
13
  end
11
14
  end
15
+
16
+ ActionMailer::Base.prepend_view_path(ActionMailer::Markdown::Resolver.new)
17
+ ActionView::Template.register_template_handler(:md, ActionMailer::Markdown::TemplateHandler::HTML)
18
+ ActionView::Template.register_template_handler(:mdt, ActionMailer::Markdown::TemplateHandler::Text)
@@ -3,24 +3,11 @@ ActionMailer::Base.class_eval do
3
3
 
4
4
  define_method(:mail) do |headers = {}, &block|
5
5
  options = variables_set_by_user
6
- message = get_translation_for('body', options)
7
6
  subject = get_translation_for('subject', options)
8
7
  headers[:subject] ||= subject
9
-
10
- if message
11
- block = proc do |format|
12
- format.text { render plain: ActionMailer::Markdown.text(message) }
13
- format.html { render html: ActionMailer::Markdown.html(message).html_safe }
14
- end
15
- end
16
-
17
8
  mail_method.bind(self).call(headers, &block)
18
9
  end
19
10
 
20
- def mailer_scope
21
- self.class.mailer_name.tr('/', '.')
22
- end
23
-
24
11
  def get_translation_for(key, options)
25
12
  I18n.t(key, options.merge(scope: [mailer_scope, action_name], raise: true))
26
13
  rescue I18n::MissingTranslationData
@@ -34,4 +21,8 @@ ActionMailer::Base.class_eval do
34
21
  buffer[name.to_sym] = instance_variable_get("@#{name}")
35
22
  end
36
23
  end
24
+
25
+ def mailer_scope
26
+ self.class.mailer_name.tr('/', '.')
27
+ end
37
28
  end
@@ -72,7 +72,7 @@ module ActionMailer
72
72
  end
73
73
 
74
74
  links_list = links.map.with_index(1) {|link, index| "[#{index}]: #{link}" }.join("\n")
75
- node = Nokogiri::HTML.fragment "<pre>#{links_list}</pre>"
75
+ node = Nokogiri::HTML.fragment "<pre>\n#{links_list}\n</pre>"
76
76
 
77
77
  root << node
78
78
  end
@@ -0,0 +1,45 @@
1
+ module ActionMailer
2
+ module Markdown
3
+ class Resolver < ActionView::Resolver
4
+ FORMAT_TO_EXTENSION = {
5
+ text: :mdt,
6
+ html: :md
7
+ }
8
+
9
+ def find_templates(name, prefix, partial, details)
10
+ contents = find_contents(name, prefix, details)
11
+ return [] unless contents
12
+
13
+ %i[html text].map do |format|
14
+ identifier = "#{prefix}##{name} (#{format})"
15
+ path = virtual_path(name, prefix)
16
+ build_template(path, contents, identifier, format)
17
+ end
18
+ end
19
+
20
+ def build_template(path, contents, identifier, format)
21
+ ActionView::Template.new(contents, identifier, handler_for(format),
22
+ virtual_path: path,
23
+ format: format
24
+ )
25
+ end
26
+
27
+ def handler_for(format)
28
+ ActionView::Template
29
+ .registered_template_handler(FORMAT_TO_EXTENSION.fetch(format))
30
+ end
31
+
32
+ def virtual_path(name, prefix)
33
+ "#{prefix}/#{name}"
34
+ end
35
+
36
+ def find_contents(name, prefix, details)
37
+ key = [prefix, name, :body].join(I18n.default_separator)
38
+
39
+ I18n.with_locale(details[:locale].first || I18n.locale) do
40
+ I18n.t(key, raise: true) rescue nil
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ module ActionMailer
2
+ module Markdown
3
+ module TemplateHandler
4
+ UNDERSCORE = '_'.freeze
5
+
6
+ def self.render(template, context, format)
7
+ source = template.rstrip % extract_variables(context)
8
+ ActionMailer::Markdown.public_send(format, source)
9
+ end
10
+
11
+ def self.extract_variables(context)
12
+ context
13
+ .instance_variable_get(:@_assigns)
14
+ .each_with_object({}) do |(name, value), buffer|
15
+ next if name.start_with?(UNDERSCORE)
16
+ buffer[name.to_sym] = value
17
+ end
18
+ end
19
+
20
+ class Text
21
+ def self.call(template)
22
+ %[ActionMailer::Markdown::TemplateHandler.render(#{template.source.inspect}, self, :text)]
23
+ end
24
+ end
25
+
26
+ class HTML
27
+ def self.call(template)
28
+ %[ActionMailer::Markdown::TemplateHandler.render(#{template.source.inspect}, self, :html)]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  module ActionMailer
2
2
  module Markdown
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionmailer-markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-11 00:00:00.000000000 Z
11
+ date: 2015-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: minitest
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -143,6 +157,8 @@ files:
143
157
  - lib/action_mailer/markdown/ext.rb
144
158
  - lib/action_mailer/markdown/renderer.rb
145
159
  - lib/action_mailer/markdown/renderer/text.rb
160
+ - lib/action_mailer/markdown/resolver.rb
161
+ - lib/action_mailer/markdown/template_handler.rb
146
162
  - lib/action_mailer/markdown/version.rb
147
163
  - lib/actionmailer-markdown.rb
148
164
  homepage: https://github.com/fnando/actionmailer-markdown
@@ -165,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
181
  version: '0'
166
182
  requirements: []
167
183
  rubyforge_project:
168
- rubygems_version: 2.4.6
184
+ rubygems_version: 2.4.5.1
169
185
  signing_key:
170
186
  specification_version: 4
171
187
  summary: A different take on using ActionMailer, Markdown and I18n.