slimmer 4.3.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ # 5.0.0
2
+
3
+ This release contains breaking changes.
4
+
5
+ * The report-a-problem form is now zero-configuration; it's no longer necessary
6
+ to add a `div class="report-a-problem"` or extra styling to the app. Slimmer
7
+ appends the form to the `wrapper` div by default (the default CSS selector for
8
+ the wrapper div is `#wrapper`, but this id can be overwritten by defining
9
+ `config.slimmer.wrapper_id` in the app's `application.rb`).
10
+
11
+ * The report-a-problem form is now opt-out; it's added by default, but can be
12
+ skipped by setting the `Slimmer::Headers::REPORT_A_PROBLEM_FORM` header value
13
+ to `false`.
14
+
15
+ * The steps for upgrading an app that already has report-a-problem are:
16
+
17
+ 1. Remove all `div class="report-a-problem"` from the app
18
+ 2. Remove all CSS relating to `report-a-problem` or `report-a-problem-toggle`
19
+ 3. Set `Slimmer::Headers::REPORT_A_PROBLEM_FORM` to `false` for any controllers
20
+ or actions where you don't want the form to appear.
21
+
1
22
  # 4.3.1
2
23
 
3
24
  * When running tests, don't hide exceptions in the processors. Fix a bug in the
@@ -13,6 +13,7 @@ module Slimmer
13
13
  page_owner: "Page-Owner",
14
14
  proposition: "Proposition",
15
15
  organisations: "Organisations",
16
+ report_a_problem: "Report-a-Problem",
16
17
  world_locations: "World-Locations",
17
18
  remove_meta_viewport: "Remove-Meta-Viewport",
18
19
  result_count: "Result-Count",
@@ -29,6 +30,7 @@ module Slimmer
29
30
  BETA_LABEL = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:beta_label]}"
30
31
  FORMAT_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:format]}"
31
32
  ORGANISATIONS_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:organisations]}"
33
+ REPORT_A_PROBLEM_FORM = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:report_a_problem]}"
32
34
  WORLD_LOCATIONS_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:world_locations]}"
33
35
  PAGE_OWNER_HEADER = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:page_owner]}"
34
36
  REMOVE_META_VIEWPORT = "#{HEADER_PREFIX}-#{SLIMMER_HEADER_MAPPING[:remove_meta_viewport]}"
@@ -2,15 +2,16 @@ module Slimmer::Processors
2
2
  class ReportAProblemInserter
3
3
  include ERB::Util
4
4
 
5
- def initialize(skin, url, headers)
5
+ def initialize(skin, url, headers, wrapper_id)
6
6
  @skin = skin
7
7
  @request_url = url
8
8
  @headers = headers
9
+ @wrapper_id = wrapper_id
9
10
  end
10
11
 
11
12
  def filter(content_document, page_template)
12
- if (placeholder = page_template.at_css('body #report-a-problem'))
13
- placeholder.replace(report_a_problem_block)
13
+ if enabled? && container = page_template.at_css('#' + @wrapper_id)
14
+ container.add_child(report_a_problem_block)
14
15
  end
15
16
  end
16
17
 
@@ -22,6 +23,10 @@ module Slimmer::Processors
22
23
  html = ERB.new(report_a_problem_template).result(binding)
23
24
  Nokogiri::HTML.fragment(html)
24
25
  end
26
+
27
+ private
28
+ def enabled?
29
+ @headers[Slimmer::Headers::REPORT_A_PROBLEM_FORM] != 'false'
30
+ end
25
31
  end
26
32
  end
27
-
data/lib/slimmer/skin.rb CHANGED
@@ -107,12 +107,13 @@ module Slimmer
107
107
 
108
108
  def success(source_request, response, body)
109
109
  artefact = artefact_from_header(response)
