roadie 2.3.3 → 2.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog.md +13 -1
- data/Gemfile.lock +67 -48
- data/Guardfile +4 -2
- data/README.md +3 -2
- data/gemfiles/rails-3.0.gemfile.lock +7 -4
- data/gemfiles/rails-3.1.gemfile.lock +5 -2
- data/gemfiles/rails-3.2.gemfile.lock +5 -2
- data/lib/roadie.rb +9 -0
- data/lib/roadie/action_mailer_extensions.rb +8 -2
- data/lib/roadie/inliner.rb +3 -1
- data/lib/roadie/railtie.rb +7 -2
- data/lib/roadie/version.rb +1 -1
- data/spec/integration_spec.rb +34 -11
- data/spec/lib/roadie/action_mailer_extensions_spec.rb +29 -1
- data/spec/lib/roadie/inliner_spec.rb +1 -1
- data/spec/lib/roadie_spec.rb +11 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/have_attribute_matcher.rb +1 -1
- data/spec/support/have_node_matcher.rb +19 -0
- data/spec/support/have_styling_matcher.rb +1 -1
- data/spec/support/parse_styling.rb +11 -3
- metadata +6 -4
data/Changelog.md
CHANGED
@@ -2,7 +2,19 @@
|
|
2
2
|
|
3
3
|
[full changelog](https://github.com/Mange/roadie/compare/v2.3.3...master)
|
4
4
|
|
5
|
-
*
|
5
|
+
* Nothing yet
|
6
|
+
|
7
|
+
### 2.3.4
|
8
|
+
|
9
|
+
[full changelog](https://github.com/Mange/roadie/compare/v2.3.3...v2.3.4)
|
10
|
+
|
11
|
+
* Enhancements:
|
12
|
+
* Add `config.roadie.enabled` that can be set to `false` to disable Roadie completely.
|
13
|
+
* Bug fixes:
|
14
|
+
* Proc objects to the `:css` option is now run in the context of the mailer instance, mirroring similar options from ActionMailer.
|
15
|
+
* Fix some tests that would always pass
|
16
|
+
* Improve JRuby compatibility
|
17
|
+
* Update Gemfile.lock and fix issues with newer gem versions
|
6
18
|
|
7
19
|
### 2.3.3
|
8
20
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
roadie (2.3.
|
4
|
+
roadie (2.3.4)
|
5
5
|
actionmailer (> 3.0.0, < 3.3.0)
|
6
6
|
css_parser
|
7
7
|
nokogiri (>= 1.4.4)
|
@@ -11,12 +11,12 @@ GEM
|
|
11
11
|
remote: http://rubygems.org/
|
12
12
|
specs:
|
13
13
|
abstract (1.0.0)
|
14
|
-
actionmailer (3.0.
|
15
|
-
actionpack (= 3.0.
|
14
|
+
actionmailer (3.0.17)
|
15
|
+
actionpack (= 3.0.17)
|
16
16
|
mail (~> 2.2.19)
|
17
|
-
actionpack (3.0.
|
18
|
-
activemodel (= 3.0.
|
19
|
-
activesupport (= 3.0.
|
17
|
+
actionpack (3.0.17)
|
18
|
+
activemodel (= 3.0.17)
|
19
|
+
activesupport (= 3.0.17)
|
20
20
|
builder (~> 2.1.2)
|
21
21
|
erubis (~> 2.6.6)
|
22
22
|
i18n (~> 0.5.0)
|
@@ -24,99 +24,118 @@ GEM
|
|
24
24
|
rack-mount (~> 0.6.14)
|
25
25
|
rack-test (~> 0.5.7)
|
26
26
|
tzinfo (~> 0.3.23)
|
27
|
-
activemodel (3.0.
|
28
|
-
activesupport (= 3.0.
|
27
|
+
activemodel (3.0.17)
|
28
|
+
activesupport (= 3.0.17)
|
29
29
|
builder (~> 2.1.2)
|
30
30
|
i18n (~> 0.5.0)
|
31
|
-
activerecord (3.0.
|
32
|
-
activemodel (= 3.0.
|
33
|
-
activesupport (= 3.0.
|
31
|
+
activerecord (3.0.17)
|
32
|
+
activemodel (= 3.0.17)
|
33
|
+
activesupport (= 3.0.17)
|
34
34
|
arel (~> 2.0.10)
|
35
35
|
tzinfo (~> 0.3.23)
|
36
|
-
activeresource (3.0.
|
37
|
-
activemodel (= 3.0.
|
38
|
-
activesupport (= 3.0.
|
39
|
-
activesupport (3.0.
|
36
|
+
activeresource (3.0.17)
|
37
|
+
activemodel (= 3.0.17)
|
38
|
+
activesupport (= 3.0.17)
|
39
|
+
activesupport (3.0.17)
|
40
40
|
addressable (2.3.2)
|
41
|
-
appraisal (0.
|
41
|
+
appraisal (0.5.0)
|
42
42
|
bundler
|
43
43
|
rake
|
44
44
|
arel (2.0.10)
|
45
45
|
builder (2.1.2)
|
46
|
+
coderay (1.0.8)
|
46
47
|
css_parser (1.2.6)
|
47
48
|
addressable
|
48
49
|
rdoc
|
49
50
|
diff-lcs (1.1.3)
|
50
51
|
erubis (2.6.6)
|
51
52
|
abstract (>= 1.0.0)
|
52
|
-
ffi (1.0.11)
|
53
53
|
growl (1.0.3)
|
54
|
-
guard (1.
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
guard (1.5.3)
|
55
|
+
listen (>= 0.4.2)
|
56
|
+
lumberjack (>= 1.0.2)
|
57
|
+
pry (>= 0.9.10)
|
58
|
+
thor (>= 0.14.6)
|
59
|
+
guard-rspec (2.1.1)
|
60
|
+
guard (>= 1.1)
|
61
|
+
rspec (~> 2.11)
|
59
62
|
hike (1.2.1)
|
60
63
|
i18n (0.5.0)
|
61
|
-
json (1.
|
64
|
+
json (1.7.5)
|
65
|
+
json (1.7.5-java)
|
66
|
+
listen (0.5.3)
|
67
|
+
lumberjack (1.0.2)
|
62
68
|
mail (2.2.19)
|
63
69
|
activesupport (>= 2.3.6)
|
64
70
|
i18n (>= 0.4.0)
|
65
71
|
mime-types (~> 1.16)
|
66
72
|
treetop (~> 1.4.8)
|
67
|
-
|
68
|
-
|
73
|
+
method_source (0.8.1)
|
74
|
+
mime-types (1.19)
|
75
|
+
multi_json (1.3.7)
|
69
76
|
nokogiri (1.5.5)
|
70
77
|
polyglot (0.3.3)
|
78
|
+
pry (0.9.10)
|
79
|
+
coderay (~> 1.0.5)
|
80
|
+
method_source (~> 0.8)
|
81
|
+
slop (~> 3.3.1)
|
82
|
+
pry (0.9.10-java)
|
83
|
+
coderay (~> 1.0.5)
|
84
|
+
method_source (~> 0.8)
|
85
|
+
slop (~> 3.3.1)
|
86
|
+
spoon (~> 0.0)
|
71
87
|
rack (1.2.5)
|
72
88
|
rack-mount (0.6.14)
|
73
89
|
rack (>= 1.0.0)
|
74
90
|
rack-test (0.5.7)
|
75
91
|
rack (>= 1.0)
|
76
|
-
rails (3.0.
|
77
|
-
actionmailer (= 3.0.
|
78
|
-
actionpack (= 3.0.
|
79
|
-
activerecord (= 3.0.
|
80
|
-
activeresource (= 3.0.
|
81
|
-
activesupport (= 3.0.
|
92
|
+
rails (3.0.17)
|
93
|
+
actionmailer (= 3.0.17)
|
94
|
+
actionpack (= 3.0.17)
|
95
|
+
activerecord (= 3.0.17)
|
96
|
+
activeresource (= 3.0.17)
|
97
|
+
activesupport (= 3.0.17)
|
82
98
|
bundler (~> 1.0)
|
83
|
-
railties (= 3.0.
|
84
|
-
railties (3.0.
|
85
|
-
actionpack (= 3.0.
|
86
|
-
activesupport (= 3.0.
|
99
|
+
railties (= 3.0.17)
|
100
|
+
railties (3.0.17)
|
101
|
+
actionpack (= 3.0.17)
|
102
|
+
activesupport (= 3.0.17)
|
87
103
|
rake (>= 0.8.7)
|
88
104
|
rdoc (~> 3.4)
|
89
105
|
thor (~> 0.14.4)
|
90
106
|
rake (0.9.2.2)
|
91
|
-
rb-fsevent (0.9.
|
107
|
+
rb-fsevent (0.9.2)
|
92
108
|
rdoc (3.12)
|
93
109
|
json (~> 1.4)
|
94
|
-
rspec (2.
|
95
|
-
rspec-core (~> 2.
|
96
|
-
rspec-expectations (~> 2.
|
97
|
-
rspec-mocks (~> 2.
|
98
|
-
rspec-core (2.
|
99
|
-
rspec-expectations (2.
|
110
|
+
rspec (2.11.0)
|
111
|
+
rspec-core (~> 2.11.0)
|
112
|
+
rspec-expectations (~> 2.11.0)
|
113
|
+
rspec-mocks (~> 2.11.0)
|
114
|
+
rspec-core (2.11.1)
|
115
|
+
rspec-expectations (2.11.3)
|
100
116
|
diff-lcs (~> 1.1.3)
|
101
|
-
rspec-mocks (2.
|
102
|
-
rspec-rails (2.
|
117
|
+
rspec-mocks (2.11.3)
|
118
|
+
rspec-rails (2.11.4)
|
103
119
|
actionpack (>= 3.0)
|
104
120
|
activesupport (>= 3.0)
|
105
121
|
railties (>= 3.0)
|
106
|
-
rspec (~> 2.
|
107
|
-
|
122
|
+
rspec (~> 2.11.0)
|
123
|
+
slop (3.3.3)
|
124
|
+
spoon (0.0.1)
|
125
|
+
sprockets (2.8.1)
|
108
126
|
hike (~> 1.2)
|
109
127
|
multi_json (~> 1.0)
|
110
128
|
rack (~> 1.0)
|
111
129
|
tilt (~> 1.1, != 1.3.0)
|
112
130
|
thor (0.14.6)
|
113
131
|
tilt (1.3.3)
|
114
|
-
treetop (1.4.
|
132
|
+
treetop (1.4.12)
|
115
133
|
polyglot
|
116
134
|
polyglot (>= 0.3.1)
|
117
|
-
tzinfo (0.3.
|
135
|
+
tzinfo (0.3.35)
|
118
136
|
|
119
137
|
PLATFORMS
|
138
|
+
java
|
120
139
|
ruby
|
121
140
|
|
122
141
|
DEPENDENCIES
|
data/Guardfile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
guard 'rspec', :
|
1
|
+
guard 'rspec', :rvm => ['1.9.3', 'jruby-head', 'ruby-1.8.7-p358'] do
|
2
2
|
watch(%r{^spec/.+_spec\.rb$})
|
3
3
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
4
|
-
|
4
|
+
|
5
|
+
watch(%r{spec/support/.*\.rb}) { "spec" }
|
6
|
+
watch('spec/spec_helper.rb') { "spec" }
|
5
7
|
end
|
6
8
|
|
data/README.md
CHANGED
@@ -70,8 +70,9 @@ Configuring
|
|
70
70
|
|
71
71
|
Roadie listens to the following options (set in `Application.rb` or in your environment's configuration files:
|
72
72
|
|
73
|
-
* `config.
|
74
|
-
* `config.
|
73
|
+
* `config.roadie.enabled` - Set this to `false` to disable Roadie from working on your emails. Useful if you want to disable Roadie in some environments.
|
74
|
+
* `config.action_mailer.default_url_options` - Used for making URLs absolute.
|
75
|
+
* `config.assets.enabled` - If the asset pipeline is turned off, Roadie will default to searching for assets in `public/stylesheets`.
|
75
76
|
* `config.roadie.provider` - Set the provider manually, ignoring all other options. Use for advanced cases, or when you have non-default paths or other options.
|
76
77
|
|
77
78
|
Usage
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mange/Projects/roadie
|
3
3
|
specs:
|
4
|
-
roadie (2.3.
|
4
|
+
roadie (2.3.3)
|
5
5
|
actionmailer (> 3.0.0, < 3.3.0)
|
6
6
|
css_parser
|
7
7
|
nokogiri (>= 1.4.4)
|
@@ -37,7 +37,7 @@ GEM
|
|
37
37
|
activemodel (= 3.0.12)
|
38
38
|
activesupport (= 3.0.12)
|
39
39
|
activesupport (3.0.12)
|
40
|
-
addressable (2.2
|
40
|
+
addressable (2.3.2)
|
41
41
|
appraisal (0.4.1)
|
42
42
|
bundler
|
43
43
|
rake
|
@@ -52,14 +52,16 @@ GEM
|
|
52
52
|
hike (1.2.1)
|
53
53
|
i18n (0.5.0)
|
54
54
|
json (1.6.5)
|
55
|
+
json (1.6.5-java)
|
55
56
|
mail (2.2.19)
|
56
57
|
activesupport (>= 2.3.6)
|
57
58
|
i18n (>= 0.4.0)
|
58
59
|
mime-types (~> 1.16)
|
59
60
|
treetop (~> 1.4.8)
|
60
61
|
mime-types (1.18)
|
61
|
-
multi_json (1.
|
62
|
-
nokogiri (1.5.
|
62
|
+
multi_json (1.3.7)
|
63
|
+
nokogiri (1.5.5)
|
64
|
+
nokogiri (1.5.5-java)
|
63
65
|
polyglot (0.3.3)
|
64
66
|
rack (1.2.5)
|
65
67
|
rack-mount (0.6.14)
|
@@ -109,6 +111,7 @@ GEM
|
|
109
111
|
tzinfo (0.3.32)
|
110
112
|
|
111
113
|
PLATFORMS
|
114
|
+
java
|
112
115
|
ruby
|
113
116
|
|
114
117
|
DEPENDENCIES
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mange/Projects/roadie
|
3
3
|
specs:
|
4
|
-
roadie (2.3.
|
4
|
+
roadie (2.3.3)
|
5
5
|
actionmailer (> 3.0.0, < 3.3.0)
|
6
6
|
css_parser
|
7
7
|
nokogiri (>= 1.4.4)
|
@@ -38,7 +38,7 @@ GEM
|
|
38
38
|
activesupport (= 3.1.4)
|
39
39
|
activesupport (3.1.4)
|
40
40
|
multi_json (~> 1.0)
|
41
|
-
addressable (2.2
|
41
|
+
addressable (2.3.2)
|
42
42
|
appraisal (0.4.1)
|
43
43
|
bundler
|
44
44
|
rake
|
@@ -52,6 +52,7 @@ GEM
|
|
52
52
|
hike (1.2.1)
|
53
53
|
i18n (0.6.0)
|
54
54
|
json (1.6.5)
|
55
|
+
json (1.6.5-java)
|
55
56
|
mail (2.3.3)
|
56
57
|
i18n (>= 0.4.0)
|
57
58
|
mime-types (~> 1.16)
|
@@ -59,6 +60,7 @@ GEM
|
|
59
60
|
mime-types (1.18)
|
60
61
|
multi_json (1.1.0)
|
61
62
|
nokogiri (1.5.5)
|
63
|
+
nokogiri (1.5.5-java)
|
62
64
|
polyglot (0.3.3)
|
63
65
|
rack (1.3.6)
|
64
66
|
rack-cache (1.2)
|
@@ -112,6 +114,7 @@ GEM
|
|
112
114
|
tzinfo (0.3.32)
|
113
115
|
|
114
116
|
PLATFORMS
|
117
|
+
java
|
115
118
|
ruby
|
116
119
|
|
117
120
|
DEPENDENCIES
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mange/Projects/roadie
|
3
3
|
specs:
|
4
|
-
roadie (2.3.
|
4
|
+
roadie (2.3.3)
|
5
5
|
actionmailer (> 3.0.0, < 3.3.0)
|
6
6
|
css_parser
|
7
7
|
nokogiri (>= 1.4.4)
|
@@ -37,7 +37,7 @@ GEM
|
|
37
37
|
activesupport (3.2.2)
|
38
38
|
i18n (~> 0.6)
|
39
39
|
multi_json (~> 1.0)
|
40
|
-
addressable (2.2
|
40
|
+
addressable (2.3.2)
|
41
41
|
appraisal (0.4.1)
|
42
42
|
bundler
|
43
43
|
rake
|
@@ -52,6 +52,7 @@ GEM
|
|
52
52
|
i18n (0.6.0)
|
53
53
|
journey (1.0.3)
|
54
54
|
json (1.6.5)
|
55
|
+
json (1.6.5-java)
|
55
56
|
mail (2.4.4)
|
56
57
|
i18n (>= 0.4.0)
|
57
58
|
mime-types (~> 1.16)
|
@@ -59,6 +60,7 @@ GEM
|
|
59
60
|
mime-types (1.18)
|
60
61
|
multi_json (1.1.0)
|
61
62
|
nokogiri (1.5.5)
|
63
|
+
nokogiri (1.5.5-java)
|
62
64
|
polyglot (0.3.3)
|
63
65
|
rack (1.4.1)
|
64
66
|
rack-cache (1.2)
|
@@ -110,6 +112,7 @@ GEM
|
|
110
112
|
tzinfo (0.3.32)
|
111
113
|
|
112
114
|
PLATFORMS
|
115
|
+
java
|
113
116
|
ruby
|
114
117
|
|
115
118
|
DEPENDENCIES
|
data/lib/roadie.rb
CHANGED
@@ -16,6 +16,15 @@ module Roadie
|
|
16
16
|
[AssetPipelineProvider, FilesystemProvider]
|
17
17
|
end
|
18
18
|
|
19
|
+
# Returns the value of +config.roadie.enabled+.
|
20
|
+
#
|
21
|
+
# Roadie will disable all processing if this config is set to +false+. If
|
22
|
+
# you just want to disable CSS inlining without disabling the rest of
|
23
|
+
# Roadie, pass +css: nil+ to the +defaults+ method inside your mailers.
|
24
|
+
def enabled?
|
25
|
+
config.roadie.enabled
|
26
|
+
end
|
27
|
+
|
19
28
|
# Returns the active provider
|
20
29
|
#
|
21
30
|
# If no provider has been configured a new provider will be instantiated
|
@@ -29,7 +29,11 @@ module Roadie
|
|
29
29
|
|
30
30
|
def collect_responses_and_parts_order_with_inline_styles(headers, &block)
|
31
31
|
responses, order = collect_responses_and_parts_order_without_inline_styles(headers, &block)
|
32
|
-
|
32
|
+
if Roadie.enabled?
|
33
|
+
[responses.map { |response| inline_style_response(response) }, order]
|
34
|
+
else
|
35
|
+
[responses, order]
|
36
|
+
end
|
33
37
|
end
|
34
38
|
|
35
39
|
private
|
@@ -50,7 +54,9 @@ module Roadie
|
|
50
54
|
end
|
51
55
|
|
52
56
|
def resolve_target(target)
|
53
|
-
if target.respond_to? :
|
57
|
+
if target.respond_to? :bind
|
58
|
+
target.bind(self).call
|
59
|
+
elsif target.respond_to? :call
|
54
60
|
target.call
|
55
61
|
else
|
56
62
|
target
|
data/lib/roadie/inliner.rb
CHANGED
@@ -11,7 +11,9 @@ module Roadie
|
|
11
11
|
# inside the parenthesis. There's much room for improvement, of course.
|
12
12
|
CSS_URL_REGEXP = %r{
|
13
13
|
url\(
|
14
|
-
(
|
14
|
+
(
|
15
|
+
(?:["']|%22)? # Optional opening quote
|
16
|
+
)
|
15
17
|
(
|
16
18
|
[^(]* # Text leading up to before opening parens
|
17
19
|
(?:\([^)]*\))* # Texts containing parens pairs
|
data/lib/roadie/railtie.rb
CHANGED
@@ -4,16 +4,21 @@ require 'roadie/action_mailer_extensions'
|
|
4
4
|
|
5
5
|
module Roadie
|
6
6
|
# {Roadie::Railtie} registers {Roadie} with the current Rails application
|
7
|
-
# It adds
|
7
|
+
# It adds configuration options:
|
8
|
+
#
|
9
|
+
# config.roadie.enabled = true
|
10
|
+
# Set this to false to disable Roadie completely. This could be useful if
|
11
|
+
# you don't want Roadie in certain environments.
|
8
12
|
#
|
9
13
|
# config.roadie.provider = nil
|
14
|
+
# You can use this to set a provider yourself. See {Roadie::AssetProvider}.
|
10
15
|
#
|
11
|
-
# You can use this to set a provider yourself.
|
12
16
|
#
|
13
17
|
# @see Roadie
|
14
18
|
# @see AssetProvider
|
15
19
|
class Railtie < Rails::Railtie
|
16
20
|
config.roadie = ActiveSupport::OrderedOptions.new
|
21
|
+
config.roadie.enabled = true
|
17
22
|
config.roadie.provider = nil
|
18
23
|
|
19
24
|
initializer "roadie.extend_action_mailer" do
|
data/lib/roadie/version.rb
CHANGED
data/spec/integration_spec.rb
CHANGED
@@ -25,6 +25,10 @@ module Roadie
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
def parse_html_in_email(mail)
|
29
|
+
Nokogiri::HTML.parse mail.html_part.body.decoded
|
30
|
+
end
|
31
|
+
|
28
32
|
before(:each) do
|
29
33
|
change_default_url_options(:host => 'example.app.org')
|
30
34
|
mailer.delivery_method = :test
|
@@ -37,17 +41,16 @@ module Roadie
|
|
37
41
|
email.from.should == ['john@example.com']
|
38
42
|
email.should have(2).parts
|
39
43
|
|
40
|
-
email.
|
41
|
-
document = Nokogiri::HTML.parse(html_part.body.decoded)
|
42
|
-
document.should have_selector('html > head + body')
|
43
|
-
document.should have_selector('body #message h1')
|
44
|
-
document.should have_styling('background' => 'url(https://example.app.org/images/dots.png) repeat-x').at_selector('body')
|
45
|
-
document.should have_selector('strong[contains("quota")]')
|
46
|
-
end
|
44
|
+
email.text_part.body.decoded.should_not match(/<.*>/)
|
47
45
|
|
48
|
-
email.
|
49
|
-
|
50
|
-
|
46
|
+
html = email.html_part.body.decoded
|
47
|
+
html.should include '<!DOCTYPE'
|
48
|
+
html.should include '<head'
|
49
|
+
|
50
|
+
document = parse_html_in_email(email)
|
51
|
+
document.should have_selector('body #message h1')
|
52
|
+
document.should have_styling('background' => 'url(https://example.app.org/images/dots.png) repeat-x').at_selector('body')
|
53
|
+
document.should have_selector('strong[contains("quota")]')
|
51
54
|
|
52
55
|
# If we deliver mails we can catch weird problems with headers being invalid
|
53
56
|
email.deliver
|
@@ -65,12 +68,32 @@ module Roadie
|
|
65
68
|
|
66
69
|
it "applies CSS3 styles" do
|
67
70
|
email = mailer.notification('doe@example.com', 'your quota limit has been reached')
|
68
|
-
document =
|
71
|
+
document = parse_html_in_email(email)
|
69
72
|
strong_node = document.css('strong').first
|
70
73
|
stylings = SpecHelpers.styling_of_node(strong_node)
|
71
74
|
stylings.should include(['box-shadow', '#62b0d7 1px 1px 1px 1px inset, #aaaaaa 1px 1px 3px 0'])
|
72
75
|
stylings.should include(['-o-box-shadow', '#62b0d7 1px 1px 1px 1px inset, #aaaaaa 1px 1px 3px 0'])
|
73
76
|
end
|
77
|
+
|
78
|
+
it "only removes the css option when disabled" do
|
79
|
+
Rails.application.config.roadie.enabled = false
|
80
|
+
|
81
|
+
email = mailer.notification('doe@example.com', 'your quota limit has been reached')
|
82
|
+
|
83
|
+
email.header.fields.map(&:name).should_not include('css')
|
84
|
+
|
85
|
+
email.to.should == ['doe@example.com']
|
86
|
+
email.from.should == ['john@example.com']
|
87
|
+
email.should have(2).parts
|
88
|
+
|
89
|
+
html = email.html_part.body.decoded
|
90
|
+
html.should_not include '<!DOCTYPE'
|
91
|
+
html.should_not include '<head'
|
92
|
+
|
93
|
+
document = parse_html_in_email(email)
|
94
|
+
document.should_not have_styling('color' => '#eee').at_selector('h1')
|
95
|
+
document.should_not have_styling('background' => 'url(https://example.app.org/images/dots.png) repeat-x').at_selector('body')
|
96
|
+
end
|
74
97
|
end
|
75
98
|
|
76
99
|
describe "filesystem integration" do
|
@@ -41,11 +41,25 @@ module Roadie
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it "allows procs defining the CSS files to use" do
|
44
|
-
expect_global_css ['from proc']
|
45
44
|
proc = lambda { 'from proc' }
|
45
|
+
|
46
|
+
expect_global_css ['from proc']
|
46
47
|
mailer.override_css([proc])
|
47
48
|
end
|
48
49
|
|
50
|
+
it "runs procs in the context of the instance" do
|
51
|
+
new_mailer = Class.new(mailer) do
|
52
|
+
private
|
53
|
+
def a_private_method
|
54
|
+
'from private method'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
proc = lambda { a_private_method }
|
58
|
+
|
59
|
+
expect_global_css ['from private method']
|
60
|
+
new_mailer.override_css([proc])
|
61
|
+
end
|
62
|
+
|
49
63
|
it "uses no global CSS when :css is set to nil" do
|
50
64
|
expect_global_css []
|
51
65
|
mailer.override_css(nil)
|
@@ -105,6 +119,12 @@ module Roadie
|
|
105
119
|
Roadie.should_receive(:inline_css).with(provider, ['simple'], 'Hello HTML', anything).and_return('html')
|
106
120
|
mailer.singlepart_html.body.decoded.should == 'html'
|
107
121
|
end
|
122
|
+
|
123
|
+
it "does not inline css when Roadie is disabled" do
|
124
|
+
Roadie.stub :enabled? => false
|
125
|
+
Roadie.should_not_receive(:inline_css)
|
126
|
+
mailer.singlepart_html.body.decoded.should == 'Hello HTML'
|
127
|
+
end
|
108
128
|
end
|
109
129
|
|
110
130
|
describe "for multipart" do
|
@@ -118,6 +138,14 @@ module Roadie
|
|
118
138
|
email.html_part.body.decoded.should == 'html'
|
119
139
|
email.text_part.body.decoded.should == 'Hello Text'
|
120
140
|
end
|
141
|
+
|
142
|
+
it "does not inline css when Roadie is disabled" do
|
143
|
+
Roadie.stub :enabled? => false
|
144
|
+
Roadie.should_not_receive(:inline_css)
|
145
|
+
email = mailer.multipart
|
146
|
+
email.html_part.body.decoded.should == 'Hello HTML'
|
147
|
+
email.text_part.body.decoded.should == 'Hello Text'
|
148
|
+
end
|
121
149
|
end
|
122
150
|
end
|
123
151
|
end
|
@@ -446,7 +446,7 @@ describe Roadie::Inliner do
|
|
446
446
|
end
|
447
447
|
|
448
448
|
it "sets xmlns of <html> to that of XHTML" do
|
449
|
-
rendering('<html><body></body></html>').should
|
449
|
+
rendering('<html><body></body></html>').should have_node('html').with_attributes("xmlns" => "http://www.w3.org/1999/xhtml")
|
450
450
|
end
|
451
451
|
|
452
452
|
it "inserts basic html structure if not present" do
|
data/spec/lib/roadie_spec.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Roadie do
|
4
|
+
let(:config) { Rails.application.config }
|
5
|
+
|
4
6
|
describe ".inline_css" do
|
5
7
|
it "creates an instance of Roadie::Inliner and execute it" do
|
6
8
|
Roadie::Inliner.should_receive(:new).with('attri', 'butes').and_return(double('inliner', :execute => 'html'))
|
@@ -22,9 +24,17 @@ describe Roadie do
|
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
27
|
+
describe ".enabled?" do
|
28
|
+
it "returns the value of config.roadie.enabled" do
|
29
|
+
config.roadie.stub :enabled => true
|
30
|
+
Roadie.should be_enabled
|
31
|
+
config.roadie.stub :enabled => false
|
32
|
+
Roadie.should_not be_enabled
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
25
36
|
describe ".current_provider" do
|
26
37
|
let(:provider) { double("provider instance") }
|
27
|
-
let(:config) { Roadie.app.config }
|
28
38
|
|
29
39
|
context "with a set provider in the config" do
|
30
40
|
it "uses the set provider" do
|
data/spec/spec_helper.rb
CHANGED
@@ -40,7 +40,7 @@ class TestApplication < Rails::Application
|
|
40
40
|
@config = OpenStruct.new({
|
41
41
|
:action_mailer => OpenStruct.new(:default_url_options => {}),
|
42
42
|
:assets => OpenStruct.new(:enabled => false),
|
43
|
-
:roadie => OpenStruct.new(:provider => nil),
|
43
|
+
:roadie => OpenStruct.new(:provider => nil, :enabled => true),
|
44
44
|
})
|
45
45
|
change_default_url_options(:host => "example.com")
|
46
46
|
end
|
@@ -10,7 +10,7 @@ RSpec::Matchers.define :have_attribute do |attribute|
|
|
10
10
|
expected == attribute(document, name)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
description { "have attribute #{attribute.inspect} at selector #{@selector.inspect}" }
|
14
14
|
failure_message_for_should do |document|
|
15
15
|
name, expected = attribute.first
|
16
16
|
"expected #{name} attribute at #{@selector.inspect} to be #{expected.inspect} but was #{attribute(document, name).inspect}"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
RSpec::Matchers.define :have_node do |selector|
|
2
|
+
chain(:with_attributes) { |attributes| @attributes = attributes }
|
3
|
+
match do |document|
|
4
|
+
node = document.at_css(selector)
|
5
|
+
if @attributes
|
6
|
+
node.present? and match_attributes(node.attributes)
|
7
|
+
else
|
8
|
+
node.present?
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
failure_message_for_should { "expected document to #{name_to_sentence}#{expected_to_sentence}"}
|
13
|
+
failure_message_for_should_not { "expected document to not #{name_to_sentence}#{expected_to_sentence}"}
|
14
|
+
|
15
|
+
def match_attributes(node_attributes)
|
16
|
+
attributes = Hash[node_attributes.map { |name, attribute| [name, attribute.value] }]
|
17
|
+
@attributes == attributes
|
18
|
+
end
|
19
|
+
end
|
@@ -13,7 +13,7 @@ RSpec::Matchers.define :have_styling do |rules|
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
description { "have styles #{rules.inspect} at selector #{@selector.inspect}" }
|
17
17
|
failure_message_for_should { |document| "expected styles at #{@selector.inspect} to be #{rules.inspect} but was #{parsed_styles(document).inspect}" }
|
18
18
|
failure_message_for_should_not { "expected styles at #{@selector.inspect} to not be #{rules.inspect}" }
|
19
19
|
|
@@ -9,9 +9,17 @@ module SpecHelpers
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def parse_styling(styles)
|
12
|
-
styles.split(';').
|
13
|
-
array << item.split(':', 2).map(&:strip)
|
14
|
-
end
|
12
|
+
styles.split(';').map { |style| parse_style(style) }
|
15
13
|
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def parse_style(style)
|
17
|
+
rule, value = style.split(':', 2).map(&:strip)
|
18
|
+
[rule, normalize_escaped_quotes(value)]
|
19
|
+
end
|
20
|
+
|
21
|
+
def normalize_escaped_quotes(string)
|
22
|
+
string.gsub('%22', '"')
|
23
|
+
end
|
16
24
|
end
|
17
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roadie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -189,6 +189,7 @@ files:
|
|
189
189
|
- spec/support/anonymous_mailer.rb
|
190
190
|
- spec/support/change_url_options.rb
|
191
191
|
- spec/support/have_attribute_matcher.rb
|
192
|
+
- spec/support/have_node_matcher.rb
|
192
193
|
- spec/support/have_selector_matcher.rb
|
193
194
|
- spec/support/have_styling_matcher.rb
|
194
195
|
- spec/support/parse_styling.rb
|
@@ -206,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
207
|
version: '0'
|
207
208
|
segments:
|
208
209
|
- 0
|
209
|
-
hash:
|
210
|
+
hash: -214488827015921512
|
210
211
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
212
|
none: false
|
212
213
|
requirements:
|
@@ -215,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
216
|
version: '0'
|
216
217
|
segments:
|
217
218
|
- 0
|
218
|
-
hash:
|
219
|
+
hash: -214488827015921512
|
219
220
|
requirements: []
|
220
221
|
rubyforge_project:
|
221
222
|
rubygems_version: 1.8.24
|
@@ -241,6 +242,7 @@ test_files:
|
|
241
242
|
- spec/support/anonymous_mailer.rb
|
242
243
|
- spec/support/change_url_options.rb
|
243
244
|
- spec/support/have_attribute_matcher.rb
|
245
|
+
- spec/support/have_node_matcher.rb
|
244
246
|
- spec/support/have_selector_matcher.rb
|
245
247
|
- spec/support/have_styling_matcher.rb
|
246
248
|
- spec/support/parse_styling.rb
|