slimmer 13.2.0 → 14.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 +29 -0
- data/Rakefile +3 -3
- data/bin/render_slimmer_error +13 -14
- data/lib/slimmer.rb +26 -26
- data/lib/slimmer/app.rb +12 -26
- data/lib/slimmer/cucumber.rb +2 -2
- data/lib/slimmer/processors/body_class_copier.rb +4 -4
- data/lib/slimmer/processors/body_inserter.rb +3 -3
- data/lib/slimmer/processors/conditional_comment_mover.rb +2 -2
- data/lib/slimmer/processors/header_context_inserter.rb +1 -1
- data/lib/slimmer/processors/inside_header_inserter.rb +2 -2
- data/lib/slimmer/processors/metadata_inserter.rb +9 -9
- data/lib/slimmer/processors/navigation_mover.rb +4 -4
- data/lib/slimmer/processors/search_parameter_inserter.rb +6 -6
- data/lib/slimmer/processors/search_path_setter.rb +2 -2
- data/lib/slimmer/processors/tag_mover.rb +7 -7
- data/lib/slimmer/processors/title_inserter.rb +4 -4
- data/lib/slimmer/railtie.rb +11 -2
- data/lib/slimmer/rspec.rb +3 -3
- data/lib/slimmer/skin.rb +7 -14
- data/lib/slimmer/test.rb +3 -3
- data/lib/slimmer/version.rb +1 -1
- data/lib/tasks/slimmer.rake +1 -1
- metadata +60 -47
- data/lib/tasks/lint.rake +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e29edb1500e56cda58cd5b43463f19beb2b8e1e53a2a0c0c7bf4f88b1542c3d
|
4
|
+
data.tar.gz: 90a425692e649c7f941f9f45a8966babff2f31dc888ada70d47ea86b7b365002
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2132180bb938d0db3a8dfe094a45b173254b52ec6847977480ae14a9ceec8a2c44da0dd54bfc7c4f062a2e050710ac5cdf3137b46a238993c40b148df631032f
|
7
|
+
data.tar.gz: cb45e29c4f0d6d3874352a89f29146cc154279430a58535fe3e9ff6d46e53900171534a29209e5432f203073fe1708f578181d800f595d07844be52eda8d15f4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,32 @@
|
|
1
|
+
# 14.0.0
|
2
|
+
|
3
|
+
* Remove handling of non-200 responses (#245)
|
4
|
+
|
5
|
+
# 13.4.0
|
6
|
+
|
7
|
+
* Revert X-Slimmer-Ignore-Error header (#246)
|
8
|
+
|
9
|
+
# 13.3.0
|
10
|
+
|
11
|
+
* Add X-Slimmer-Ignore-Error header flag to prevent overriding non-200 status responses
|
12
|
+
|
13
|
+
# 13.2.2
|
14
|
+
|
15
|
+
* Fix bug where parent_name was called without app
|
16
|
+
|
17
|
+
# 13.2.1
|
18
|
+
|
19
|
+
* Fix deprecation warning: `Module#parent_name` has been renamed to
|
20
|
+
`module_parent_name`. `parent_name` is deprecated and will be removed in
|
21
|
+
Rails 6.1. (#237)
|
22
|
+
* Migrate from govuk-lint to rubocop-govuk (#237)
|
23
|
+
* Remove lint rake task (#237)
|
24
|
+
* Fix linting issues (#237)
|
25
|
+
* Fix deprecation warning: Mocha deprecation warning at
|
26
|
+
/my/local/path/to/test/test_helper.rb:6:in 'require': Require
|
27
|
+
'mocha/test_unit', 'mocha/minitest' or 'mocha/api' instead of 'mocha/setup'.
|
28
|
+
(#237)
|
29
|
+
|
1
30
|
# 13.2.0
|
2
31
|
|
3
32
|
* Upgrade Ruby version to 2.6.5. (#234)
|
data/Rakefile
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
require "bundler/gem_tasks"
|
4
4
|
require "rdoc/task"
|
5
|
-
require
|
5
|
+
require "rake/testtask"
|
6
6
|
|
7
|
-
Dir.glob(
|
7
|
+
Dir.glob("lib/tasks/*.rake").each { |r| import r }
|
8
8
|
|
9
9
|
RDoc::Task.new do |rd|
|
10
10
|
rd.rdoc_files.include("lib/**/*.rb")
|
@@ -18,4 +18,4 @@ Rake::TestTask.new("test") do |t|
|
|
18
18
|
t.verbose = true
|
19
19
|
end
|
20
20
|
|
21
|
-
task :
|
21
|
+
task default: %i[test]
|
data/bin/render_slimmer_error
CHANGED
@@ -1,26 +1,25 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "optparse"
|
4
|
+
require "slimmer"
|
5
|
+
require "logger"
|
6
6
|
|
7
7
|
options = {}
|
8
|
-
OptionParser.new do |opts|
|
9
|
-
opts.on
|
10
|
-
'Template to render' do |v|
|
8
|
+
option_parser = OptionParser.new do |opts|
|
9
|
+
opts.on "-t", "--template=TEMPLATE", "Template to render" do |v|
|
11
10
|
options[:template] = v
|
12
11
|
end
|
13
12
|
|
14
|
-
opts.on
|
15
|
-
'Host that serves assets used in the template' do |v|
|
13
|
+
opts.on "-h", "--asset-host=HOST", "Host that serves assets used in the template" do |v|
|
16
14
|
options[:asset_host] = v
|
17
15
|
end
|
18
16
|
|
19
|
-
opts.on
|
20
|
-
'File to write static error page to' do |v|
|
17
|
+
opts.on "-o", "--output-file=FILE", "File to write static error page to" do |v|
|
21
18
|
options[:file] = v
|
22
19
|
end
|
23
|
-
end
|
20
|
+
end
|
21
|
+
|
22
|
+
option_parser.parse!
|
24
23
|
|
25
24
|
raise "Please specify a template" unless options[:template]
|
26
25
|
raise "Please specify an asset host" unless options[:asset_host]
|
@@ -28,13 +27,13 @@ raise "Please specify an output file" unless options[:file]
|
|
28
27
|
|
29
28
|
logger = Logger.new STDOUT
|
30
29
|
logger.level = Logger::DEBUG
|
31
|
-
skin = Slimmer::Skin.new options[:asset_host], false, :
|
30
|
+
skin = Slimmer::Skin.new options[:asset_host], false, logger: logger
|
32
31
|
static_error = skin.error nil, options[:template], Nokogiri::HTML("").to_html
|
33
32
|
|
34
|
-
if options[:file] ==
|
33
|
+
if options[:file] == "-"
|
35
34
|
STDOUT.print static_error
|
36
35
|
else
|
37
|
-
File.open options[:file],
|
36
|
+
File.open options[:file], "w" do |f|
|
38
37
|
f.print static_error
|
39
38
|
end
|
40
39
|
end
|
data/lib/slimmer.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require "nokogiri"
|
2
|
+
require "erb"
|
3
|
+
require "plek"
|
4
|
+
require "null_logger"
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
6
|
+
require "slimmer/version"
|
7
|
+
require "slimmer/railtie" if defined? Rails
|
8
8
|
|
9
9
|
module Slimmer
|
10
10
|
CACHE_TTL = 60
|
@@ -19,29 +19,29 @@ module Slimmer
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
autoload :Railtie,
|
23
|
-
autoload :Skin,
|
22
|
+
autoload :Railtie, "slimmer/railtie"
|
23
|
+
autoload :Skin, "slimmer/skin"
|
24
24
|
|
25
|
-
autoload :Template,
|
26
|
-
autoload :App,
|
27
|
-
autoload :Headers,
|
28
|
-
autoload :HTTPClient,
|
25
|
+
autoload :Template, "slimmer/template"
|
26
|
+
autoload :App, "slimmer/app"
|
27
|
+
autoload :Headers, "slimmer/headers"
|
28
|
+
autoload :HTTPClient, "slimmer/http_client"
|
29
29
|
|
30
30
|
module Processors
|
31
|
-
autoload :BodyClassCopier,
|
32
|
-
autoload :BodyInserter,
|
33
|
-
autoload :ConditionalCommentMover,
|
34
|
-
autoload :FooterRemover,
|
35
|
-
autoload :MetadataInserter,
|
36
|
-
autoload :HeaderContextInserter,
|
37
|
-
autoload :InsideHeaderInserter,
|
38
|
-
autoload :NavigationMover,
|
39
|
-
autoload :SearchIndexSetter,
|
40
|
-
autoload :SearchPathSetter,
|
41
|
-
autoload :SearchParameterInserter,
|
42
|
-
autoload :SearchRemover,
|
43
|
-
autoload :TagMover,
|
44
|
-
autoload :TitleInserter,
|
31
|
+
autoload :BodyClassCopier, "slimmer/processors/body_class_copier"
|
32
|
+
autoload :BodyInserter, "slimmer/processors/body_inserter"
|
33
|
+
autoload :ConditionalCommentMover, "slimmer/processors/conditional_comment_mover"
|
34
|
+
autoload :FooterRemover, "slimmer/processors/footer_remover"
|
35
|
+
autoload :MetadataInserter, "slimmer/processors/metadata_inserter"
|
36
|
+
autoload :HeaderContextInserter, "slimmer/processors/header_context_inserter"
|
37
|
+
autoload :InsideHeaderInserter, "slimmer/processors/inside_header_inserter"
|
38
|
+
autoload :NavigationMover, "slimmer/processors/navigation_mover"
|
39
|
+
autoload :SearchIndexSetter, "slimmer/processors/search_index_setter"
|
40
|
+
autoload :SearchPathSetter, "slimmer/processors/search_path_setter"
|
41
|
+
autoload :SearchParameterInserter, "slimmer/processors/search_parameter_inserter"
|
42
|
+
autoload :SearchRemover, "slimmer/processors/search_remover"
|
43
|
+
autoload :TagMover, "slimmer/processors/tag_mover"
|
44
|
+
autoload :TitleInserter, "slimmer/processors/title_inserter"
|
45
45
|
end
|
46
46
|
|
47
47
|
class TemplateNotFoundException < StandardError; end
|
data/lib/slimmer/app.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "slimmer/govuk_request_id"
|
2
2
|
|
3
3
|
module Slimmer
|
4
4
|
class App
|
@@ -10,15 +10,11 @@ module Slimmer
|
|
10
10
|
|
11
11
|
logger = options[:logger] || NullLogger.instance
|
12
12
|
self.logger = logger
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
self.logger.level = 1 # info
|
18
|
-
end
|
13
|
+
if logger&.level&.zero? # Log set to debug level
|
14
|
+
unless options[:enable_debugging]
|
15
|
+
self.logger = logger.dup
|
16
|
+
self.logger.level = 1 # info
|
19
17
|
end
|
20
|
-
rescue NoMethodError # rubocop:disable Lint/HandleExceptions
|
21
|
-
# In case logger doesn't respond_to? :level
|
22
18
|
end
|
23
19
|
|
24
20
|
if options.key? :template_path
|
@@ -56,11 +52,11 @@ module Slimmer
|
|
56
52
|
end
|
57
53
|
|
58
54
|
def in_development?
|
59
|
-
ENV[
|
55
|
+
ENV["RAILS_ENV"] == "development"
|
60
56
|
end
|
61
57
|
|
62
58
|
def skip_slimmer_param?(env)
|
63
|
-
skip = Rack::Request.new(env).params[
|
59
|
+
skip = Rack::Request.new(env).params["skip_slimmer"]
|
64
60
|
skip && skip.to_i.positive?
|
65
61
|
end
|
66
62
|
|
@@ -84,26 +80,16 @@ module Slimmer
|
|
84
80
|
|
85
81
|
def rewrite_response(env, response)
|
86
82
|
request = Rack::Request.new(env)
|
83
|
+
return response.finish unless response.status == 200
|
87
84
|
|
88
85
|
# Store the request id so it can be passed on with any template requests
|
89
|
-
GovukRequestId.value = env[
|
90
|
-
|
91
|
-
rewritten_body = case response.status
|
92
|
-
when 200
|
93
|
-
@skin.success request, response, s(response.body)
|
94
|
-
when 403
|
95
|
-
@skin.error '403', s(response.body), request.env
|
96
|
-
when 404
|
97
|
-
@skin.error '404', s(response.body), request.env
|
98
|
-
when 410
|
99
|
-
@skin.error '410', s(response.body), request.env
|
100
|
-
else
|
101
|
-
@skin.error '500', s(response.body), request.env
|
102
|
-
end
|
86
|
+
GovukRequestId.value = env["HTTP_GOVUK_REQUEST_ID"]
|
103
87
|
|
88
|
+
rewritten_body = @skin.success request, response, s(response.body)
|
104
89
|
rewritten_body = [rewritten_body] unless rewritten_body.respond_to?(:each)
|
90
|
+
|
105
91
|
response.body = rewritten_body
|
106
|
-
response.headers[
|
92
|
+
response.headers["Content-Length"] = content_length(response.body)
|
107
93
|
|
108
94
|
response.finish
|
109
95
|
end
|
data/lib/slimmer/cucumber.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
require
|
1
|
+
require "cucumber"
|
2
2
|
|
3
|
-
require
|
3
|
+
require "slimmer/test"
|
@@ -2,11 +2,11 @@ module Slimmer::Processors
|
|
2
2
|
class BodyClassCopier
|
3
3
|
def filter(src, dest)
|
4
4
|
src_body_tag = src.at_css("body")
|
5
|
-
dest_body_tag = dest.at_css(
|
5
|
+
dest_body_tag = dest.at_css("body")
|
6
6
|
if src_body_tag.has_attribute?("class")
|
7
|
-
combinded_classes = dest_body_tag.attr(
|
8
|
-
combinded_classes << src_body_tag.attr(
|
9
|
-
dest_body_tag.set_attribute("class", combinded_classes.join(
|
7
|
+
combinded_classes = dest_body_tag.attr("class").to_s.split(/ +/)
|
8
|
+
combinded_classes << src_body_tag.attr("class").to_s.split(/ +/)
|
9
|
+
dest_body_tag.set_attribute("class", combinded_classes.join(" "))
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Slimmer::Processors
|
2
2
|
class BodyInserter
|
3
|
-
def initialize(source_id =
|
4
|
-
@source_selector =
|
5
|
-
@destination_selector =
|
3
|
+
def initialize(source_id = "wrapper", destination_id = "wrapper")
|
4
|
+
@source_selector = "#" + source_id
|
5
|
+
@destination_selector = "#" + destination_id
|
6
6
|
end
|
7
7
|
|
8
8
|
def filter(src, dest)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Slimmer::Processors
|
2
2
|
class ConditionalCommentMover
|
3
3
|
def filter(src, dest)
|
4
|
-
src.xpath(
|
4
|
+
src.xpath("//comment()").each do |comment|
|
5
5
|
if match_conditional_comments(comment)
|
6
|
-
dest.at_xpath(
|
6
|
+
dest.at_xpath("/html/head") << comment
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Slimmer::Processors
|
2
2
|
class InsideHeaderInserter
|
3
3
|
def filter(src, dest)
|
4
|
-
insertion = src.at_css(
|
4
|
+
insertion = src.at_css(".slimmer-inside-header")
|
5
5
|
|
6
6
|
if insertion
|
7
|
-
logo = dest.at_css(
|
7
|
+
logo = dest.at_css(".header-logo")
|
8
8
|
logo.add_next_sibling(insertion.inner_html) unless logo.nil?
|
9
9
|
end
|
10
10
|
end
|
@@ -6,22 +6,22 @@ module Slimmer::Processors
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def filter(_src, dest)
|
9
|
-
head = dest.at_css(
|
9
|
+
head = dest.at_css("head")
|
10
10
|
|
11
|
-
add_meta_tag(
|
12
|
-
add_meta_tag(
|
13
|
-
add_meta_tag(
|
14
|
-
add_meta_tag(
|
15
|
-
add_meta_tag(
|
11
|
+
add_meta_tag("analytics:organisations", @headers[Slimmer::Headers::ORGANISATIONS_HEADER], head)
|
12
|
+
add_meta_tag("analytics:world-locations", @headers[Slimmer::Headers::WORLD_LOCATIONS_HEADER], head)
|
13
|
+
add_meta_tag("format", @headers[Slimmer::Headers::FORMAT_HEADER], head)
|
14
|
+
add_meta_tag("search-result-count", @headers[Slimmer::Headers::RESULT_COUNT_HEADER], head)
|
15
|
+
add_meta_tag("rendering-application", @app_name, head)
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def add_meta_tag(name, content, head)
|
21
21
|
if content
|
22
|
-
meta_node = Nokogiri::XML::Node.new(
|
23
|
-
meta_node[
|
24
|
-
meta_node[
|
22
|
+
meta_node = Nokogiri::XML::Node.new("meta", head)
|
23
|
+
meta_node["name"] = "govuk:#{name}"
|
24
|
+
meta_node["content"] = content
|
25
25
|
|
26
26
|
head.add_child(meta_node)
|
27
27
|
end
|
@@ -9,16 +9,16 @@ class Slimmer::Processors::NavigationMover
|
|
9
9
|
if proposition_header && global_header
|
10
10
|
proposition_header.remove
|
11
11
|
|
12
|
-
global_header[
|
12
|
+
global_header["class"] = [global_header["class"], "with-proposition"].compact.join(" ")
|
13
13
|
|
14
14
|
header_block = Nokogiri::HTML.fragment(proposition_header_block)
|
15
|
-
header_block.at_css(
|
15
|
+
header_block.at_css(".content") << proposition_header
|
16
16
|
|
17
|
-
global_header.at_css(
|
17
|
+
global_header.at_css(".header-wrapper") << header_block
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
def proposition_header_block
|
22
|
-
@proposition_header_block ||= @skin.template(
|
22
|
+
@proposition_header_block ||= @skin.template("proposition_menu")
|
23
23
|
end
|
24
24
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "json"
|
2
2
|
|
3
3
|
module Slimmer::Processors
|
4
4
|
class SearchParameterInserter
|
@@ -7,7 +7,7 @@ module Slimmer::Processors
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def filter(_content_document, page_template)
|
10
|
-
search_form = page_template.at_css(
|
10
|
+
search_form = page_template.at_css("form#search")
|
11
11
|
if search_parameters && search_form
|
12
12
|
search_parameters.each_pair do |name, value|
|
13
13
|
# Value can either be a string or an array of values
|
@@ -24,10 +24,10 @@ module Slimmer::Processors
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def add_hidden_input(search_form, name, value)
|
27
|
-
element = Nokogiri::XML::Node.new(
|
28
|
-
element[
|
29
|
-
element[
|
30
|
-
element[
|
27
|
+
element = Nokogiri::XML::Node.new("input", search_form)
|
28
|
+
element["type"] = "hidden"
|
29
|
+
element["name"] = name
|
30
|
+
element["value"] = value.to_s
|
31
31
|
search_form.add_child(element)
|
32
32
|
end
|
33
33
|
|
@@ -5,8 +5,8 @@ module Slimmer::Processors
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def filter(_content_document, page_template)
|
8
|
-
if search_scope && page_template.at_css(
|
9
|
-
page_template.at_css(
|
8
|
+
if search_scope && page_template.at_css("form#search")
|
9
|
+
page_template.at_css("form#search").attributes["action"].value = search_scope
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Slimmer::Processors
|
2
2
|
class TagMover
|
3
3
|
def filter(src, dest)
|
4
|
-
move_tags(src, dest,
|
5
|
-
move_tags(src, dest,
|
6
|
-
move_tags(src, dest,
|
7
|
-
move_tags(src, dest,
|
4
|
+
move_tags(src, dest, "script", dest_node: "body", keys: %w(src inner_html))
|
5
|
+
move_tags(src, dest, "link", must_have: %w[href])
|
6
|
+
move_tags(src, dest, "meta", must_have: %w(name content), keys: %w[name content http-equiv], insertion_location: :top)
|
7
|
+
move_tags(src, dest, "meta", must_have: %w(property content), keys: %w(property content), insertion_location: :top)
|
8
8
|
end
|
9
9
|
|
10
10
|
def include_tag?(node, min_attrs)
|
@@ -13,7 +13,7 @@ module Slimmer::Processors
|
|
13
13
|
|
14
14
|
def tag_fingerprint(node, attrs)
|
15
15
|
collected_attrs = attrs.collect do |attr_name|
|
16
|
-
if attr_name ==
|
16
|
+
if attr_name == "inner_html"
|
17
17
|
node.content
|
18
18
|
else
|
19
19
|
node.has_attribute?(attr_name) ? node.attr(attr_name) : nil
|
@@ -24,7 +24,7 @@ module Slimmer::Processors
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def wrap_node(src, node)
|
27
|
-
if node.previous_sibling.to_s =~ /<!--\[if[^\]]+\]><!-->/ && node.next_sibling.to_s ==
|
27
|
+
if node.previous_sibling.to_s =~ /<!--\[if[^\]]+\]><!-->/ && node.next_sibling.to_s == "<!--<![endif]-->"
|
28
28
|
node = Nokogiri::XML::NodeSet.new(src, [node.previous_sibling, node, node.next_sibling])
|
29
29
|
end
|
30
30
|
node
|
@@ -36,7 +36,7 @@ module Slimmer::Processors
|
|
36
36
|
already_there = dest.css(type).map { |node|
|
37
37
|
tag_fingerprint(node, comparison_attrs)
|
38
38
|
}.compact
|
39
|
-
dest_node = opts[:dest_node] ||
|
39
|
+
dest_node = opts[:dest_node] || "head"
|
40
40
|
|
41
41
|
src.css(type).each do |node|
|
42
42
|
if include_tag?(node, min_attrs) && !already_there.include?(tag_fingerprint(node, comparison_attrs))
|
@@ -1,18 +1,18 @@
|
|
1
1
|
module Slimmer::Processors
|
2
2
|
class TitleInserter
|
3
3
|
def filter(src, dest)
|
4
|
-
title = src.at_css(
|
5
|
-
head = dest.at_xpath(
|
4
|
+
title = src.at_css("head title")
|
5
|
+
head = dest.at_xpath("/html/head")
|
6
6
|
if head && title
|
7
7
|
insert_title(title, head)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
11
|
def insert_title(title, head)
|
12
|
-
if head.at_css(
|
12
|
+
if head.at_css("title").nil?
|
13
13
|
head.first_element_child.nil? ? head << title : head.first_element_child.before(title)
|
14
14
|
else
|
15
|
-
head.at_css(
|
15
|
+
head.at_css("title").replace(title)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/slimmer/railtie.rb
CHANGED
@@ -4,11 +4,20 @@ module Slimmer
|
|
4
4
|
|
5
5
|
initializer "slimmer.configure" do |app|
|
6
6
|
slimmer_config = app.config.slimmer.to_hash
|
7
|
-
|
8
|
-
app_name = ENV['GOVUK_APP_NAME'] || app.class.parent_name
|
7
|
+
app_name = ENV["GOVUK_APP_NAME"] || Slimmer::Railtie.parent_name(app)
|
9
8
|
slimmer_config = slimmer_config.reverse_merge(app_name: app_name)
|
10
9
|
|
11
10
|
app.middleware.use Slimmer::App, slimmer_config
|
12
11
|
end
|
12
|
+
|
13
|
+
# TODO: remove this method when all our apps are in rails 6 and substitute
|
14
|
+
# it with: app_name = ENV['GOVUK_APP_NAME'] || app.class.module_parent_name
|
15
|
+
def self.parent_name(app)
|
16
|
+
if app.class.respond_to?(:module_parent_name)
|
17
|
+
app.class.module_parent_name
|
18
|
+
else
|
19
|
+
app.class.parent_name
|
20
|
+
end
|
21
|
+
end
|
13
22
|
end
|
14
23
|
end
|
data/lib/slimmer/rspec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "rspec/core"
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "slimmer"
|
4
|
+
require "slimmer/test"
|
data/lib/slimmer/skin.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "rest_client"
|
2
|
+
require "slimmer/govuk_request_id"
|
3
3
|
|
4
4
|
module Slimmer
|
5
5
|
class Skin
|
@@ -10,7 +10,7 @@ module Slimmer
|
|
10
10
|
@asset_host = options[:asset_host]
|
11
11
|
|
12
12
|
@logger = options[:logger] || NullLogger.instance
|
13
|
-
@strict = options[:strict] || %w{development test}.include?(ENV[
|
13
|
+
@strict = options[:strict] || %w{development test}.include?(ENV["RACK_ENV"])
|
14
14
|
end
|
15
15
|
|
16
16
|
def template(template_name)
|
@@ -30,7 +30,7 @@ module Slimmer
|
|
30
30
|
|
31
31
|
def template_url(template_name)
|
32
32
|
host = asset_host.dup
|
33
|
-
host +=
|
33
|
+
host += "/" unless host =~ /\/$/
|
34
34
|
"#{host}templates/#{template_name}.html.erb"
|
35
35
|
end
|
36
36
|
|
@@ -59,7 +59,7 @@ module Slimmer
|
|
59
59
|
lines = [""] + html.split("\n")
|
60
60
|
from = [1, error.line - context_size].max
|
61
61
|
to = [lines.size - 1, error.line + context_size].min
|
62
|
-
context = (from..to).zip(lines[from..to]).map { |lineno, line| "%4d: %s" % [lineno, line] }
|
62
|
+
context = (from..to).zip(lines[from..to]).map { |lineno, line| "%4d: %s" % [lineno, line] }
|
63
63
|
marker = " " * (error.column - 1) + "-----v"
|
64
64
|
context.insert(context_size, marker)
|
65
65
|
context.join("\n")
|
@@ -92,7 +92,7 @@ module Slimmer
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def success(source_request, response, body)
|
95
|
-
wrapper_id = options[:wrapper_id] ||
|
95
|
+
wrapper_id = options[:wrapper_id] || "wrapper"
|
96
96
|
|
97
97
|
processors = [
|
98
98
|
Processors::TitleInserter.new,
|
@@ -109,15 +109,8 @@ module Slimmer
|
|
109
109
|
Processors::SearchRemover.new(response.headers),
|
110
110
|
]
|
111
111
|
|
112
|
-
template_name = response.headers[Headers::TEMPLATE_HEADER] ||
|
112
|
+
template_name = response.headers[Headers::TEMPLATE_HEADER] || "core_layout"
|
113
113
|
process(processors, body, template(template_name), source_request.env)
|
114
114
|
end
|
115
|
-
|
116
|
-
def error(template_name, body, rack_env)
|
117
|
-
processors = [
|
118
|
-
Processors::TitleInserter.new
|
119
|
-
]
|
120
|
-
process(processors, body, template(template_name), rack_env)
|
121
|
-
end
|
122
115
|
end
|
123
116
|
end
|
data/lib/slimmer/test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "slimmer/skin"
|
2
2
|
|
3
3
|
module Slimmer
|
4
4
|
class Skin
|
@@ -6,10 +6,10 @@ module Slimmer
|
|
6
6
|
logger.debug "Slimmer: TEST MODE - Loading fixture template from #{__FILE__}"
|
7
7
|
if name =~ /\A(.*)\.raw\z/
|
8
8
|
%{<div id="test-#{$1}"></div>}
|
9
|
-
elsif File.exist?(template_path = File.join(File.dirname(__FILE__),
|
9
|
+
elsif File.exist?(template_path = File.join(File.dirname(__FILE__), "test_templates", "#{name}.html"))
|
10
10
|
File.read(template_path)
|
11
11
|
else
|
12
|
-
File.read(File.join(File.dirname(__FILE__),
|
12
|
+
File.read(File.join(File.dirname(__FILE__), "test_templates", "wrapper.html"))
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
data/lib/slimmer/version.rb
CHANGED
data/lib/tasks/slimmer.rake
CHANGED
metadata
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 14.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,21 +39,21 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: '1.7'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: '1.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: null_logger
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,21 +67,21 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: plek
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 1.1.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 1.1.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rack
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rest-client
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,89 +109,89 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: minitest
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: '5.4'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: '5.4'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: mocha
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
131
|
+
version: '1.1'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '1.1'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: rack-test
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.
|
145
|
+
version: 0.6.1
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.
|
152
|
+
version: 0.6.1
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: rails
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
159
|
+
version: 6.0.2
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
166
|
+
version: 6.0.2
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: rake
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
173
|
+
version: 0.9.2.2
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
180
|
+
version: 0.9.2.2
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
182
|
+
name: rubocop-govuk
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: 2.0.0
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
194
|
+
version: 2.0.0
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: timecop
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,19 +207,33 @@ dependencies:
|
|
207
207
|
- !ruby/object:Gem::Version
|
208
208
|
version: 0.5.1
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
210
|
+
name: webmock
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
|
-
- -
|
213
|
+
- - '='
|
214
214
|
- !ruby/object:Gem::Version
|
215
|
-
version: 3.
|
215
|
+
version: 3.5.0
|
216
216
|
type: :development
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
|
-
- -
|
220
|
+
- - '='
|
221
221
|
- !ruby/object:Gem::Version
|
222
|
-
version: 3.
|
222
|
+
version: 3.5.0
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: yard
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - '='
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: 0.8.7.6
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - '='
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: 0.8.7.6
|
223
237
|
description: Rack middleware for skinning pages using a specific template
|
224
238
|
email:
|
225
239
|
- govuk-dev@digital.cabinet-office.gov.uk
|
@@ -260,7 +274,6 @@ files:
|
|
260
274
|
- lib/slimmer/test_templates/proposition_menu.html
|
261
275
|
- lib/slimmer/test_templates/wrapper.html
|
262
276
|
- lib/slimmer/version.rb
|
263
|
-
- lib/tasks/lint.rake
|
264
277
|
- lib/tasks/slimmer.rake
|
265
278
|
homepage: http://github.com/alphagov/slimmer
|
266
279
|
licenses:
|
data/lib/tasks/lint.rake
DELETED