premailer-rails3 1.3.1 → 1.3.2

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.
@@ -1,18 +0,0 @@
1
- require 'premailer'
2
- require 'premailer-rails3/css_loaders'
3
- require 'premailer-rails3/css_helper'
4
- require 'premailer-rails3/premailer'
5
- require 'premailer-rails3/hook'
6
-
7
- module PremailerRails
8
- @config = {
9
- :input_encoding => 'UTF-8',
10
- :inputencoding => 'UTF-8',
11
- :generate_text_part => true
12
- }
13
- class << self
14
- attr_accessor :config
15
- end
16
- end
17
-
18
- ActionMailer::Base.register_interceptor(PremailerRails::Hook)
@@ -1,61 +0,0 @@
1
- require 'open-uri'
2
- require 'zlib'
3
-
4
- module PremailerRails
5
- module CSSHelper
6
- extend self
7
-
8
- @cache = {}
9
- attr :cache
10
-
11
- STRATEGIES = [
12
- CSSLoaders::CacheLoader,
13
- CSSLoaders::HassleLoader,
14
- CSSLoaders::AssetPipelineLoader,
15
- CSSLoaders::FileSystemLoader
16
- ]
17
-
18
- # Returns all linked CSS files concatenated as string.
19
- def css_for_doc(doc)
20
- urls = css_urls_in_doc(doc)
21
- if urls.empty?
22
- load_css(:default) unless has_inline_css? doc
23
- else
24
- urls.map { |url| load_css(url) }.join("\n")
25
- end
26
- end
27
-
28
- private
29
-
30
- def css_urls_in_doc(doc)
31
- doc.search('link[@type="text/css"]').map do |link|
32
- link.attributes['href'].to_s
33
- end
34
- end
35
-
36
- def has_inline_css?(doc)
37
- not doc.search('style[@type="text/css"]').empty?
38
- end
39
-
40
- def load_css(url)
41
- path = extract_path(url)
42
-
43
- @cache[path] = STRATEGIES.each do |strategy|
44
- css = strategy.load(path)
45
- break css if css
46
- end
47
- end
48
-
49
- # Extracts the path of a url.
50
- def extract_path(url)
51
- if url.is_a? String
52
- # Remove everything after ? including ?
53
- url = url[0..(url.index('?') - 1)] if url.include? '?'
54
- # Remove the host
55
- url = url.sub(/^https?\:\/\/[^\/]*/, '') if url.index('http') == 0
56
- end
57
-
58
- url
59
- end
60
- end
61
- end
@@ -1,91 +0,0 @@
1
- module PremailerRails
2
- module CSSLoaders
3
- # Loads the CSS from cache when not in development env.
4
- module CacheLoader
5
- extend self
6
-
7
- def load(path)
8
- unless Rails.env.development?
9
- CSSHelper.cache[path]
10
- end
11
- end
12
- end
13
-
14
- # Loads the CSS from Hassle middleware if present.
15
- module HassleLoader
16
- extend self
17
-
18
- def load(path)
19
- if hassle_enabled?
20
- File.read("#{Rails.root}/tmp/hassle#{normalized_path(path)}")
21
- end
22
- end
23
-
24
- def hassle_enabled?
25
- Rails.configuration.middleware.include? Hassle rescue false
26
- end
27
-
28
- def normalized_path(path)
29
- path == :default ? '/stylesheets/email.css' : path
30
- end
31
- end
32
-
33
- # Loads the CSS from the asset pipeline.
34
- module AssetPipelineLoader
35
- extend self
36
-
37
- def load(path)
38
- if assets_enabled?
39
- file = file_name(path)
40
- if asset = Rails.application.assets.find_asset(file)
41
- asset.to_s
42
- else
43
- request_and_unzip(file)
44
- end
45
- end
46
- end
47
-
48
- def assets_enabled?
49
- Rails.configuration.assets.enabled rescue false
50
- end
51
-
52
- def file_name(path)
53
- if path == :default
54
- 'email.css'
55
- else
56
- path.sub("#{Rails.configuration.assets.prefix}/", '') \
57
- .sub(/-.*\.css$/, '.css')
58
- end
59
- end
60
-
61
- def request_and_unzip(file)
62
- url = [
63
- Rails.configuration.action_controller.asset_host,
64
- Rails.configuration.assets.prefix.sub(/^\//, ''),
65
- Rails.configuration.assets.digests[file]
66
- ].join('/')
67
- response = Kernel.open(url)
68
-
69
- begin
70
- Zlib::GzipReader.new(response).read
71
- rescue Zlib::GzipFile::Error, Zlib::Error
72
- response.rewind
73
- response.read
74
- end
75
- end
76
- end
77
-
78
- # Loads the CSS from the file system.
79
- module FileSystemLoader
80
- extend self
81
-
82
- def load(path)
83
- File.read("#{Rails.root}/public#{normalized_path(path)}")
84
- end
85
-
86
- def normalized_path(path)
87
- path == :default ? '/stylesheets/email.css' : path
88
- end
89
- end
90
- end
91
- end
@@ -1,43 +0,0 @@
1
- module PremailerRails
2
- class Hook
3
- def self.delivering_email(message)
4
- # If the mail only has one part, it may be stored in message.body. In that
5
- # case, if the mail content type is text/html, the body part will be the
6
- # html body.
7
- if message.html_part
8
- html_body = message.html_part.body.to_s
9
- needs_multipart = true
10
- message.parts.delete(message.html_part)
11
- elsif message.content_type =~ /text\/html/
12
- html_body = message.body.to_s
13
- message.body = nil
14
- needs_multipart = PremailerRails.config[:generate_text_part]
15
- end
16
-
17
- if html_body
18
- premailer = Premailer.new(html_body)
19
- charset = message.charset
20
-
21
- if needs_multipart
22
- # IMPORTANT: Plain text part must be generated before CSS is inlined.
23
- # Not doing so results in CSS declarations visible in the plain text
24
- # part.
25
- if PremailerRails.config[:generate_text_part] \
26
- and not message.text_part
27
- message.text_part do
28
- content_type "text/plain; charset=#{charset}"
29
- body premailer.to_plain_text
30
- end
31
- end
32
-
33
- message.html_part do
34
- content_type "text/html; charset=#{charset}"
35
- body premailer.to_inline_css
36
- end
37
- else
38
- message.body = premailer.to_inline_css
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,18 +0,0 @@
1
- module PremailerRails
2
- class Premailer < ::Premailer
3
- def initialize(html)
4
- # In order to pass the CSS as string to super it is necessary to access
5
- # the parsed HTML beforehand. To do so, the adapter needs to be
6
- # initialized. The ::Premailer::Adaptor handles the discovery of a
7
- # suitable adaptor (Nokogiri or Hpricot). To make load_html work, an
8
- # adaptor needs to be included and @options[:with_html_string] needs to be
9
- # set. For further information, refer to ::Premailer#initialize.
10
- @options = PremailerRails.config.merge(:with_html_string => true)
11
- ::Premailer.send(:include, Adapter.find(Adapter.use))
12
- doc = load_html(html)
13
-
14
- options = @options.merge(:css_string => CSSHelper.css_for_doc(doc))
15
- super(html, options)
16
- end
17
- end
18
- end
@@ -1,3 +0,0 @@
1
- module PremailerRails
2
- VERSION = '1.3.1'
3
- end
@@ -1 +0,0 @@
1
- module Hassle; end