110
+ wrapper_id = options[:wrapper_id] || 'wrapper'
110
111
  processors = [
111
112
  Processors::TitleInserter.new(),
112
113
  Processors::TagMover.new(),
113
114
  Processors::NavigationMover.new(self),
114
115
  Processors::ConditionalCommentMover.new(),
115
- Processors::BodyInserter.new(options[:wrapper_id] || 'wrapper'),
116
+ Processors::BodyInserter.new(wrapper_id),
116
117
  Processors::BodyClassCopier.new,
117
118
  Processors::HeaderContextInserter.new(),
118
119
  Processors::SectionInserter.new(artefact),
@@ -121,7 +122,10 @@ module Slimmer
121
122
  Processors::SearchPathSetter.new(response),
122
123
  Processors::RelatedItemsInserter.new(self, artefact),
123
124
  Processors::LogoClassInserter.new(artefact),
124
- Processors::ReportAProblemInserter.new(self, source_request.url, response.headers),
125
+ Processors::ReportAProblemInserter.new(self,
126
+ source_request.url,
127
+ response.headers,
128
+ wrapper_id),
125
129
  Processors::MetaViewportRemover.new(response),
126
130
  Processors::BetaNoticeInserter.new(self, response.headers),
127
131
  Processors::BetaLabelInserter.new(self, response.headers),
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '4.3.1'
2
+ VERSION = '5.0.0'
3
3
  end
@@ -12,7 +12,12 @@ class ReportAProblemInserterTest < MiniTest::Test
12
12
  @skin.expects(:template).with('report_a_problem.raw').returns(@report_a_problem_template)
13
13
 
14
14
  headers = { Slimmer::Headers::APPLICATION_NAME_HEADER => 'government' }
15
- Slimmer::Processors::ReportAProblemInserter.new(@skin, "http://www.example.com/somewhere?foo=bar", headers).filter(:any_source, template)
15
+ Slimmer::Processors::ReportAProblemInserter.new(
16
+ @skin,
17
+ "http://www.example.com/somewhere?foo=bar",
18
+ headers,
19
+ "wrapper"
20
+ ).filter(:any_source, template)
16
21
 
17
22
  assert_in template, "#wrapper div.report-a-problem-container"
18
23
  assert_in template, "div.report-a-problem-container form input[name=url][value='http://www.example.com/somewhere?foo=bar']"
@@ -22,7 +27,12 @@ class ReportAProblemInserterTest < MiniTest::Test
22
27
  def test_should_add_page_owner_if_provided_in_headers
23
28
  @skin.expects(:template).with('report_a_problem.raw').returns(@report_a_problem_template)
24
29
  headers = { Slimmer::Headers::PAGE_OWNER_HEADER => 'hmrc' }
25
- Slimmer::Processors::ReportAProblemInserter.new(@skin, "http://www.example.com/somewhere", headers).filter(:any_source, template)
30
+ Slimmer::Processors::ReportAProblemInserter.new(
31
+ @skin,
32
+ "http://www.example.com/somewhere",
33
+ headers,
34
+ "wrapper"
35
+ ).filter(:any_source, template)
26
36
 
27
37
  assert_in template, "#wrapper div.report-a-problem-container"
28
38
  assert_in template, "div.report-a-problem-container form input[name=page_owner][value='hmrc']"
@@ -32,15 +42,20 @@ class ReportAProblemInserterTest < MiniTest::Test
32
42
  template = as_nokogiri %{
33
43
  <html>
34
44
  <body class="mainstream">
35
- <div id="wrapper">
36
- </div>
37
45
  </body>
38
46
  </html>
39
47
  }
40
48
 
41
49
  @skin.expects(:template).never # Shouldn't fetch template when not inserting block
42
50
 
43
- Slimmer::Processors::ReportAProblemInserter.new(@skin, "", {}).filter(:any_source, template)
51
+ Slimmer::Processors::ReportAProblemInserter.new(@skin, "", {}, "wrapper").filter(:any_source, template)
52
+ assert_not_in template, "div.report-a-problem-container"
53
+ end
54
+
55
+ def test_should_not_add_report_a_problem_form_if_app_opts_out_in_header
56
+ @skin.expects(:template).never
57
+ headers = { Slimmer::Headers::REPORT_A_PROBLEM_FORM => 'false' }
58
+ Slimmer::Processors::ReportAProblemInserter.new(@skin, "", headers, "wrapper").filter(:any_source, template)
44
59
  assert_not_in template, "div.report-a-problem-container"
45
60
  end
46
61
 
@@ -51,7 +66,7 @@ class ReportAProblemInserterTest < MiniTest::Test
51
66
  <html>
52
67
  <body">
53
68
  <div id="wrapper">
54
- <div id="report-a-problem"></div>
69
+ <div id="content"></div>
55
70
  </div>
56
71
  </body>
57
72
  </html>
@@ -35,7 +35,7 @@ module TypicalUsage
35
35
  with_rails_env('test') do
36
36
  get "/some-slug?skip_slimmer=1"
37
37
  end
38
- assert_rendered_in_template '#wrapper', "Don't template me"
38
+ assert_rendered_in_template '#wrapper', /^Don't template me/
39
39
  end
40
40
  end
41
41
 
@@ -106,7 +106,7 @@ module TypicalUsage
106
106
  end
107
107
 
108
108
  def test_should_replace_the_wrapper_using_the_app_response
109
- assert_rendered_in_template "#wrapper", "The body of the page"
109
+ assert_rendered_in_template "#wrapper", /^The body of the page/
110
110
  end
111
111
 
112
112
  def test_should_replace_the_title_using_the_app_response
@@ -241,7 +241,7 @@ module TypicalUsage
241
241
  given_response 200, %{
242
242
  <html>
243
243
  <body>
244
- <div id="wrapper">The body of the page<div id="report-a-problem"></div></div>
244
+ <div id="wrapper">The body of the page</div>
245
245
  </body>
246
246
  </html>
247
247
  }
@@ -381,7 +381,7 @@ module TypicalUsage
381
381
  }, {}, {wrapper_id: "custom_wrapper"}
