actionmailer-markdown 0.2.0 → 0.3.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: 286269f0bc2b88e8598c2dfe0c3082b57664155d
4
- data.tar.gz: 5ee1501c9776bf0027a19d4173712de98db8aa9f
3
+ metadata.gz: bceab9613ce531fdbe9702d005d92c6912c73a4f
4
+ data.tar.gz: 11d4c007f396d05099801df95ba96dcb960c9ad1
5
5
  SHA512:
6
- metadata.gz: 577bb5245e8c6111a0b9758ac09dd7254ca8c1c764910b5f62d931530958ca703ae6644ebf990631f84993ca5ca596ee073389a4fc7d584df0c6f6701904229e
7
- data.tar.gz: 1091e0b11499b8b098aa36bc5b8d58ce5d55a737d065caa6f4e4023a8ecab38ea7fc3b89193eb01a5e28b381a99511cccd1cb7468a1f7b5541629d5d777b1c44
6
+ metadata.gz: ca9ce1c031eca37131bf9a6fc941f931563acc03cf189ce5a5fce40cf06048c26ed6f3b673cd5a4d17ce4c48126efb6a509236effb5e32c85acd4bdebab35592
7
+ data.tar.gz: 1b897a6b32ea047278e43f709fde5de33a61a29a59a0086c2285112feb2616388b6bd0ba6ce05c848a4f81802c0718d500fca534fa0cd38d362799ea1f5ee08f
data/.travis.yml CHANGED
@@ -2,7 +2,10 @@ language: ruby
2
2
  cache: bundler
3
3
  sudo: false
4
4
  rvm:
5
- - 2.2.2
5
+ - 2.3.1
6
6
  before_install: gem install bundler
7
7
  notifications:
8
8
  email: false
9
+ env:
10
+ global:
11
+ secure: I9mcU1pn5N3LNhYv2AlaYm9myrnJ09XyCP3UC6JoWwI85xObKNShMcO0ADKEDU1T0QhrMVgX7Vrp/5mCgEkSYhDFy0NG62xZZKPC3CHPizqN56v0vX+7/tecAcSQ0Fz+ZrVZ1qiGrPesA9ssYWMROE0/DYWJRl0axxbstP6YBBN8TDdF2RAIYcLIb0NJc7ZlrJYoKPWSgEsio476/gschDxV5tK/AA0uvUJjejQFDWxhm87DRcfbwW+sb/URvCkUN4+dT5lKKFZ/UfOGVWmkyFOjleluSe0vyaR4/W3THB4djGpE5e3feGb8bTPbkyqBmpy6Js0+DihCaK58e3DbhT2vk0gSOVi/xMr6Rx7FOZrRQMnH8QkEnoxS4BH3ySAN08cQcict3LIN5GGW340QebDS5u7KwwyJ9BNyqocC1Ob1LZJFDHMfj3S96TLQ2W08vNkcOY5dBvUw9JzJvl6neRjIJila62Gt+Gezij9KnXrr1lBx7R8frR/LwL/32ET4E4lTXVp1soapqSHs9TF72EXOywIrsnJZDRFEngbxKdxuNB0diVWhuTipmVkSdExleXfsfGTGfS4iHYJEGOOWxGSEdiPWc5tNWxsAmA1lyM2jpJl7/XWzaRU5eZl9psYvGCL+nKW6gZrqbFl95D/txD5pAAHRg+Rpl1LE8VDIs3w=
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in actionmailer-markdown.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # ActionMailer::Markdown
2
2
 
