awesomemailer 0.0.3 → 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.
- data/CHANGELOG +4 -0
- data/Gemfile +8 -4
- data/Gemfile.lock +72 -38
- data/Guardfile +8 -0
- data/Rakefile +8 -7
- data/VERSION +1 -1
- data/awesomemailer.gemspec +14 -11
- data/lib/awesome_mailer/base.rb +5 -85
- data/lib/awesome_mailer/renderer.rb +110 -0
- data/lib/awesome_mailer.rb +2 -2
- metadata +42 -10
- data/spec/lib/awesome_mailer_spec.rb +0 -41
- data/spec/spec.opts +0 -2
- data/spec/spec_helper.rb +0 -1
- data/spec/support/test_mailer/test_email.html.erb +0 -2
- data/spec/support/test_mailer/test_email.text.erb +0 -1
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
0.1.0
|
2
|
+
* Full test coverage and moved to Nokogiri from Hpricot. Also
|
3
|
+
added autoload so the gem is there when you need it but won't
|
4
|
+
bog down your app startup anymore. Yay!
|
1
5
|
0.0.3
|
2
6
|
* Added Sprockets-based loading for local files. Now your mailers
|
3
7
|
work with local assets written with something other than CSS!
|
data/Gemfile
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
|
-
gem '
|
4
|
-
gem '
|
3
|
+
gem 'actionmailer', '>= 3.2'
|
4
|
+
gem 'addressable'
|
5
|
+
gem 'css_parser', '>= 1.2.5'
|
6
|
+
gem 'nokogiri', '>= 1.5.6'
|
5
7
|
|
6
8
|
group :test do
|
7
|
-
gem '
|
8
|
-
gem 'jeweler'
|
9
|
+
gem 'guard-rspec', require: false
|
10
|
+
gem 'jeweler', require: false
|
11
|
+
gem 'rspec', require: false
|
12
|
+
gem 'simplecov', require: false
|
9
13
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,61 +1,95 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
rack (~> 1.2
|
15
|
-
rack-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
i18n (~> 0.
|
22
|
-
|
23
|
-
addressable (2.2
|
24
|
-
builder (
|
25
|
-
css_parser (1.2.
|
4
|
+
actionmailer (3.2.8)
|
5
|
+
actionpack (= 3.2.8)
|
6
|
+
mail (~> 2.4.4)
|
7
|
+
actionpack (3.2.8)
|
8
|
+
activemodel (= 3.2.8)
|
9
|
+
activesupport (= 3.2.8)
|
10
|
+
builder (~> 3.0.0)
|
11
|
+
erubis (~> 2.7.0)
|
12
|
+
journey (~> 1.0.4)
|
13
|
+
rack (~> 1.4.0)
|
14
|
+
rack-cache (~> 1.2)
|
15
|
+
rack-test (~> 0.6.1)
|
16
|
+
sprockets (~> 2.1.3)
|
17
|
+
activemodel (3.2.8)
|
18
|
+
activesupport (= 3.2.8)
|
19
|
+
builder (~> 3.0.0)
|
20
|
+
activesupport (3.2.8)
|
21
|
+
i18n (~> 0.6)
|
22
|
+
multi_json (~> 1.0)
|
23
|
+
addressable (2.3.2)
|
24
|
+
builder (3.0.4)
|
25
|
+
css_parser (1.2.6)
|
26
26
|
addressable
|
27
|
-
|
28
|
-
|
27
|
+
rdoc
|
28
|
+
diff-lcs (1.1.3)
|
29
|
+
erubis (2.7.0)
|
29
30
|
git (1.2.5)
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
guard (1.4.0)
|
32
|
+
listen (>= 0.4.2)
|
33
|
+
thor (>= 0.14.6)
|
34
|
+
guard-rspec (1.2.1)
|
35
|
+
guard (>= 1.1)
|
36
|
+
hike (1.2.1)
|
37
|
+
i18n (0.6.1)
|
38
|
+
jeweler (1.8.4)
|
33
39
|
bundler (~> 1.0)
|
34
40
|
git (>= 1.2.5)
|
35
41
|
rake
|
36
|
-
|
37
|
-
|
42
|
+
rdoc
|
43
|
+
journey (1.0.4)
|
44
|
+
json (1.7.5)
|
45
|
+
listen (0.5.2)
|
46
|
+
mail (2.4.4)
|
38
47
|
i18n (>= 0.4.0)
|
39
48
|
mime-types (~> 1.16)
|
40
49
|
treetop (~> 1.4.8)
|
41
|
-
mime-types (1.
|
50
|
+
mime-types (1.19)
|
51
|
+
multi_json (1.3.7)
|
52
|
+
nokogiri (1.5.6)
|
42
53
|
polyglot (0.3.3)
|
43
|
-
rack (1.
|
44
|
-
rack-
|
45
|
-
rack (>=
|
46
|
-
rack-test (0.
|
54
|
+
rack (1.4.1)
|
55
|
+
rack-cache (1.2)
|
56
|
+
rack (>= 0.4)
|
57
|
+
rack-test (0.6.2)
|
47
58
|
rack (>= 1.0)
|
48
59
|
rake (0.9.2.2)
|
49
|
-
|
60
|
+
rdoc (3.12)
|
61
|
+
json (~> 1.4)
|
62
|
+
rspec (2.11.0)
|
63
|
+
rspec-core (~> 2.11.0)
|
64
|
+
rspec-expectations (~> 2.11.0)
|
65
|
+
rspec-mocks (~> 2.11.0)
|
66
|
+
rspec-core (2.11.1)
|
67
|
+
rspec-expectations (2.11.3)
|
68
|
+
diff-lcs (~> 1.1.3)
|
69
|
+
rspec-mocks (2.11.2)
|
70
|
+
simplecov (0.7.1)
|
71
|
+
multi_json (~> 1.0)
|
72
|
+
simplecov-html (~> 0.7.1)
|
73
|
+
simplecov-html (0.7.1)
|
74
|
+
sprockets (2.1.3)
|
75
|
+
hike (~> 1.2)
|
76
|
+
rack (~> 1.0)
|
77
|
+
tilt (~> 1.1, != 1.3.0)
|
78
|
+
thor (0.16.0)
|
79
|
+
tilt (1.3.3)
|
80
|
+
treetop (1.4.12)
|
50
81
|
polyglot
|
51
82
|
polyglot (>= 0.3.1)
|
52
|
-
tzinfo (0.3.31)
|
53
83
|
|
54
84
|
PLATFORMS
|
55
85
|
ruby
|
56
86
|
|
57
87
|
DEPENDENCIES
|
58
|
-
actionmailer (>= 3.
|
88
|
+
actionmailer (>= 3.2)
|
89
|
+
addressable
|
59
90
|
css_parser (>= 1.2.5)
|
60
|
-
|
91
|
+
guard-rspec
|
61
92
|
jeweler
|
93
|
+
nokogiri (>= 1.5.6)
|
94
|
+
rspec
|
95
|
+
simplecov
|
data/Guardfile
ADDED
data/Rakefile
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
begin
|
2
2
|
require 'jeweler'
|
3
|
-
Jeweler::Tasks.new do |
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
Jeweler::Tasks.new do |gem|
|
4
|
+
gem.name = "awesomemailer"
|
5
|
+
gem.summary = "An ActionMailer extension that embeds CSS inline in e-mails"
|
6
|
+
gem.description = %{
|
7
7
|
AwesomeMailer embeds your e-mail CSS inline, allowing you to write e-mail templates without worrying too much about stylesheets
|
8
8
|
}
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
gem.email = "flip@x451.com"
|
10
|
+
gem.homepage = "http://github.com/Plinq/awesome_mailer"
|
11
|
+
gem.authors = ["Flip Sasser"]
|
12
|
+
gem.files.exclude '.rspec', '.rvmrc', 'spec/**/*'
|
12
13
|
end
|
13
14
|
rescue LoadError
|
14
15
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/awesomemailer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "awesomemailer"
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Flip Sasser"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-02-03"
|
13
13
|
s.description = "\n AwesomeMailer embeds your e-mail CSS inline, allowing you to write e-mail templates without worrying too much about stylesheets\n "
|
14
14
|
s.email = "flip@x451.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -19,18 +19,15 @@ Gem::Specification.new do |s|
|
|
19
19
|
"CHANGELOG",
|
20
20
|
"Gemfile",
|
21
21
|
"Gemfile.lock",
|
22
|
+
"Guardfile",
|
22
23
|
"README.md",
|
23
24
|
"Rakefile",
|
24
25
|
"VERSION",
|
25
26
|
"awesomemailer.gemspec",
|
26
27
|
"lib/awesome_mailer.rb",
|
27
28
|
"lib/awesome_mailer/base.rb",
|
28
|
-
"lib/
|
29
|
-
"
|
30
|
-
"spec/spec.opts",
|
31
|
-
"spec/spec_helper.rb",
|
32
|
-
"spec/support/test_mailer/test_email.html.erb",
|
33
|
-
"spec/support/test_mailer/test_email.text.erb"
|
29
|
+
"lib/awesome_mailer/renderer.rb",
|
30
|
+
"lib/awesomemailer.rb"
|
34
31
|
]
|
35
32
|
s.homepage = "http://github.com/Plinq/awesome_mailer"
|
36
33
|
s.require_paths = ["lib"]
|
@@ -41,15 +38,21 @@ Gem::Specification.new do |s|
|
|
41
38
|
s.specification_version = 3
|
42
39
|
|
43
40
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
41
|
+
s.add_runtime_dependency(%q<actionmailer>, [">= 3.2"])
|
42
|
+
s.add_runtime_dependency(%q<addressable>, [">= 0"])
|
44
43
|
s.add_runtime_dependency(%q<css_parser>, [">= 1.2.5"])
|
45
|
-
s.add_runtime_dependency(%q<
|
44
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 1.5.6"])
|
46
45
|
else
|
46
|
+
s.add_dependency(%q<actionmailer>, [">= 3.2"])
|
47
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
47
48
|
s.add_dependency(%q<css_parser>, [">= 1.2.5"])
|
48
|
-
s.add_dependency(%q<
|
49
|
+
s.add_dependency(%q<nokogiri>, [">= 1.5.6"])
|
49
50
|
end
|
50
51
|
else
|
52
|
+
s.add_dependency(%q<actionmailer>, [">= 3.2"])
|
53
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
51
54
|
s.add_dependency(%q<css_parser>, [">= 1.2.5"])
|
52
|
-
s.add_dependency(%q<
|
55
|
+
s.add_dependency(%q<nokogiri>, [">= 1.5.6"])
|
53
56
|
end
|
54
57
|
end
|
55
58
|
|
data/lib/awesome_mailer/base.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require '
|
1
|
+
require 'abstract_controller'
|
2
2
|
require 'action_mailer'
|
3
|
-
require '
|
3
|
+
require 'nokogiri'
|
4
4
|
require 'css_parser'
|
5
5
|
|
6
6
|
module AwesomeMailer
|
@@ -8,91 +8,11 @@ module AwesomeMailer
|
|
8
8
|
abstract!
|
9
9
|
include ActionView::Helpers::AssetTagHelper::StylesheetTagHelpers
|
10
10
|
include ActionView::Helpers::AssetTagHelper::JavascriptTagHelpers
|
11
|
+
include AbstractController::UrlFor
|
11
12
|
|
12
13
|
def render(*arguments)
|
13
|
-
|
14
|
-
|
15
|
-
stylesheets = document.search('link[@rel=stylesheet]')
|
16
|
-
stylesheets.each do |stylesheet|
|
17
|
-
if stylesheet['media'] =~ /^(all|handheld|screen)$/ # Must be intended for digital screens!
|
18
|
-
apply_stylesheet!(document, stylesheet)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
stylesheets.remove
|
22
|
-
document.to_html
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
def append_styles!(document, selector, declarations)
|
27
|
-
unless head = document.at('head')
|
28
|
-
head = Hpricot::Elem.new('head')
|
29
|
-
document.children.unshift(head)
|
30
|
-
end
|
31
|
-
unless style = head.at('style[@type=text/css]')
|
32
|
-
style = Hpricot::Elem.new('style')
|
33
|
-
style['type'] = 'text/css'
|
34
|
-
style.inner_html = "\n"
|
35
|
-
head.children.unshift(style)
|
36
|
-
end
|
37
|
-
style.inner_html += "#{selector} { #{declarations} }\n"
|
38
|
-
end
|
39
|
-
|
40
|
-
def apply_rules!(document, css_parser, url)
|
41
|
-
css_parser.each_selector do |selector, declarations, specificity|
|
42
|
-
if url
|
43
|
-
# Rewrite relative URLs to match their parent CSS's URL path
|
44
|
-
path_url = Addressable::URI.parse(url)
|
45
|
-
path_url.path = File.dirname(path_url.path)
|
46
|
-
declarations.scan(/(url\(?["']+(.[^'"]*)["']\))/i).each do |url_command, item|
|
47
|
-
next if item =~ /^(http(s){0,1}:\/\/|\/)/
|
48
|
-
item_url = path_url.dup
|
49
|
-
item_url.path = File.join(item_url.path, item)
|
50
|
-
new_url_command = url_command.gsub(item, item_url.to_s)
|
51
|
-
declarations[url_command] = new_url_command
|
52
|
-
end
|
53
|
-
end
|
54
|
-
if selector =~ /(^@)/
|
55
|
-
append_styles!(document, selector, declarations.to_s) if url
|
56
|
-
elsif selector !~ /:/
|
57
|
-
document.search(selector).each do |element|
|
58
|
-
element['style'] = [element['style'], *declarations].compact.join(';')
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def apply_stylesheet!(document, stylesheet)
|
65
|
-
css_parser = CssParser::Parser.new
|
66
|
-
clean_href = stylesheet['href'].split('?').shift
|
67
|
-
if self.class.default_url_options[:host]
|
68
|
-
clean_href.gsub!(/^http:\/\/#{self.class.default_url_options[:host]}/, '')
|
69
|
-
end
|
70
|
-
url = nil
|
71
|
-
case clean_href
|
72
|
-
when /^\/assets/
|
73
|
-
if asset = Rails.application.assets[clean_href.gsub(/^\/assets\//, '')]
|
74
|
-
css_parser.add_block!(asset.to_s, :media_types => :all)
|
75
|
-
else
|
76
|
-
dirname = File.dirname(clean_href).split('/').reject(&:blank?)[1..-1]
|
77
|
-
local_file = File.join(Rails.root, 'app', 'assets', 'stylesheets', dirname, File.basename(clean_href))
|
78
|
-
if File.file?(local_file)
|
79
|
-
css_parser.load_file!(local_file)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
when /^\//
|
83
|
-
css_parser.load_file!(File.join(Rails.root, 'public', clean_href))
|
84
|
-
when /^#{self.class.default_url_options[:host]}\/assets/
|
85
|
-
raise 'wugh oh'
|
86
|
-
else
|
87
|
-
raise stylesheet.inspect
|
88
|
-
css_parser.load_uri!(stylesheet['href'])
|
89
|
-
url = clean_href
|
90
|
-
end
|
91
|
-
apply_rules!(document, css_parser, url)
|
92
|
-
end
|
93
|
-
|
94
|
-
def sprockets?
|
95
|
-
Rails.application.respond_to?(:assets)
|
14
|
+
return super unless formats.include? :html
|
15
|
+
AwesomeMailer::Renderer.new(super).to_html
|
96
16
|
end
|
97
17
|
end
|
98
18
|
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module AwesomeMailer
|
2
|
+
class Renderer
|
3
|
+
attr_accessor :document
|
4
|
+
|
5
|
+
def initialize(document_string)
|
6
|
+
self.document = Nokogiri::HTML.parse(document_string)
|
7
|
+
stylesheets = document.search('link[@rel=stylesheet]')
|
8
|
+
stylesheets.each do |stylesheet|
|
9
|
+
# Must be intended for digital screens!
|
10
|
+
load_stylesheet(stylesheet) if stylesheet['media'] =~ /^(all|handheld|screen)$/
|
11
|
+
end
|
12
|
+
apply_css!(document)
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_html
|
16
|
+
document.to_html
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def append_styles!(document, selector, declarations)
|
21
|
+
header_stylesheet.inner_html += "#{selector} { #{declarations} }\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def apply_css!(document)
|
25
|
+
css_parser.each_selector do |selector, declarations, specificity|
|
26
|
+
# Rewrite relative URLs to match their parent CSS's URL path
|
27
|
+
rewrite_relative_urls(declarations) if css_host
|
28
|
+
if selector =~ /(^@|:)/
|
29
|
+
# Include difficult styles in the head
|
30
|
+
append_styles!(document, selector, declarations.to_s)
|
31
|
+
else
|
32
|
+
# Include regular styles inline
|
33
|
+
document.search(selector).each do |element|
|
34
|
+
element['style'] = [element['style'], *declarations].compact.join(';')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def asset_pipeline_path
|
41
|
+
return false unless sprockets?
|
42
|
+
/^#{Regexp.escape(Rails.configuration.assets[:path])}\//
|
43
|
+
end
|
44
|
+
|
45
|
+
def css_host
|
46
|
+
if host = AwesomeMailer::Base.default_url_options[:host]
|
47
|
+
Addressable::URI.heuristic_parse(host, scheme: 'http')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def css_parser
|
52
|
+
@css_parser ||= CssParser::Parser.new
|
53
|
+
end
|
54
|
+
|
55
|
+
def head
|
56
|
+
@head ||= document.at('head') || Nokogiri::XML::Node.new('head', document.root).tap do |head|
|
57
|
+
document.root.children.first.add_previous_sibling(head)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def header_stylesheet
|
62
|
+
@header_stylesheet ||= head.at('style[@type="text/css"]') || Nokogiri::XML::Node.new('style', head).tap do |style|
|
63
|
+
style['type'] = 'text/css'
|
64
|
+
style.inner_html = "\n"
|
65
|
+
head.add_child(style)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def load_stylesheet(stylesheet)
|
70
|
+
stylesheet_path = stylesheet['href'].split('?').shift
|
71
|
+
stylesheet_path.gsub!(/^#{Regexp.escape(css_host)}/, '') if css_host
|
72
|
+
case stylesheet_path
|
73
|
+
when asset_pipeline_path
|
74
|
+
if asset = read_asset_pipeline_asset(stylesheet_path)
|
75
|
+
css_parser.add_block!(asset.to_s, :media_types => :all)
|
76
|
+
end
|
77
|
+
when /^\//
|
78
|
+
local_path = rails? && Rails.root.join('public', stylesheet_path.gsub(/^\//, '')).to_s
|
79
|
+
css_parser.load_file!(local_path) if local_path && File.file?(local_path)
|
80
|
+
else
|
81
|
+
dirname = File.dirname(stylesheet['href'])
|
82
|
+
css_parser.load_uri!(stylesheet['href'], base_uri: dirname)
|
83
|
+
end
|
84
|
+
stylesheet.remove
|
85
|
+
end
|
86
|
+
|
87
|
+
def rails?
|
88
|
+
defined? Rails
|
89
|
+
end
|
90
|
+
|
91
|
+
def read_asset_pipeline_asset(path)
|
92
|
+
path = path.gsub(asset_pipeline_path, '')
|
93
|
+
Rails.application.assets[path]
|
94
|
+
end
|
95
|
+
|
96
|
+
def rewrite_relative_urls(css_declarations)
|
97
|
+
css_declarations.scan(/(url\s*\(?["']+(.[^'"]*)["']\))/i).each do |url_command, item|
|
98
|
+
next if item =~ /^http(s){0,1}:\/\//
|
99
|
+
item_url = css_host.dup
|
100
|
+
item_url.path = File.join(item_url.path, item)
|
101
|
+
new_url_command = url_command.gsub(item, item_url.to_s)
|
102
|
+
css_declarations[url_command] = new_url_command
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def sprockets?
|
107
|
+
rails? && Rails.application.respond_to?(:assets)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/awesome_mailer.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awesomemailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: actionmailer
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.2'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.2'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: addressable
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
14
46
|
- !ruby/object:Gem::Dependency
|
15
47
|
name: css_parser
|
16
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -28,13 +60,13 @@ dependencies:
|
|
28
60
|
- !ruby/object:Gem::Version
|
29
61
|
version: 1.2.5
|
30
62
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
63
|
+
name: nokogiri
|
32
64
|
requirement: !ruby/object:Gem::Requirement
|
33
65
|
none: false
|
34
66
|
requirements:
|
35
67
|
- - ! '>='
|
36
68
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
69
|
+
version: 1.5.6
|
38
70
|
type: :runtime
|
39
71
|
prerelease: false
|
40
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +74,7 @@ dependencies:
|
|
42
74
|
requirements:
|
43
75
|
- - ! '>='
|
44
76
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
77
|
+
version: 1.5.6
|
46
78
|
description: ! "\n AwesomeMailer embeds your e-mail CSS inline, allowing you
|
47
79
|
to write e-mail templates without worrying too much about stylesheets\n "
|
48
80
|
email: flip@x451.com
|
@@ -54,18 +86,15 @@ files:
|
|
54
86
|
- CHANGELOG
|
55
87
|
- Gemfile
|
56
88
|
- Gemfile.lock
|
89
|
+
- Guardfile
|
57
90
|
- README.md
|
58
91
|
- Rakefile
|
59
92
|
- VERSION
|
60
93
|
- awesomemailer.gemspec
|
61
94
|
- lib/awesome_mailer.rb
|
62
95
|
- lib/awesome_mailer/base.rb
|
96
|
+
- lib/awesome_mailer/renderer.rb
|
63
97
|
- lib/awesomemailer.rb
|
64
|
-
- spec/lib/awesome_mailer_spec.rb
|
65
|
-
- spec/spec.opts
|
66
|
-
- spec/spec_helper.rb
|
67
|
-
- spec/support/test_mailer/test_email.html.erb
|
68
|
-
- spec/support/test_mailer/test_email.text.erb
|
69
98
|
homepage: http://github.com/Plinq/awesome_mailer
|
70
99
|
licenses: []
|
71
100
|
post_install_message:
|
@@ -78,6 +107,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
107
|
- - ! '>='
|
79
108
|
- !ruby/object:Gem::Version
|
80
109
|
version: '0'
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
hash: -3813975484138673240
|
81
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
114
|
none: false
|
83
115
|
requirements:
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'awesome_mailer'
|
3
|
-
|
4
|
-
AwesomeMailer::Base.prepend_view_path 'spec/support'
|
5
|
-
AwesomeMailer::Base.config.assets_dir = 'spec/support'
|
6
|
-
|
7
|
-
class TestMailer < AwesomeMailer::Base
|
8
|
-
def test_email(subject = "Hello!")
|
9
|
-
mail(
|
10
|
-
:from => "flip@x451.com",
|
11
|
-
:to => "flip@x451.com",
|
12
|
-
:subject => subject
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_multipart_email(subject = "Hello")
|
17
|
-
mail(
|
18
|
-
:from => "flip@x451.com",
|
19
|
-
:to => "flip@x451.com",
|
20
|
-
:subject => subject
|
21
|
-
) do |format|
|
22
|
-
format.html { render :test_email }
|
23
|
-
format.text { render :test_email }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe AwesomeMailer::Base do
|
29
|
-
it "should render messages like ActionMailer::Base" do
|
30
|
-
TestMailer.test_email("Howdy!").should be_instance_of Mail::Message
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should automatically parse the body of HTML e-mails" do
|
34
|
-
raise TestMailer.test_email("Howdy!").html_part.body.inspect
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should automatically parse the body of multipart e-mails" do
|
38
|
-
raise TestMailer.test_multipart_email("Howdy!").html_part.body.inspect
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -1 +0,0 @@
|
|
1
|
-
welcome!
|