slimmer 1.2.5 → 2.0.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.md +14 -1
- data/lib/slimmer.rb +28 -17
- data/lib/slimmer/app.rb +9 -9
- data/lib/slimmer/headers.rb +32 -1
- data/lib/slimmer/{admin_title_inserter.rb → processors/admin_title_inserter.rb} +1 -1
- data/lib/slimmer/{body_class_copier.rb → processors/body_class_copier.rb} +1 -1
- data/lib/slimmer/{body_inserter.rb → processors/body_inserter.rb} +1 -1
- data/lib/slimmer/{conditional_comment_mover.rb → processors/conditional_comment_mover.rb} +1 -1
- data/lib/slimmer/{footer_remover.rb → processors/footer_remover.rb} +1 -1
- data/lib/slimmer/{google_analytics_configurator.rb → processors/google_analytics_configurator.rb} +3 -2
- data/lib/slimmer/{header_context_inserter.rb → processors/header_context_inserter.rb} +1 -1
- data/lib/slimmer/processors/logo_class_inserter.rb +20 -0
- data/lib/slimmer/processors/related_items_inserter.rb +20 -0
- data/lib/slimmer/{search_path_setter.rb → processors/search_path_setter.rb} +2 -4
- data/lib/slimmer/{section_inserter.rb → processors/section_inserter.rb} +1 -1
- data/lib/slimmer/{tag_mover.rb → processors/tag_mover.rb} +1 -1
- data/lib/slimmer/{title_inserter.rb → processors/title_inserter.rb} +1 -1
- data/lib/slimmer/skin.rb +28 -20
- data/lib/slimmer/template.rb +1 -1
- data/lib/slimmer/test.rb +5 -1
- data/lib/slimmer/test_template.rb +7 -1
- data/lib/slimmer/version.rb +1 -1
- data/test/fixtures/related.raw.html.erb +26 -22
- data/test/fixtures/wrapper.html.erb +2 -0
- data/test/headers_test.rb +56 -1
- data/test/processors/body_inserter_test.rb +4 -4
- data/test/{google_analytics_test.rb → processors/google_analytics_test.rb} +31 -0
- data/test/processors/header_context_inserter_test.rb +5 -5
- data/test/processors/logo_class_inserter_test.rb +55 -0
- data/test/processors/related_items_inserter_test.rb +61 -0
- data/test/{search_path_setter_test.rb → processors/search_path_setter_test.rb} +0 -0
- data/test/processors/section_inserter_test.rb +20 -5
- data/test/test_helper.rb +31 -22
- data/test/typical_usage_test.rb +101 -70
- metadata +60 -70
- data/lib/slimmer/related_items_inserter.rb +0 -36
- data/lib/slimmer/url_rewriter.rb +0 -40
data/test/typical_usage_test.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "test_helper"
|
2
|
-
require "gds_api/test_helpers/panopticon"
|
3
2
|
|
4
3
|
module TypicalUsage
|
5
4
|
|
@@ -65,26 +64,48 @@ module TypicalUsage
|
|
65
64
|
}
|
66
65
|
|
67
66
|
def test_should_set_correct_content_length_header
|
68
|
-
|
67
|
+
expected = last_response.body.bytesize
|
68
|
+
assert_equal expected.to_s, last_response.headers['Content-Length']
|
69
69
|
end
|
70
|
-
|
71
70
|
end
|
72
71
|
|
73
72
|
class NormalResponseTest < SlimmerIntegrationTest
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
73
|
+
def setup
|
74
|
+
super
|
75
|
+
@artefact = {
|
76
|
+
'slug' => 'some-slug',
|
77
|
+
'title' => 'Example document',
|
78
|
+
'primary_section' => 'this_section',
|
79
|
+
'related_items' => [
|
80
|
+
{
|
81
|
+
'artefact' => {
|
82
|
+
'kind' => 'guide',
|
83
|
+
'name' => 'How to test computer software automatically & ensure that 2>1',
|
84
|
+
'slug' => 'how-to-test-computer-software-automatically',
|
85
|
+
}
|
86
|
+
}
|
87
|
+
],
|
88
|
+
'tag_ids' => ['this_section', 'directgov'],
|
89
|
+
'tags' => [
|
90
|
+
{"id" => "this_section", "title" => 'This section'},
|
91
|
+
{"id" => "directgov", "title" => 'Directgov'},
|
92
|
+
]
|
93
|
+
}
|
94
|
+
given_response 200, %{
|
95
|
+
<html>
|
96
|
+
<head><title>The title of the page</title>
|
97
|
+
<meta name="something" content="yes">
|
98
|
+
<meta name="x-section-name" content="This section">
|
99
|
+
<meta name="x-section-link" content="/this_section">
|
100
|
+
<script src="blah.js"></script>
|
101
|
+
<link href="app.css" rel="stylesheet" type="text/css">
|
102
|
+
</head>
|
103
|
+
<body class="body_class">
|
104
|
+
<div id="wrapper">The body of the page</div>
|
105
|
+
</body>
|
106
|
+
</html>
|
107
|
+
}, {Slimmer::Headers::ARTEFACT_HEADER => @artefact.to_json}
|
108
|
+
end
|
88
109
|
|
89
110
|
def test_should_replace_the_wrapper_using_the_app_response
|
90
111
|
assert_rendered_in_template "#wrapper", "The body of the page"
|
@@ -114,6 +135,9 @@ module TypicalUsage
|
|
114
135
|
assert_rendered_in_template "nav[role=navigation] li a[href='/this_section']", "This section"
|
115
136
|
end
|
116
137
|
|
138
|
+
def test_should_add_logo_classes_to_wrapper
|
139
|
+
assert_rendered_in_template "#wrapper.directgov"
|
140
|
+
end
|
117
141
|
end
|
118
142
|
|
119
143
|
class ConditionalCommentTest < SlimmerIntegrationTest
|
@@ -146,10 +170,10 @@ module TypicalUsage
|
|
146
170
|
end
|
147
171
|
|
148
172
|
class ResponseWithRelatedItemsTest < SlimmerIntegrationTest
|
149
|
-
include GdsApi::TestHelpers::Panopticon
|
150
173
|
|
151
174
|
def setup
|
152
|
-
|
175
|
+
super
|
176
|
+
@artefact = {
|
153
177
|
'slug' => 'some-slug',
|
154
178
|
'title' => 'Example document',
|
155
179
|
'related_items' => [
|
@@ -161,22 +185,20 @@ module TypicalUsage
|
|
161
185
|
}
|
162
186
|
}
|
163
187
|
]
|
164
|
-
|
165
|
-
super
|
188
|
+
}
|
166
189
|
end
|
167
190
|
end
|
168
191
|
|
169
192
|
class MainstreamRelatedItemsTest < ResponseWithRelatedItemsTest
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
get "/some-slug"
|
193
|
+
def setup
|
194
|
+
super
|
195
|
+
given_response 200, %{
|
196
|
+
<html>
|
197
|
+
<body class="mainstream">
|
198
|
+
<div id="wrapper">The body of the page<div id="related-items"></div></div>
|
199
|
+
</body>
|
200
|
+
</html>
|
201
|
+
}, {Slimmer::Headers::ARTEFACT_HEADER => @artefact.to_json}
|
180
202
|
end
|
181
203
|
|
182
204
|
def test_should_insert_related_items_block
|
@@ -186,16 +208,15 @@ module TypicalUsage
|
|
186
208
|
end
|
187
209
|
|
188
210
|
class NonMainstreamRelatedItemsTest < ResponseWithRelatedItemsTest
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
get "/some-slug"
|
211
|
+
def setup
|
212
|
+
super
|
213
|
+
given_response 200, %{
|
214
|
+
<html>
|
215
|
+
<body class="nonmainstream">
|
216
|
+
<div id="wrapper">The body of the page<div id="related-items"></div></div>
|
217
|
+
</body>
|
218
|
+
</html>
|
219
|
+
}, {Slimmer::Headers::ARTEFACT_HEADER => @artefact.to_json}
|
199
220
|
end
|
200
221
|
|
201
222
|
def test_should_not_insert_related_items_block
|
@@ -318,35 +339,6 @@ module TypicalUsage
|
|
318
339
|
end
|
319
340
|
end
|
320
341
|
|
321
|
-
class ApiTimeoutResponseTest < SlimmerIntegrationTest
|
322
|
-
include Rack::Test::Methods
|
323
|
-
|
324
|
-
given_response 200, %{
|
325
|
-
<html>
|
326
|
-
<head><title>The title of the page</title>
|
327
|
-
<meta name="something" content="yes">
|
328
|
-
<meta name="x-section-name" content="This section">
|
329
|
-
<meta name="x-section-link" content="/this_section">
|
330
|
-
<script src="blah.js"></script>
|
331
|
-
<link href="app.css" rel="stylesheet" type="text/css">
|
332
|
-
</head>
|
333
|
-
<body class="body_class mainstream">
|
334
|
-
<div id="wrapper">The body of the page</div>
|
335
|
-
<div id="related-items"></div>
|
336
|
-
</body>
|
337
|
-
</html>
|
338
|
-
}
|
339
|
-
|
340
|
-
def setup
|
341
|
-
::Slimmer::RelatedItemsInserter.any_instance.stubs(:metadata_from_panopticon).raises(GdsApi::TimedOutException)
|
342
|
-
super
|
343
|
-
end
|
344
|
-
|
345
|
-
def test_should_return_503_if_an_API_call_times_out
|
346
|
-
assert_equal 503, last_response.status
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
342
|
class ArbitraryWrapperIdTest < SlimmerIntegrationTest
|
351
343
|
|
352
344
|
given_response 200, %{
|
@@ -362,4 +354,43 @@ module TypicalUsage
|
|
362
354
|
assert_no_selector "#wrapper"
|
363
355
|
end
|
364
356
|
end
|
357
|
+
|
358
|
+
class StrippingHeadersTest < SlimmerIntegrationTest
|
359
|
+
def test_should_strip_all_slimmer_headers_from_final_response
|
360
|
+
given_response 200, %{
|
361
|
+
<html>
|
362
|
+
<body>
|
363
|
+
<div id="wrapper">The body of the page</div>
|
364
|
+
</body>
|
365
|
+
</html>
|
366
|
+
}, {
|
367
|
+
"#{Slimmer::Headers::HEADER_PREFIX}-Foo" => "Something",
|
368
|
+
Slimmer::Headers::ARTEFACT_HEADER => "{}",
|
369
|
+
"X-Custom-Header" => "Something else"
|
370
|
+
}
|
371
|
+
|
372
|
+
refute last_response.headers.has_key?(Slimmer::Headers::ARTEFACT_HEADER)
|
373
|
+
refute last_response.headers.has_key?("#{Slimmer::Headers::HEADER_PREFIX}-Foo")
|
374
|
+
assert_equal "Something else", last_response.headers["X-Custom-Header"]
|
375
|
+
end
|
376
|
+
|
377
|
+
def test_should_strip_slimmer_headers_even_when_skipping_slimmer
|
378
|
+
given_response 200, %{
|
379
|
+
<html>
|
380
|
+
<body>
|
381
|
+
<div id="wrapper">The body of the page</div>
|
382
|
+
</body>
|
383
|
+
</html>
|
384
|
+
}, {
|
385
|
+
"#{Slimmer::Headers::HEADER_PREFIX}-Foo" => "Something",
|
386
|
+
Slimmer::Headers::ARTEFACT_HEADER => "{}",
|
387
|
+
"X-Custom-Header" => "Something else",
|
388
|
+
Slimmer::Headers::SKIP_HEADER => "1"
|
389
|
+
}
|
390
|
+
|
391
|
+
refute last_response.headers.has_key?(Slimmer::Headers::ARTEFACT_HEADER)
|
392
|
+
refute last_response.headers.has_key?("#{Slimmer::Headers::HEADER_PREFIX}-Foo")
|
393
|
+
assert_equal "Something else", last_response.headers["X-Custom-Header"]
|
394
|
+
end
|
395
|
+
end
|
365
396
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version:
|
5
|
+
version: 2.0.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-08-
|
14
|
+
date: 2012-08-24 00:00:00 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: nokogiri
|
@@ -68,23 +68,9 @@ dependencies:
|
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: gds-api-adapters
|
73
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ">="
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: 0.0.33
|
79
|
-
- - <
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: 2.0.0
|
82
|
-
type: :runtime
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: *id006
|
85
71
|
- !ruby/object:Gem::Dependency
|
86
72
|
name: rake
|
87
|
-
requirement: &
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
88
74
|
none: false
|
89
75
|
requirements:
|
90
76
|
- - ~>
|
@@ -92,10 +78,10 @@ dependencies:
|
|
92
78
|
version: 0.9.2.2
|
93
79
|
type: :development
|
94
80
|
prerelease: false
|
95
|
-
version_requirements: *
|
81
|
+
version_requirements: *id006
|
96
82
|
- !ruby/object:Gem::Dependency
|
97
83
|
name: rack-test
|
98
|
-
requirement: &
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
99
85
|
none: false
|
100
86
|
requirements:
|
101
87
|
- - ~>
|
@@ -103,10 +89,10 @@ dependencies:
|
|
103
89
|
version: 0.6.1
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
|
-
version_requirements: *
|
92
|
+
version_requirements: *id007
|
107
93
|
- !ruby/object:Gem::Dependency
|
108
94
|
name: mocha
|
109
|
-
requirement: &
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
110
96
|
none: false
|
111
97
|
requirements:
|
112
98
|
- - ~>
|
@@ -114,10 +100,10 @@ dependencies:
|
|
114
100
|
version: 0.9.12
|
115
101
|
type: :development
|
116
102
|
prerelease: false
|
117
|
-
version_requirements: *
|
103
|
+
version_requirements: *id008
|
118
104
|
- !ruby/object:Gem::Dependency
|
119
105
|
name: webmock
|
120
|
-
requirement: &
|
106
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
121
107
|
none: false
|
122
108
|
requirements:
|
123
109
|
- - ~>
|
@@ -125,10 +111,10 @@ dependencies:
|
|
125
111
|
version: "1.7"
|
126
112
|
type: :development
|
127
113
|
prerelease: false
|
128
|
-
version_requirements: *
|
114
|
+
version_requirements: *id009
|
129
115
|
- !ruby/object:Gem::Dependency
|
130
116
|
name: therubyracer
|
131
|
-
requirement: &
|
117
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
132
118
|
none: false
|
133
119
|
requirements:
|
134
120
|
- - ">="
|
@@ -136,10 +122,10 @@ dependencies:
|
|
136
122
|
version: "0"
|
137
123
|
type: :development
|
138
124
|
prerelease: false
|
139
|
-
version_requirements: *
|
125
|
+
version_requirements: *id010
|
140
126
|
- !ruby/object:Gem::Dependency
|
141
127
|
name: gem_publisher
|
142
|
-
requirement: &
|
128
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
143
129
|
none: false
|
144
130
|
requirements:
|
145
131
|
- - ~>
|
@@ -147,7 +133,7 @@ dependencies:
|
|
147
133
|
version: 1.1.1
|
148
134
|
type: :development
|
149
135
|
prerelease: false
|
150
|
-
version_requirements: *
|
136
|
+
version_requirements: *id011
|
151
137
|
description: Rack middleware for skinning pages using a specific template
|
152
138
|
email:
|
153
139
|
- bengriffiths@gmail.com
|
@@ -161,44 +147,46 @@ extra_rdoc_files: []
|
|
161
147
|
files:
|
162
148
|
- README.md
|
163
149
|
- CHANGELOG.md
|
164
|
-
- lib/slimmer
|
165
|
-
- lib/slimmer/
|
166
|
-
- lib/slimmer/body_class_copier.rb
|
167
|
-
- lib/slimmer/
|
168
|
-
- lib/slimmer/
|
169
|
-
- lib/slimmer/
|
170
|
-
- lib/slimmer/
|
171
|
-
- lib/slimmer/
|
172
|
-
- lib/slimmer/
|
173
|
-
- lib/slimmer/
|
174
|
-
- lib/slimmer/
|
175
|
-
- lib/slimmer/search_path_setter.rb
|
176
|
-
- lib/slimmer/
|
177
|
-
- lib/slimmer/
|
178
|
-
- lib/slimmer/
|
150
|
+
- lib/tasks/slimmer.rake
|
151
|
+
- lib/slimmer/version.rb
|
152
|
+
- lib/slimmer/processors/body_class_copier.rb
|
153
|
+
- lib/slimmer/processors/google_analytics_configurator.rb
|
154
|
+
- lib/slimmer/processors/related_items_inserter.rb
|
155
|
+
- lib/slimmer/processors/body_inserter.rb
|
156
|
+
- lib/slimmer/processors/logo_class_inserter.rb
|
157
|
+
- lib/slimmer/processors/footer_remover.rb
|
158
|
+
- lib/slimmer/processors/conditional_comment_mover.rb
|
159
|
+
- lib/slimmer/processors/admin_title_inserter.rb
|
160
|
+
- lib/slimmer/processors/section_inserter.rb
|
161
|
+
- lib/slimmer/processors/search_path_setter.rb
|
162
|
+
- lib/slimmer/processors/tag_mover.rb
|
163
|
+
- lib/slimmer/processors/title_inserter.rb
|
164
|
+
- lib/slimmer/processors/header_context_inserter.rb
|
179
165
|
- lib/slimmer/template.rb
|
166
|
+
- lib/slimmer/railtie.rb
|
180
167
|
- lib/slimmer/test.rb
|
168
|
+
- lib/slimmer/skin.rb
|
169
|
+
- lib/slimmer/app.rb
|
170
|
+
- lib/slimmer/headers.rb
|
181
171
|
- lib/slimmer/test_template.rb
|
182
|
-
- lib/slimmer/title_inserter.rb
|
183
|
-
- lib/slimmer/url_rewriter.rb
|
184
|
-
- lib/slimmer/version.rb
|
185
172
|
- lib/slimmer.rb
|
186
|
-
- lib/tasks/slimmer.rake
|
187
173
|
- Rakefile
|
188
|
-
- test/
|
189
|
-
- test/fixtures/500.html.erb
|
190
|
-
- test/fixtures/related.raw.html.erb
|
191
|
-
- test/fixtures/wrapper.html.erb
|
192
|
-
- test/google_analytics_test.rb
|
193
|
-
- test/headers_test.rb
|
194
|
-
- test/processors/body_inserter_test.rb
|
195
|
-
- test/processors/header_context_inserter_test.rb
|
174
|
+
- test/processors/related_items_inserter_test.rb
|
196
175
|
- test/processors/section_inserter_test.rb
|
197
|
-
- test/
|
176
|
+
- test/processors/google_analytics_test.rb
|
177
|
+
- test/processors/header_context_inserter_test.rb
|
178
|
+
- test/processors/body_inserter_test.rb
|
179
|
+
- test/processors/logo_class_inserter_test.rb
|
180
|
+
- test/processors/search_path_setter_test.rb
|
198
181
|
- test/skin_test.rb
|
199
|
-
- test/
|
182
|
+
- test/headers_test.rb
|
200
183
|
- test/test_template_dependency_on_static_test.rb
|
201
184
|
- test/typical_usage_test.rb
|
185
|
+
- test/fixtures/500.html.erb
|
186
|
+
- test/fixtures/404.html.erb
|
187
|
+
- test/fixtures/related.raw.html.erb
|
188
|
+
- test/fixtures/wrapper.html.erb
|
189
|
+
- test/test_helper.rb
|
202
190
|
- bin/render_slimmer_error
|
203
191
|
homepage: http://github.com/alphagov/slimmer
|
204
192
|
licenses: []
|
@@ -213,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
201
|
requirements:
|
214
202
|
- - ">="
|
215
203
|
- !ruby/object:Gem::Version
|
216
|
-
hash:
|
204
|
+
hash: -3192498978421929573
|
217
205
|
segments:
|
218
206
|
- 0
|
219
207
|
version: "0"
|
@@ -222,29 +210,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
210
|
requirements:
|
223
211
|
- - ">="
|
224
212
|
- !ruby/object:Gem::Version
|
225
|
-
hash:
|
213
|
+
hash: -3192498978421929573
|
226
214
|
segments:
|
227
215
|
- 0
|
228
216
|
version: "0"
|
229
217
|
requirements: []
|
230
218
|
|
231
219
|
rubyforge_project: slimmer
|
232
|
-
rubygems_version: 1.8.
|
220
|
+
rubygems_version: 1.8.24
|
233
221
|
signing_key:
|
234
222
|
specification_version: 3
|
235
223
|
summary: Thinner than the skinner
|
236
224
|
test_files:
|
237
|
-
- test/
|
238
|
-
- test/fixtures/500.html.erb
|
239
|
-
- test/fixtures/related.raw.html.erb
|
240
|
-
- test/fixtures/wrapper.html.erb
|
241
|
-
- test/google_analytics_test.rb
|
242
|
-
- test/headers_test.rb
|
243
|
-
- test/processors/body_inserter_test.rb
|
244
|
-
- test/processors/header_context_inserter_test.rb
|
225
|
+
- test/processors/related_items_inserter_test.rb
|
245
226
|
- test/processors/section_inserter_test.rb
|
246
|
-
- test/
|
227
|
+
- test/processors/google_analytics_test.rb
|
228
|
+
- test/processors/header_context_inserter_test.rb
|
229
|
+
- test/processors/body_inserter_test.rb
|
230
|
+
- test/processors/logo_class_inserter_test.rb
|
231
|
+
- test/processors/search_path_setter_test.rb
|
247
232
|
- test/skin_test.rb
|
248
|
-
- test/
|
233
|
+
- test/headers_test.rb
|
249
234
|
- test/test_template_dependency_on_static_test.rb
|
250
235
|
- test/typical_usage_test.rb
|
236
|
+
- test/fixtures/500.html.erb
|
237
|
+
- test/fixtures/404.html.erb
|
238
|
+
- test/fixtures/related.raw.html.erb
|
239
|
+
- test/fixtures/wrapper.html.erb
|
240
|
+
- test/test_helper.rb
|