382
382
 
383
383
  def test_should_replace_wrapper_with_custom_wrapper
384
- assert_rendered_in_template "body #custom_wrapper", "The body of the page"
384
+ assert_rendered_in_template "body #custom_wrapper", /^The body of the page/
385
385
  assert_no_selector "#wrapper"
386
386
  end
387
387
  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.3.1
4
+ version: 5.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-08-29 00:00:00.000000000 Z
13
+ date: 2014-09-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
17
- requirement: &19342560 !ruby/object:Gem::Requirement
17
+ requirement: &12577020 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.5.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *19342560
25
+ version_requirements: *12577020
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rack
28
- requirement: &19341520 !ruby/object:Gem::Requirement
28
+ requirement: &12591820 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.3.5
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *19341520
36
+ version_requirements: *12591820
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: plek
39
- requirement: &19340020 !ruby/object:Gem::Requirement
39
+ requirement: &12590680 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 0.1.8
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *19340020
47
+ version_requirements: *12590680
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: json
50
- requirement: &19339280 !ruby/object:Gem::Requirement
50
+ requirement: &12590040 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *19339280
58
+ version_requirements: *12590040
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: null_logger
61
- requirement: &19338080 !ruby/object:Gem::Requirement
61
+ requirement: &12588580 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *19338080
69
+ version_requirements: *12588580
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rest-client
72
- requirement: &19336560 !ruby/object:Gem::Requirement
72
+ requirement: &12587020 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *19336560
80
+ version_requirements: *12587020
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: activesupport
83
- requirement: &19425860 !ruby/object:Gem::Requirement
83
+ requirement: &12584640 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *19425860
91
+ version_requirements: *12584640
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: minitest
94
- requirement: &19422940 !ruby/object:Gem::Requirement
94
+ requirement: &12597700 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '5.4'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *19422940
102
+ version_requirements: *12597700
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rake
105
- requirement: &19421680 !ruby/object:Gem::Requirement
105
+ requirement: &12596600 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: 0.9.2.2
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *19421680
113
+ version_requirements: *12596600
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rack-test
116
- requirement: &19420360 !ruby/object:Gem::Requirement
116
+ requirement: &12595940 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: 0.6.1
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *19420360
124
+ version_requirements: *12595940
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: mocha
127
- requirement: &19508080 !ruby/object:Gem::Requirement
127
+ requirement: &12595260 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '1.1'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *19508080
135
+ version_requirements: *12595260
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: webmock
138
- requirement: &19507520 !ruby/object:Gem::Requirement
138
+ requirement: &12594540 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - =
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: 1.18.0
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *19507520
146
+ version_requirements: *12594540
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: therubyracer
149
- requirement: &19507020 !ruby/object:Gem::Requirement
149
+ requirement: &12593820 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ~>
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: 0.10.2
155
155
  type: :development
156
156
  prerelease: false
157
- version_requirements: *19507020
157
+ version_requirements: *12593820
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: gem_publisher
160
- requirement: &19506480 !ruby/object:Gem::Requirement
160
+ requirement: &12593040 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ~>
@@ -165,10 +165,10 @@ dependencies:
165
165
  version: 1.1.1
166
166
  type: :development
167
167
  prerelease: false
168
- version_requirements: *19506480
168
+ version_requirements: *12593040
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: gds-api-adapters
171
- requirement: &19505980 !ruby/object:Gem::Requirement
171
+ requirement: &12607680 !ruby/object:Gem::Requirement
172
172
  none: false
173
173
  requirements:
174
174
  - - =
@@ -176,10 +176,10 @@ dependencies:
176
176
  version: 2.7.1
177
177
  type: :development
178
178
  prerelease: false
179
- version_requirements: *19505980
179
+ version_requirements: *12607680
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: timecop
182
- requirement: &19505340 !ruby/object:Gem::Requirement
182
+ requirement: &12606600 !ruby/object:Gem::Requirement
183
183
  none: false
184
184
  requirements:
185
185
  - - ~>
@@ -187,7 +187,7 @@ dependencies:
187
187
  version: 0.5.1
188
188
  type: :development
189
189
  prerelease: false
190
- version_requirements: *19505340
190
+ version_requirements: *12606600
191
191
  description: Rack middleware for skinning pages using a specific template
192
192
  email:
193
193
  - bengriffiths@gmail.com
@@ -287,7 +287,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
287
287
  version: '0'
288
288
  segments:
289
289
  - 0
290
- hash: 1973016183234359331
290
+ hash: 4596273305865996013
291
291
  required_rubygems_version: !ruby/object:Gem::Requirement
292
292
  none: false
293
293
  requirements:
@@ -296,7 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
296
  version: '0'
297
297
  segments:
298
298
  - 0
299
- hash: 1973016183234359331
299
+ hash: 4596273305865996013
300
300
  requirements: []
301
301
  rubyforge_project: slimmer
302
302
  rubygems_version: 1.8.11