3
- [![build status](https://travis-ci.org/fnando/actionmailer-markdown.svg)](https://travis-ci.org/fnando/actionmailer-markdown)
3
+ [![Travis-CI](https://travis-ci.org/fnando/actionmailer-markdown.png)](https://travis-ci.org/fnando/actionmailer-markdown)
4
+ [![Code Climate](https://codeclimate.com/github/fnando/actionmailer-markdown/badges/gpa.svg)](https://codeclimate.com/github/fnando/actionmailer-markdown)
5
+ [![Test Coverage](https://codeclimate.com/github/fnando/actionmailer-markdown/badges/coverage.svg)](https://codeclimate.com/github/fnando/actionmailer-markdown/coverage)
6
+ [![Gem](https://img.shields.io/gem/v/actionmailer-markdown.svg)](https://rubygems.org/gems/actionmailer-markdown)
7
+ [![Gem](https://img.shields.io/gem/dt/actionmailer-markdown.svg)](https://rubygems.org/gems/actionmailer-markdown)
4
8
 
5
9
  A different take on using ActionMailer, Markdown and I18n.
6
10
 
data/Rakefile CHANGED
@@ -1,10 +1,11 @@
1
- require 'bundler/gem_tasks'
2
- require 'rake/testtask'
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << 'test'
6
- t.libs << 'lib'
7
- t.test_files = FileList['test/**/*_test.rb']
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ t.warning = false
8
9
  end
9
10
 
10
- task :default => :test
11
+ task default: :test
@@ -1,27 +1,28 @@
1
- require './lib/action_mailer/markdown/version'
1
+ require "./lib/action_mailer/markdown/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = 'actionmailer-markdown'
4
+ spec.name = "actionmailer-markdown"
5
5
  spec.version = ActionMailer::Markdown::VERSION
6
- spec.authors = ['Nando Vieira']
7
- spec.email = ['fnando.vieira@gmail.com']
8
- spec.summary = 'A different take on using ActionMailer, Markdown and I18n.'
6
+ spec.authors = ["Nando Vieira"]
7
+ spec.email = ["fnando.vieira@gmail.com"]
8
+ spec.summary = "A different take on using ActionMailer, Markdown and I18n."
9
9
  spec.description = spec.summary
10
- spec.homepage = 'https://github.com/fnando/actionmailer-markdown'
11
- spec.license = 'MIT'
10
+ spec.homepage = "https://github.com/fnando/actionmailer-markdown"
11
+ spec.license = "MIT"
12
12
 
13
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
14
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
15
- spec.require_paths = ['lib']
13
+ spec.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
14
+ spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
15
+ spec.require_paths = ["lib"]
16
16
 
17
- spec.add_dependency 'actionmailer'
18
- spec.add_dependency 'redcarpet'
17
+ spec.add_dependency "actionmailer"
18
+ spec.add_dependency "redcarpet"
19
19
 
20
- spec.add_development_dependency 'bundler', '~> 1.10'
21
- spec.add_development_dependency 'rake', '~> 10.0'
22
- spec.add_development_dependency 'rails'
23
- spec.add_development_dependency 'minitest'
24
- spec.add_development_dependency 'minitest-utils'
25
- spec.add_development_dependency 'pry-meta'
26
- spec.add_development_dependency 'kramdown'
20
+ spec.add_development_dependency "bundler"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rails"
23
+ spec.add_development_dependency "minitest"
24
+ spec.add_development_dependency "minitest-utils"
25
+ spec.add_development_dependency "pry-meta"
26
+ spec.add_development_dependency "kramdown"
27
+ spec.add_development_dependency "codeclimate-test-reporter"
27
28
  end
@@ -1,15 +1,15 @@
1
1
  module ActionMailer
2
2
  module Markdown
3
- require 'action_mailer'
4
- require 'action_view'
5
- require 'redcarpet'
3
+ require "action_mailer"
4
+ require "action_view"
5
+ require "redcarpet"
6
6
 
7
- require 'action_mailer/markdown/version'
8
- require 'action_mailer/markdown/resolver'
9
- require 'action_mailer/markdown/ext'
10
- require 'action_mailer/markdown/renderer'
11
- require 'action_mailer/markdown/renderer/text'
12
- require 'action_mailer/markdown/template_handler'
7
+ require "action_mailer/markdown/version"
8
+ require "action_mailer/markdown/resolver"
9
+ require "action_mailer/markdown/ext"
10
+ require "action_mailer/markdown/renderer"
11
+ require "action_mailer/markdown/renderer/text"
12
+ require "action_mailer/markdown/template_handler"
13
13
  end
14
14
  end
15
15
 
@@ -3,8 +3,9 @@ ActionMailer::Base.class_eval do
3
3
 
4
4
  define_method(:mail) do |headers = {}, &block|
5
5
  options = variables_set_by_user
6
- subject = get_translation_for('subject', options)
6
+ subject = get_translation_for("subject", options)
7
7
  headers[:subject] ||= subject
8
+ headers[:locals] = {a: 1}
8
9
  mail_method.bind(self).call(headers, &block)
9
10
  end
10
11
 
@@ -23,6 +24,6 @@ ActionMailer::Base.class_eval do
23
24
  end
24
25
 
25
26
  def mailer_scope
26
- self.class.mailer_name.tr('/', '.')
27
+ self.class.mailer_name.tr("/", ".")
27
28
  end
28
29
  end
@@ -10,7 +10,7 @@ module ActionMailer
10
10
 
11
11
  def initialize(source)
12
12
  @source = source
13
- @root = Nokogiri::HTML(Markdown.html(source)).css('body')
13
+ @root = Nokogiri::HTML(Markdown.html(source)).css("body")
14
14
  end
15
15
 
16
16
  def extract
@@ -25,32 +25,32 @@ module ActionMailer
25
25
  end
26
26
 
27
27
  def process_code
28
- root.css('code').each do |code|
29
- next if code.parent.name == 'pre'
28
+ root.css("code").each do |code|
29
+ next if code.parent.name == "pre"
30
30
  code.content = "`#{code.content}`"
31
31
  end
32
32
  end
33
33
 
34
34
  def process_hr
35
- root.css('hr').each(&:remove)
35
+ root.css("hr").each(&:remove)
36
36
  end
37
37
 
38
38
  def process_h1
39
- root.css('h1').each do |heading|
40
- heading.content = "#{heading.text}\n#{'=' * heading.text.size}"
39
+ root.css("h1").each do |heading|
40
+ heading.content = build_heading(heading.text, "=")
41
41
  end
42
42
  end
43
43
 
44
44
  def process_h2
45
- root.css('h2').each do |heading|
46
- heading.content = "\n#{heading.text}\n#{'-' * heading.text.size}"
45
+ root.css("h2").each do |heading|
46
+ heading.content = "\n#{build_heading(heading.text, "-")}"
47
47
  end
48
48
  end
49
49
 
50
50
  def process_lists
51
- root.css('ol, ul').each do |list|
52
- list.css('li').to_enum(:each).with_index(1) do |item, index|
53
- prefix = (list.name == 'ol' ? "#{index}." : "-")
51
+ root.css("ol, ul").each do |list|
52
+ list.css("li").to_enum(:each).with_index(1) do |item, index|
53
+ prefix = (list.name == "ol" ? "#{index}." : "-")
54
54
  item.content = "#{prefix} #{item.text}"
55
55
  end
56
56
  end
@@ -59,11 +59,11 @@ module ActionMailer
59
59
  def process_links
60
60
  links = []
61
61
 
62
- root.css('a').each do |link|
63
- href = link['href']
62
+ root.css("a").each do |link|
63
+ href = link["href"]
64
64
 
65
- if href.starts_with?('mailto:')
66
- link.content = href.sub('mailto:', '')
65
+ if href.starts_with?("mailto:")
66
+ link.content = href.sub("mailto:", "")
67
67
  elsif link.content.match(%r[^(?!\w+://)])
68
68
  links << href unless links.include?(href)
69
69
  index = links.index(href) + 1
@@ -76,6 +76,12 @@ module ActionMailer
76
76
 
77
77
  root << node
78
78
  end
79
+
80
+ private
81
+
82
+ def build_heading(text, separator)
83
+ "#{text}\n#{separator * text.size}"
84
+ end
79
85
  end
80
86
  end
81
87
  end
@@ -6,7 +6,7 @@ module ActionMailer
6
6
  html: :md
7
7
  }
8
8
 
9
- def find_templates(name, prefix, partial, details)
9
+ def find_templates(name, prefix, _partial, details, outside_app_allowed = false)
10
10
  contents = find_contents(name, prefix, details)
11
11
  return [] unless contents
12
12
 
@@ -18,9 +18,11 @@ module ActionMailer
18
18
  end
19
19
 
20
20
  def build_template(path, contents, identifier, format)
21
- ActionView::Template.new(contents, identifier, handler_for(format),
22
- virtual_path: path,
23
- format: format
21
+ ActionView::Template.new(
22
+ contents,
23
+ identifier,
24
+ handler_for(format),
25
+ virtual_path: path, format: format
24
26
  )
25
27
  end
26
28
 
@@ -33,12 +35,16 @@ module ActionMailer
33
35
  "#{prefix}/#{name}"
34
36
  end
35
37
 
36
- def find_contents(name, prefix, details)
37
- key = [prefix, name, :body].join(I18n.default_separator)
38
+ def translations
39
+ I18n.backend.initialize unless I18n.backend.initialized?
40
+ I18n.backend.send(:translations)
41
+ end
38
42
 
39
- I18n.with_locale(details[:locale].first || I18n.locale) do
40
- I18n.t(key, raise: true) rescue nil
41
- end
43
+ def find_contents(name, prefix, details)
44
+ [details[:locale].try(:first) || I18n.locale, prefix, name, :body]
45
+ .reduce(translations) do |buffer, key|
46
+ buffer && buffer[key.to_sym]
47
+ end
42
48
  end
43
49
  end
44
50
  end
@@ -1,13 +1,24 @@
1
1
  module ActionMailer
2
2
  module Markdown
3
3
  module TemplateHandler
4
- UNDERSCORE = '_'.freeze
4
+ UNDERSCORE = "_".freeze
5
+ OBJECT_ATTRIBUTE_MATCHER = /%\{([a-z0-9_]+\.[a-z0-9_]+)\}/i
5
6
 
6
7
  def self.render(template, context, format)
7
- source = template.rstrip % extract_variables(context)
8
+ variables = expand_variables(template, extract_variables(context))
9
+ source = template.rstrip % variables
8
10
  ActionMailer::Markdown.public_send(format, source)
9
11
  end
10
12
 
13
+ def self.expand_variables(template, variables)
14
+ template.scan(OBJECT_ATTRIBUTE_MATCHER)
15
+ .map(&:first)
16
+ .each_with_object(variables) do |match, buffer|
17
+ target, attribute = match.split(".")
18
+ buffer[match.to_sym] = variables[target.to_sym].public_send(attribute)
19
+ end
20
+ end
21
+
11
22
  def self.extract_variables(context)
12
23
  context
13
24
  .instance_variable_get(:@_assigns)
@@ -19,13 +30,19 @@ module ActionMailer
19
30
 
20
31
  class Text
21
32
  def self.call(template)
22
- %[ActionMailer::Markdown::TemplateHandler.render(#{template.source.inspect}, self, :text)]
33
+ %[
34
+ ActionMailer::Markdown::TemplateHandler
35
+ .render(#{template.source.inspect}, self, :text)
36
+ ]
23
37
  end
24
38
  end
25
39
 
26
40
  class HTML
27
41
  def self.call(template)
28
- %[ActionMailer::Markdown::TemplateHandler.render(#{template.source.inspect}, self, :html)]
42
+ %[
43
+ ActionMailer::Markdown::TemplateHandler
44
+ .render(#{template.source.inspect}, self, :html)
45
+ ]
29
46
  end
30
47
  end
31
48
  end
@@ -1,5 +1,5 @@
1
1
  module ActionMailer
2
2
  module Markdown
3
- VERSION = '0.2.0'
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -1 +1 @@
1
- require 'action_mailer/markdown'
1
+ require "action_mailer/markdown"
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.2.0
4
+ version: 0.3.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-31 00:00:00.000000000 Z
11
+ date: 2016-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -42,30 +42,30 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.10'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '1.10'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rails
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: codeclimate-test-reporter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  description: A different take on using ActionMailer, Markdown and I18n.
140
154
  email:
141
155
  - fnando.vieira@gmail.com
@@ -181,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
195
  version: '0'
182
196
  requirements: []
183
197
  rubyforge_project:
184
- rubygems_version: 2.4.5.1
198
+ rubygems_version: 2.5.1
185
199
  signing_key:
186
200
  specification_version: 4
187
201
  summary: A different take on using ActionMailer, Markdown and I18n.