slimmer 3.7.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/slimmer.rb +1 -0
- data/lib/slimmer/headers.rb +7 -5
- data/lib/slimmer/processors/campaign_notification_inserter.rb +27 -0
- data/lib/slimmer/processors/meta_viewport_remover.rb +1 -1
- data/lib/slimmer/skin.rb +1 -0
- data/lib/slimmer/test.rb +2 -0
- data/lib/slimmer/version.rb +1 -1
- data/test/fixtures/campaign.html.erb +1 -0
- data/test/headers_test.rb +9 -0
- data/test/processors/campaign_notification_inserter_test.rb +49 -0
- data/test/test_helper.rb +1 -0
- data/test/typical_usage_test.rb +17 -0
- metadata +9 -4
data/lib/slimmer.rb
CHANGED
@@ -29,6 +29,7 @@ module Slimmer
|
|
29
29
|
autoload :BodyClassCopier, 'slimmer/processors/body_class_copier'
|
30
30
|
autoload :BodyInserter, 'slimmer/processors/body_inserter'
|
31
31
|
autoload :ConditionalCommentMover, 'slimmer/processors/conditional_comment_mover'
|
32
|
+
autoload :CampaignNotificationInserter, 'slimmer/processors/campaign_notification_inserter'
|
32
33
|
autoload :FooterRemover, 'slimmer/processors/footer_remover'
|
33
34
|
autoload :GoogleAnalyticsConfigurator, 'slimmer/processors/google_analytics_configurator'
|
34
35
|
autoload :HeaderContextInserter, 'slimmer/processors/header_context_inserter'
|
data/lib/slimmer/headers.rb
CHANGED
@@ -5,6 +5,7 @@ module Slimmer
|
|
5
5
|
HEADER_PREFIX = "X-Slimmer"
|
6
6
|
|
7
7
|
SLIMMER_HEADER_MAPPING = {
|
8
|
+
campaign_notification:"Campaign-Notification",
|
8
9
|
format: "Format",
|
9
10
|
need_id: "Need-ID",
|
10
11
|
proposition: "Proposition",
|
@@ -16,13 +17,14 @@ module Slimmer
|
|
16
17
|
}
|
17
18
|
|
18
19
|
ARTEFACT_HEADER = "#{HEADER_PREFIX}-Artefact"
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
CAMPAIGN_NOTIFICATION = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:campaign_notification]}"
|
21
|
+
FORMAT_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:format]}"
|
22
|
+
REMOVE_META_VIEWPORT = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:remove_meta_viewport]}"
|
23
|
+
RESULT_COUNT_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:result_count]}"
|
22
24
|
SEARCH_INDEX_HEADER = "#{HEADER_PREFIX}-Search-Index"
|
23
25
|
SEARCH_PATH_HEADER = "#{HEADER_PREFIX}-Search-Path"
|
24
|
-
SKIP_HEADER = "#{HEADER_PREFIX}
|
25
|
-
TEMPLATE_HEADER = "#{HEADER_PREFIX}
|
26
|
+
SKIP_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:skip]}"
|
27
|
+
TEMPLATE_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:template]}"
|
26
28
|
|
27
29
|
def set_slimmer_headers(hash)
|
28
30
|
raise InvalidHeader if (hash.keys - SLIMMER_HEADER_MAPPING.keys).any?
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Slimmer::Processors
|
2
|
+
class CampaignNotificationInserter
|
3
|
+
def initialize(skin, headers)
|
4
|
+
@headers = headers
|
5
|
+
@skin = skin
|
6
|
+
@old_campaign_selector = ".main-campaign"
|
7
|
+
@new_campaign_selector = "#campaign-notification"
|
8
|
+
end
|
9
|
+
|
10
|
+
def filter(content_document, page_template)
|
11
|
+
if @headers[Slimmer::Headers::CAMPAIGN_NOTIFICATION] == "true" &&
|
12
|
+
old_campaign = page_template.at_css(@old_campaign_selector)
|
13
|
+
new_campaign_block = campaign_notification_block
|
14
|
+
if new_campaign_block.at_css(@new_campaign_selector)
|
15
|
+
old_campaign.replace(new_campaign_block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def campaign_notification_block
|
23
|
+
html = @skin.template('campaign')
|
24
|
+
Nokogiri::HTML.fragment(html)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -5,7 +5,7 @@ module Slimmer::Processors
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def filter(src, dest)
|
8
|
-
if @response.headers[
|
8
|
+
if @response.headers[Slimmer::Headers::REMOVE_META_VIEWPORT] == "true"
|
9
9
|
dest.at_xpath('//head//meta[@name="viewport"]').remove
|
10
10
|
end
|
11
11
|
end
|
data/lib/slimmer/skin.rb
CHANGED
@@ -141,6 +141,7 @@ module Slimmer
|
|
141
141
|
Processors::ReportAProblemInserter.new(self, source_request.url),
|
142
142
|
Processors::SearchIndexSetter.new(response),
|
143
143
|
Processors::MetaViewportRemover.new(response),
|
144
|
+
Processors::CampaignNotificationInserter.new(self, response.headers),
|
144
145
|
]
|
145
146
|
|
146
147
|
template_name = response.headers[Headers::TEMPLATE_HEADER] || 'wrapper'
|
data/lib/slimmer/test.rb
CHANGED
@@ -7,6 +7,8 @@ module Slimmer
|
|
7
7
|
logger.debug "Slimmer: TEST MODE - Loading fixture template from #{__FILE__}"
|
8
8
|
if name =~ /\A(.*)\.raw\z/
|
9
9
|
%{<div id="test-#{$1}"></div>}
|
10
|
+
elsif name == "campaign"
|
11
|
+
'<section class="black" id="campaign-notification"><div><p>Notifications!</p></div></section>'
|
10
12
|
else
|
11
13
|
Slimmer::TestTemplate::TEMPLATE
|
12
14
|
end
|
data/lib/slimmer/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
<section id="campaign-notification"><p>testing...</p></section>
|
data/test/headers_test.rb
CHANGED
@@ -63,6 +63,15 @@ class HeadersTest < MiniTest::Unit::TestCase
|
|
63
63
|
set_slimmer_headers remove_meta_viewport: true
|
64
64
|
assert_equal "true", headers["X-Slimmer-Remove-Meta-Viewport"]
|
65
65
|
end
|
66
|
+
|
67
|
+
def test_should_not_have_campaign_notification_set
|
68
|
+
assert_equal nil, headers["X-Slimmer-Campaign-Notification"]
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_should_set_campaign_notification_header
|
72
|
+
set_slimmer_headers campaign_notification: true
|
73
|
+
assert_equal "true", headers["X-Slimmer-Campaign-Notification"]
|
74
|
+
end
|
66
75
|
end
|
67
76
|
|
68
77
|
describe Slimmer::Headers do
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class CampaignNotificationInserterTest < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@skin = stub("Skin", :template => nil)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_not_replace_campaign_if_header_not_set
|
9
|
+
@skin.expects(:template).with("campaign").never
|
10
|
+
campaign_inserter = Slimmer::Processors::CampaignNotificationInserter.new(@skin, {})
|
11
|
+
|
12
|
+
source = as_nokogiri %{
|
13
|
+
<html>
|
14
|
+
<body>
|
15
|
+
<section class="main-campaign group"><a href="/tour">A tour!</a></section>
|
16
|
+
</body>
|
17
|
+
</html>
|
18
|
+
}
|
19
|
+
expected = as_nokogiri %{
|
20
|
+
<html>
|
21
|
+
<body>
|
22
|
+
<section class="main-campaign group"><a href="/tour">A tour!</a></section>
|
23
|
+
</body>
|
24
|
+
</html>
|
25
|
+
}
|
26
|
+
|
27
|
+
campaign_inserter.filter(:any_source, source)
|
28
|
+
assert_equal expected.to_html, source.to_html
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_should_replace_campaign_with_notification_if_header_set
|
32
|
+
campaign = '<section id="campaign-notification"><p>testing...</p></section>'
|
33
|
+
@skin.expects(:template).with('campaign').returns(campaign)
|
34
|
+
|
35
|
+
headers = {Slimmer::Headers::CAMPAIGN_NOTIFICATION => "true"}
|
36
|
+
campaign_inserter = Slimmer::Processors::CampaignNotificationInserter.new(@skin, headers)
|
37
|
+
|
38
|
+
source = as_nokogiri %{
|
39
|
+
<html><body><section class="main-campaign group"><a href="/tour">A tour!</a></section></body></html>
|
40
|
+
}
|
41
|
+
|
42
|
+
expected = as_nokogiri %{
|
43
|
+
<html><body><section id="campaign-notification"><p>testing...</p></section></body></html>
|
44
|
+
}
|
45
|
+
|
46
|
+
campaign_inserter.filter(:any_source, source)
|
47
|
+
assert_equal expected.to_html.gsub(/\n/," ").strip, source.to_html.gsub(/\n/," ").strip
|
48
|
+
end
|
49
|
+
end
|
data/test/test_helper.rb
CHANGED
data/test/typical_usage_test.rb
CHANGED
@@ -370,4 +370,21 @@ module TypicalUsage
|
|
370
370
|
assert_equal "Something else", last_response.headers["X-Custom-Header"]
|
371
371
|
end
|
372
372
|
end
|
373
|
+
|
374
|
+
class CampaignNotificationInserterTest < SlimmerIntegrationTest
|
375
|
+
def test_should_update_the_campaign_with_a_notification
|
376
|
+
given_response 200, %{
|
377
|
+
<html>
|
378
|
+
<body>
|
379
|
+
<div id="wrapper">
|
380
|
+
<section class="main-campaign group"><a href="/tour">A tour!</a></section>
|
381
|
+
</div>
|
382
|
+
</body>
|
383
|
+
</html>
|
384
|
+
},
|
385
|
+
{Slimmer::Headers::CAMPAIGN_NOTIFICATION => "true"}
|
386
|
+
|
387
|
+
assert_rendered_in_template "#campaign-notification", "<p>testing...</p>"
|
388
|
+
end
|
389
|
+
end
|
373
390
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 3.
|
5
|
+
version: 3.8.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ben Griffiths
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2012-10-
|
14
|
+
date: 2012-10-15 00:00:00 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: nokogiri
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- lib/slimmer/processors/admin_title_inserter.rb
|
203
203
|
- lib/slimmer/processors/report_a_problem_inserter.rb
|
204
204
|
- lib/slimmer/processors/meta_viewport_remover.rb
|
205
|
+
- lib/slimmer/processors/campaign_notification_inserter.rb
|
205
206
|
- lib/slimmer/processors/section_inserter.rb
|
206
207
|
- lib/slimmer/processors/footer_remover.rb
|
207
208
|
- lib/slimmer/headers.rb
|
@@ -211,11 +212,13 @@ files:
|
|
211
212
|
- test/headers_test.rb
|
212
213
|
- test/artefact_test.rb
|
213
214
|
- test/fixtures/related.raw.html.erb
|
215
|
+
- test/fixtures/campaign.html.erb
|
214
216
|
- test/fixtures/500.html.erb
|
215
217
|
- test/fixtures/404.html.erb
|
216
218
|
- test/fixtures/wrapper.html.erb
|
217
219
|
- test/fixtures/report_a_problem.raw.html.erb
|
218
220
|
- test/skin_test.rb
|
221
|
+
- test/processors/campaign_notification_inserter_test.rb
|
219
222
|
- test/processors/meta_viewport_remover_test.rb
|
220
223
|
- test/processors/logo_class_inserter_test.rb
|
221
224
|
- test/processors/search_index_setter_test.rb
|
@@ -243,7 +246,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
246
|
requirements:
|
244
247
|
- - ">="
|
245
248
|
- !ruby/object:Gem::Version
|
246
|
-
hash:
|
249
|
+
hash: 4023505413084510363
|
247
250
|
segments:
|
248
251
|
- 0
|
249
252
|
version: "0"
|
@@ -252,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
255
|
requirements:
|
253
256
|
- - ">="
|
254
257
|
- !ruby/object:Gem::Version
|
255
|
-
hash:
|
258
|
+
hash: 4023505413084510363
|
256
259
|
segments:
|
257
260
|
- 0
|
258
261
|
version: "0"
|
@@ -267,11 +270,13 @@ test_files:
|
|
267
270
|
- test/headers_test.rb
|
268
271
|
- test/artefact_test.rb
|
269
272
|
- test/fixtures/related.raw.html.erb
|
273
|
+
- test/fixtures/campaign.html.erb
|
270
274
|
- test/fixtures/500.html.erb
|
271
275
|
- test/fixtures/404.html.erb
|
272
276
|
- test/fixtures/wrapper.html.erb
|
273
277
|
- test/fixtures/report_a_problem.raw.html.erb
|
274
278
|
- test/skin_test.rb
|
279
|
+
- test/processors/campaign_notification_inserter_test.rb
|
275
280
|
- test/processors/meta_viewport_remover_test.rb
|
276
281
|
- test/processors/logo_class_inserter_test.rb
|
277
282
|
- test/processors/search_index_setter_test.rb
|