slimmer 9.6.0 → 10.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -1
- data/README.md +9 -9
- data/lib/slimmer.rb +1 -4
- data/lib/slimmer/cucumber.rb +2 -2
- data/lib/slimmer/{shared_templates.rb → govuk_components.rb} +3 -3
- data/lib/slimmer/headers.rb +0 -42
- data/lib/slimmer/processors/metadata_inserter.rb +1 -7
- data/lib/slimmer/rspec.rb +2 -2
- data/lib/slimmer/skin.rb +1 -15
- data/lib/slimmer/test_helpers/{shared_templates.rb → govuk_components.rb} +1 -1
- data/lib/slimmer/version.rb +1 -1
- data/test/headers_test.rb +0 -133
- data/test/processors/metadata_inserter_test.rb +0 -63
- data/test/skin_test.rb +0 -24
- data/test/test_helper.rb +0 -3
- data/test/test_helpers/{shared_templates_test.rb → govuk_components_test.rb} +7 -7
- data/test/typical_usage_test.rb +1 -53
- metadata +24 -49
- data/lib/slimmer/artefact.rb +0 -47
- data/lib/slimmer/processors/related_items_inserter.rb +0 -22
- data/lib/slimmer/processors/section_inserter.rb +0 -49
- data/test/artefact_test.rb +0 -119
- data/test/fixtures/related.raw.html.erb +0 -33
- data/test/processors/related_items_inserter_test.rb +0 -59
- data/test/processors/section_inserter_test.rb +0 -193
data/test/skin_test.rb
CHANGED
@@ -96,28 +96,4 @@ describe Slimmer::Skin do
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
99
|
-
|
100
|
-
describe "parsing artefact from header" do
|
101
|
-
before do
|
102
|
-
@skin = Slimmer::Skin.new cache: Slimmer::Cache.instance
|
103
|
-
@headers = {}
|
104
|
-
@response = stub("Response", :headers => @headers)
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should construct and return an artefact with the parsed json" do
|
108
|
-
data = {"foo" => "bar", "baz" => 1}
|
109
|
-
@headers[Slimmer::Headers::ARTEFACT_HEADER] = data.to_json
|
110
|
-
Slimmer::Artefact.expects(:new).with(data).returns(:an_artefact)
|
111
|
-
assert_equal :an_artefact, @skin.artefact_from_header(@response)
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should return nil if there is no artefact header" do
|
115
|
-
assert_equal nil, @skin.artefact_from_header(@response)
|
116
|
-
end
|
117
|
-
|
118
|
-
it "should return nil if there is invalid JSON in the artefact header" do
|
119
|
-
@headers[Slimmer::Headers::ARTEFACT_HEADER] = "fooey"
|
120
|
-
assert_equal nil, @skin.artefact_from_header(@response)
|
121
|
-
end
|
122
|
-
end
|
123
99
|
end
|
data/test/test_helper.rb
CHANGED
@@ -5,7 +5,6 @@ require 'json'
|
|
5
5
|
require 'logger'
|
6
6
|
require 'mocha/setup'
|
7
7
|
require 'timecop'
|
8
|
-
require 'gds_api/test_helpers/content_api'
|
9
8
|
|
10
9
|
MiniTest::Test.class_eval do
|
11
10
|
def as_nokogiri(html_string)
|
@@ -60,7 +59,6 @@ end
|
|
60
59
|
|
61
60
|
class SlimmerIntegrationTest < MiniTest::Test
|
62
61
|
include Rack::Test::Methods
|
63
|
-
include GdsApi::TestHelpers::ContentApi
|
64
62
|
|
65
63
|
# given_response can either be called from a setup method, or in the class scope.
|
66
64
|
# The setup method variant is necessary if you want to pass variables into the call that
|
@@ -90,7 +88,6 @@ class SlimmerIntegrationTest < MiniTest::Test
|
|
90
88
|
end
|
91
89
|
|
92
90
|
use_template(template_name)
|
93
|
-
use_template('related.raw')
|
94
91
|
use_template('report_a_problem.raw')
|
95
92
|
|
96
93
|
fetch_page
|
@@ -1,17 +1,17 @@
|
|
1
1
|
require_relative "../test_helper"
|
2
|
-
require_relative "../../lib/slimmer/test_helpers/
|
3
|
-
|
4
|
-
describe Slimmer::TestHelpers::SharedTemplates do
|
2
|
+
require_relative "../../lib/slimmer/test_helpers/govuk_components"
|
5
3
|
|
4
|
+
describe Slimmer::TestHelpers::GovukComponents do
|
6
5
|
let(:subject) {
|
7
6
|
class Dummy
|
8
|
-
include Slimmer::TestHelpers::
|
7
|
+
include Slimmer::TestHelpers::GovukComponents
|
9
8
|
end
|
10
|
-
|
9
|
+
}
|
11
10
|
|
12
|
-
describe 'shared_component_selector' do
|
13
|
-
it '
|
11
|
+
describe '#shared_component_selector' do
|
12
|
+
it 'generates a selector for components' do
|
14
13
|
outcome = subject.new.shared_component_selector('flux_capacitor')
|
14
|
+
|
15
15
|
expected = "test-govuk-component[data-template='govuk_component-flux_capacitor']"
|
16
16
|
assert_equal expected, outcome
|
17
17
|
end
|
data/test/typical_usage_test.rb
CHANGED
@@ -89,7 +89,6 @@ module TypicalUsage
|
|
89
89
|
class NormalResponseTest < SlimmerIntegrationTest
|
90
90
|
def setup
|
91
91
|
super
|
92
|
-
@artefact = artefact_for_slug_in_a_section("some-article", 'this-section')
|
93
92
|
given_response 200, %{
|
94
93
|
<html>
|
95
94
|
<head><title>The title of the page</title>
|
@@ -101,7 +100,7 @@ module TypicalUsage
|
|
101
100
|
<div id="wrapper">The body of the page</div>
|
102
101
|
</body>
|
103
102
|
</html>
|
104
|
-
}, {
|
103
|
+
}, {}
|
105
104
|
end
|
106
105
|
|
107
106
|
def test_should_replace_the_wrapper_using_the_app_response
|
@@ -127,10 +126,6 @@ module TypicalUsage
|
|
127
126
|
def test_should_copy_the_class_of_the_body_element
|
128
127
|
assert_rendered_in_template "body.body_class"
|
129
128
|
end
|
130
|
-
|
131
|
-
def test_should_insert_section_links_into_the_navigation
|
132
|
-
assert_rendered_in_template "#global-breadcrumb ol li a[href='https://www.test.gov.uk/browse/this-section']", "This section"
|
133
|
-
end
|
134
129
|
end
|
135
130
|
|
136
131
|
class ConditionalCommentTest < SlimmerIntegrationTest
|
@@ -164,49 +159,6 @@ module TypicalUsage
|
|
164
159
|
end
|
165
160
|
end
|
166
161
|
|
167
|
-
class ResponseWithRelatedItemsTest < SlimmerIntegrationTest
|
168
|
-
|
169
|
-
def setup
|
170
|
-
super
|
171
|
-
@artefact = artefact_for_slug_with_related_artefacts("some-slug", ["how-to-test-computer-software-automatically"])
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
class MainstreamRelatedItemsTest < ResponseWithRelatedItemsTest
|
176
|
-
def setup
|
177
|
-
super
|
178
|
-
given_response 200, %{
|
179
|
-
<html>
|
180
|
-
<body class="mainstream">
|
181
|
-
<div id="wrapper">The body of the page<div id="related-items"></div></div>
|
182
|
-
</body>
|
183
|
-
</html>
|
184
|
-
}, {Slimmer::Headers::ARTEFACT_HEADER => @artefact.to_json}
|
185
|
-
end
|
186
|
-
|
187
|
-
def test_should_insert_related_items_block
|
188
|
-
assert_rendered_in_template "div.related nav li a[href='https://www.test.gov.uk/how-to-test-computer-software-automatically']",
|
189
|
-
"How to test computer software automatically"
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
class NonMainstreamRelatedItemsTest < ResponseWithRelatedItemsTest
|
194
|
-
def setup
|
195
|
-
super
|
196
|
-
given_response 200, %{
|
197
|
-
<html>
|
198
|
-
<body class="nonmainstream">
|
199
|
-
<div id="wrapper">The body of the page<div id="related-items"></div></div>
|
200
|
-
</body>
|
201
|
-
</html>
|
202
|
-
}, {Slimmer::Headers::ARTEFACT_HEADER => @artefact.to_json}
|
203
|
-
end
|
204
|
-
|
205
|
-
def test_should_not_insert_related_items_block
|
206
|
-
assert_rendered_in_template "div#related-items", ""
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
162
|
class HeaderContextResponseTest < SlimmerIntegrationTest
|
211
163
|
given_response 200, %{
|
212
164
|
<html>
|
@@ -379,11 +331,9 @@ module TypicalUsage
|
|
379
331
|
</html>
|
380
332
|
}, {
|
381
333
|
"#{Slimmer::Headers::HEADER_PREFIX}-Foo" => "Something",
|
382
|
-
Slimmer::Headers::ARTEFACT_HEADER => "{}",
|
383
334
|
"X-Custom-Header" => "Something else"
|
384
335
|
}
|
385
336
|
|
386
|
-
refute last_response.headers.has_key?(Slimmer::Headers::ARTEFACT_HEADER)
|
387
337
|
refute last_response.headers.has_key?("#{Slimmer::Headers::HEADER_PREFIX}-Foo")
|
388
338
|
assert_equal "Something else", last_response.headers["X-Custom-Header"]
|
389
339
|
end
|
@@ -397,12 +347,10 @@ module TypicalUsage
|
|
397
347
|
</html>
|
398
348
|
}, {
|
399
349
|
"#{Slimmer::Headers::HEADER_PREFIX}-Foo" => "Something",
|
400
|
-
Slimmer::Headers::ARTEFACT_HEADER => "{}",
|
401
350
|
"X-Custom-Header" => "Something else",
|
402
351
|
Slimmer::Headers::SKIP_HEADER => "1"
|
403
352
|
}
|
404
353
|
|
405
|
-
refute last_response.headers.has_key?(Slimmer::Headers::ARTEFACT_HEADER)
|
406
354
|
refute last_response.headers.has_key?("#{Slimmer::Headers::HEADER_PREFIX}-Foo")
|
407
355
|
assert_equal "Something else", last_response.headers["X-Custom-Header"]
|
408
356
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 10.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Griffiths
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-11-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -199,20 +199,6 @@ dependencies:
|
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: 1.5.0
|
202
|
-
- !ruby/object:Gem::Dependency
|
203
|
-
name: gds-api-adapters
|
204
|
-
requirement: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - '='
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: 2.7.1
|
209
|
-
type: :development
|
210
|
-
prerelease: false
|
211
|
-
version_requirements: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - '='
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: 2.7.1
|
216
202
|
- !ruby/object:Gem::Dependency
|
217
203
|
name: timecop
|
218
204
|
requirement: !ruby/object:Gem::Requirement
|
@@ -256,10 +242,10 @@ files:
|
|
256
242
|
- bin/render_slimmer_error
|
257
243
|
- lib/slimmer.rb
|
258
244
|
- lib/slimmer/app.rb
|
259
|
-
- lib/slimmer/artefact.rb
|
260
245
|
- lib/slimmer/cache.rb
|
261
246
|
- lib/slimmer/component_resolver.rb
|
262
247
|
- lib/slimmer/cucumber.rb
|
248
|
+
- lib/slimmer/govuk_components.rb
|
263
249
|
- lib/slimmer/govuk_request_id.rb
|
264
250
|
- lib/slimmer/headers.rb
|
265
251
|
- lib/slimmer/i18n_backend.rb
|
@@ -271,27 +257,23 @@ files:
|
|
271
257
|
- lib/slimmer/processors/inside_header_inserter.rb
|
272
258
|
- lib/slimmer/processors/metadata_inserter.rb
|
273
259
|
- lib/slimmer/processors/navigation_mover.rb
|
274
|
-
- lib/slimmer/processors/related_items_inserter.rb
|
275
260
|
- lib/slimmer/processors/report_a_problem_inserter.rb
|
276
261
|
- lib/slimmer/processors/search_parameter_inserter.rb
|
277
262
|
- lib/slimmer/processors/search_path_setter.rb
|
278
263
|
- lib/slimmer/processors/search_remover.rb
|
279
|
-
- lib/slimmer/processors/section_inserter.rb
|
280
264
|
- lib/slimmer/processors/tag_mover.rb
|
281
265
|
- lib/slimmer/processors/title_inserter.rb
|
282
266
|
- lib/slimmer/railtie.rb
|
283
267
|
- lib/slimmer/rspec.rb
|
284
|
-
- lib/slimmer/shared_templates.rb
|
285
268
|
- lib/slimmer/skin.rb
|
286
269
|
- lib/slimmer/template.rb
|
287
270
|
- lib/slimmer/test.rb
|
288
|
-
- lib/slimmer/test_helpers/
|
271
|
+
- lib/slimmer/test_helpers/govuk_components.rb
|
289
272
|
- lib/slimmer/test_templates/header_footer_only.html
|
290
273
|
- lib/slimmer/test_templates/wrapper.html
|
291
274
|
- lib/slimmer/version.rb
|
292
275
|
- lib/tasks/lint.rake
|
293
276
|
- lib/tasks/slimmer.rake
|
294
|
-
- test/artefact_test.rb
|
295
277
|
- test/cache_test.rb
|
296
278
|
- test/changelog_test.rb
|
297
279
|
- test/component_resolver_test.rb
|
@@ -300,7 +282,6 @@ files:
|
|
300
282
|
- test/fixtures/500.html.erb
|
301
283
|
- test/fixtures/core_layout.html.erb
|
302
284
|
- test/fixtures/proposition_menu.html.erb
|
303
|
-
- test/fixtures/related.raw.html.erb
|
304
285
|
- test/fixtures/report_a_problem.raw.html.erb
|
305
286
|
- test/headers_test.rb
|
306
287
|
- test/processors/body_inserter_test.rb
|
@@ -308,16 +289,14 @@ files:
|
|
308
289
|
- test/processors/inside_header_inserter_test.rb
|
309
290
|
- test/processors/metadata_inserter_test.rb
|
310
291
|
- test/processors/navigation_mover_test.rb
|
311
|
-
- test/processors/related_items_inserter_test.rb
|
312
292
|
- test/processors/report_a_problem_inserter_test.rb
|
313
293
|
- test/processors/search_parameter_inserter_test.rb
|
314
294
|
- test/processors/search_path_setter_test.rb
|
315
295
|
- test/processors/search_remover_test.rb
|
316
|
-
- test/processors/section_inserter_test.rb
|
317
296
|
- test/processors/tag_mover_test.rb
|
318
297
|
- test/skin_test.rb
|
319
298
|
- test/test_helper.rb
|
320
|
-
- test/test_helpers/
|
299
|
+
- test/test_helpers/govuk_components_test.rb
|
321
300
|
- test/test_template_dependency_on_static_test.rb
|
322
301
|
- test/typical_usage_test.rb
|
323
302
|
homepage: http://github.com/alphagov/slimmer
|
@@ -345,32 +324,28 @@ signing_key:
|
|
345
324
|
specification_version: 4
|
346
325
|
summary: Thinner than the skinner
|
347
326
|
test_files:
|
327
|
+
- test/headers_test.rb
|
328
|
+
- test/processors/body_inserter_test.rb
|
329
|
+
- test/processors/search_path_setter_test.rb
|
330
|
+
- test/processors/navigation_mover_test.rb
|
331
|
+
- test/processors/report_a_problem_inserter_test.rb
|
332
|
+
- test/processors/inside_header_inserter_test.rb
|
333
|
+
- test/processors/tag_mover_test.rb
|
334
|
+
- test/processors/search_parameter_inserter_test.rb
|
335
|
+
- test/processors/search_remover_test.rb
|
336
|
+
- test/processors/metadata_inserter_test.rb
|
337
|
+
- test/processors/header_context_inserter_test.rb
|
338
|
+
- test/test_template_dependency_on_static_test.rb
|
348
339
|
- test/test_helper.rb
|
349
340
|
- test/typical_usage_test.rb
|
350
|
-
- test/cache_test.rb
|
351
|
-
- test/test_helpers/shared_templates_test.rb
|
352
341
|
- test/skin_test.rb
|
353
|
-
- test/
|
354
|
-
- test/fixtures/related.raw.html.erb
|
355
|
-
- test/fixtures/404.html.erb
|
356
|
-
- test/fixtures/410.html.erb
|
342
|
+
- test/component_resolver_test.rb
|
357
343
|
- test/fixtures/core_layout.html.erb
|
358
|
-
- test/fixtures/proposition_menu.html.erb
|
359
344
|
- test/fixtures/report_a_problem.raw.html.erb
|
345
|
+
- test/fixtures/410.html.erb
|
346
|
+
- test/fixtures/404.html.erb
|
347
|
+
- test/fixtures/500.html.erb
|
348
|
+
- test/fixtures/proposition_menu.html.erb
|
349
|
+
- test/test_helpers/govuk_components_test.rb
|
350
|
+
- test/cache_test.rb
|
360
351
|
- test/changelog_test.rb
|
361
|
-
- test/component_resolver_test.rb
|
362
|
-
- test/headers_test.rb
|
363
|
-
- test/test_template_dependency_on_static_test.rb
|
364
|
-
- test/artefact_test.rb
|
365
|
-
- test/processors/search_parameter_inserter_test.rb
|
366
|
-
- test/processors/metadata_inserter_test.rb
|
367
|
-
- test/processors/header_context_inserter_test.rb
|
368
|
-
- test/processors/related_items_inserter_test.rb
|
369
|
-
- test/processors/section_inserter_test.rb
|
370
|
-
- test/processors/body_inserter_test.rb
|
371
|
-
- test/processors/report_a_problem_inserter_test.rb
|
372
|
-
- test/processors/search_remover_test.rb
|
373
|
-
- test/processors/inside_header_inserter_test.rb
|
374
|
-
- test/processors/navigation_mover_test.rb
|
375
|
-
- test/processors/search_path_setter_test.rb
|
376
|
-
- test/processors/tag_mover_test.rb
|
data/lib/slimmer/artefact.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
class Slimmer::Artefact
|
2
|
-
def initialize(artefact_data)
|
3
|
-
@data = artefact_data
|
4
|
-
end
|
5
|
-
|
6
|
-
def slug
|
7
|
-
id_to_slug(@data["id"])
|
8
|
-
end
|
9
|
-
|
10
|
-
def tags_of_type(type)
|
11
|
-
return [] unless self.tags
|
12
|
-
self.tags.select do |t|
|
13
|
-
t["details"]["type"] == type
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def primary_section
|
18
|
-
tags_of_type("section").first
|
19
|
-
end
|
20
|
-
|
21
|
-
def primary_root_section
|
22
|
-
section = primary_section
|
23
|
-
while section and section["parent"]
|
24
|
-
section = section["parent"]
|
25
|
-
end
|
26
|
-
section
|
27
|
-
end
|
28
|
-
|
29
|
-
def related_artefacts
|
30
|
-
return [] unless self.related
|
31
|
-
self.related.map do |r|
|
32
|
-
self.class.new(r)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def method_missing(name, *args)
|
37
|
-
value = @data[name.to_s]
|
38
|
-
value ||= @data["details"][name.to_s] if @data["details"]
|
39
|
-
value
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def id_to_slug(id)
|
45
|
-
id.split('/').last.chomp('.json')
|
46
|
-
end
|
47
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class Slimmer::Processors::RelatedItemsInserter
|
2
|
-
include ERB::Util
|
3
|
-
|
4
|
-
def initialize(skin, artefact)
|
5
|
-
@skin = skin
|
6
|
-
@artefact = artefact
|
7
|
-
end
|
8
|
-
|
9
|
-
def filter(content_document, page_template)
|
10
|
-
if content_document.at_css('body.mainstream div#related-items')
|
11
|
-
page_template.at_css('body.mainstream div#related-items').replace(related_item_block)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def related_item_block
|
18
|
-
artefact = @artefact
|
19
|
-
html = ERB.new(@skin.template('related.raw')).result(binding)
|
20
|
-
Nokogiri::HTML.fragment(html)
|
21
|
-
end
|
22
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
module Slimmer::Processors
|
2
|
-
class SectionInserter
|
3
|
-
def initialize(artefact)
|
4
|
-
@artefact = artefact
|
5
|
-
end
|
6
|
-
|
7
|
-
def filter(src, dest)
|
8
|
-
if @artefact and (list = dest.at_css('#global-breadcrumb ol'))
|
9
|
-
if (section = @artefact.primary_section)
|
10
|
-
sections = recurse_sections(section)
|
11
|
-
current = sections.pop
|
12
|
-
sections.each do |section|
|
13
|
-
append_tag(list, section)
|
14
|
-
end
|
15
|
-
append_tag(list, current, :strong => true)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def recurse_sections(section, current = nil)
|
23
|
-
current = [section] unless current
|
24
|
-
|
25
|
-
if section['parent']
|
26
|
-
current.unshift(section['parent'])
|
27
|
-
current = recurse_sections(section['parent'], current)
|
28
|
-
end
|
29
|
-
current
|
30
|
-
end
|
31
|
-
|
32
|
-
def append_tag(list, tag, opts = {})
|
33
|
-
link_node = Nokogiri::XML::Node.new('a', list)
|
34
|
-
link_node['href'] = tag["content_with_tag"]["web_url"]
|
35
|
-
link_node.content = tag["title"]
|
36
|
-
|
37
|
-
list_item = Nokogiri::XML::Node.new('li', list)
|
38
|
-
if opts[:strong]
|
39
|
-
strong = Nokogiri::XML::Node.new('strong', list)
|
40
|
-
strong.add_child(link_node)
|
41
|
-
list_item.add_child(strong)
|
42
|
-
else
|
43
|
-
list_item.add_child(link_node)
|
44
|
-
end
|
45
|
-
|
46
|
-
list.add_child(list_item)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|