actionmailer-markdown 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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.