slimmer 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,8 @@
1
1
  class Slimmer::Processors::RelatedItemsInserter
2
2
  include ERB::Util
3
3
 
4
- def initialize(related_block_template, artefact)
5
- @related_block_template = related_block_template
4
+ def initialize(skin, artefact)
5
+ @skin = skin
6
6
  @artefact = artefact
7
7
  end
8
8
 
@@ -14,7 +14,8 @@ class Slimmer::Processors::RelatedItemsInserter
14
14
 
15
15
  def related_item_block
16
16
  artefact = @artefact
17
- html = ERB.new(@related_block_template).result(binding)
17
+ related_block_template = @skin.template('related.raw')
18
+ html = ERB.new(related_block_template).result(binding)
18
19
  Nokogiri::HTML.fragment(html)
19
20
  end
20
21
  end
@@ -0,0 +1,24 @@
1
+ module Slimmer::Processors
2
+ class ReportAProblemInserter
3
+ include ERB::Util
4
+
5
+ def initialize(skin, url)
6
+ @skin = skin
7
+ @request_url = url
8
+ end
9
+
10
+ def filter(content_document, page_template)
11
+ if (placeholder = page_template.at_css('body #report-a-problem'))
12
+ placeholder.replace(report_a_problem_block)
13
+ end
14
+ end
15
+
16
+ def report_a_problem_block
17
+ request_url = @request_url
18
+ report_a_problem_template = @skin.template('report_a_problem.raw')
19
+ html = ERB.new(report_a_problem_template).result(binding)
20
+ Nokogiri::HTML.fragment(html)
21
+ end
22
+ end
23
+ end
24
+
data/lib/slimmer/skin.rb CHANGED
@@ -131,8 +131,9 @@ module Slimmer
131
131
  Processors::SectionInserter.new(),
132
132
  Processors::GoogleAnalyticsConfigurator.new(response),
133
133
  Processors::SearchPathSetter.new(response),
134
- Processors::RelatedItemsInserter.new(template('related.raw'), artefact),
134
+ Processors::RelatedItemsInserter.new(self, artefact),
135
135
  Processors::LogoClassInserter.new(artefact),
136
+ Processors::ReportAProblemInserter.new(self, source_request.url),
136
137
  ]
137
138
 
138
139
  template_name = response.headers[Headers::TEMPLATE_HEADER] || 'wrapper'
data/lib/slimmer/test.rb CHANGED
@@ -5,8 +5,8 @@ module Slimmer
5
5
  class Skin
6
6
  def load_template name
7
7
  logger.debug "Slimmer: TEST MODE - Loading fixture template from #{__FILE__}"
8
- if name == 'related.raw'
9
- %{<div id="test-related-items"></div>}
8
+ if name =~ /\A(.*)\.raw\z/
9
+ %{<div id="test-#{$1}"></div>}
10
10
  else
11
11
  Slimmer::TestTemplate::TEMPLATE
12
12
  end
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '2.0.0'
2
+ VERSION = '2.1.0'
3
3
  end
data/lib/slimmer.rb CHANGED
@@ -32,6 +32,7 @@ module Slimmer
32
32
  autoload :HeaderContextInserter, 'slimmer/processors/header_context_inserter'
33
33
  autoload :LogoClassInserter, 'slimmer/processors/logo_class_inserter'
34
34
  autoload :RelatedItemsInserter, 'slimmer/processors/related_items_inserter'
35
+ autoload :ReportAProblemInserter, 'slimmer/processors/report_a_problem_inserter'
35
36
  autoload :SearchPathSetter, 'slimmer/processors/search_path_setter'
36
37
  autoload :SectionInserter, 'slimmer/processors/section_inserter'
37
38
  autoload :TagMover, 'slimmer/processors/tag_mover'
@@ -0,0 +1,21 @@
1
+ <!-- report_a_problem -->
2
+ <div class="report-a-problem-container">
3
+ <form accept-charset="UTF-8" action="/feedback" method="post">
4
+ <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"></div>
5
+ <input id="url" name="url" type="hidden" value="<%= request_url %>">
6
+ <label for="what_doing">
7
+ What were you doing?
8
+ <input id="what_doing" name="what_doing" type="text">
9
+ </label>
10
+ <label for="what_happened">
11
+ What happened?
12
+ <input id="what_happened" name="what_happened" type="text">
13
+ </label>
14
+ <label for="what_expected">
15
+ What did you expect to happen?
16
+ <input id="what_expected" name="what_expected" type="text">
17
+ </label>
18
+ <input name="commit" type="submit" value="Submit">
19
+ </form>
20
+ </div>
21
+ <!-- end report_a_problem -->
@@ -5,6 +5,7 @@ class RelatedItemsInserterTest < MiniTest::Unit::TestCase
5
5
  def setup
6
6
  super
7
7
  @related_template = File.read( File.dirname(__FILE__) + "/../fixtures/related.raw.html.erb" )
8
+ @skin = stub("Skin", :template => @related_template)
8
9
  @artefact = {
9
10
  'slug' => 'vat',
10
11
  'title' => 'VAT',
@@ -32,7 +33,7 @@ class RelatedItemsInserterTest < MiniTest::Unit::TestCase
32
33
  </html>
33
34
  }
34
35
 
35
- Slimmer::Processors::RelatedItemsInserter.new(@related_template, @artefact).filter(source, template)
36
+ Slimmer::Processors::RelatedItemsInserter.new(@skin, @artefact).filter(source, template)
36
37
  assert_in template, "div.related h2", "Related topics"
37
38
  assert_in template, "div.related nav[role=navigation] ul li.answer:nth-child(1) a[href='/vat-rates']", "VAT rates"
38
39
  assert_in template, "div.related nav[role=navigation] ul li.guide:nth-child(2) a[href='/starting-to-import']", "Starting to import"
@@ -55,7 +56,9 @@ class RelatedItemsInserterTest < MiniTest::Unit::TestCase
55
56
  </html>
56
57
  }
57
58
 
58
- Slimmer::Processors::RelatedItemsInserter.new(@related_template, @artefact).filter(source, template)
59
+ @skin.expects(:template).never # Shouldn't fetch template when not inserting block
60
+
61
+ Slimmer::Processors::RelatedItemsInserter.new(@skin, @artefact).filter(source, template)
59
62
  assert_not_in template, "div.related"
60
63
  end
61
64
  end
@@ -0,0 +1,44 @@
1
+ require_relative '../test_helper'
2
+
3
+ class ReportAProblemInserterTest < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ super
7
+ @report_a_problem_template = File.read( File.dirname(__FILE__) + "/../fixtures/report_a_problem.raw.html.erb" )
8
+ @skin = stub("Skin", :template => nil)
9
+ end
10
+
11
+ def test_should_add_report_a_problem_form_using_the_template_from_static
12
+ @skin.expects(:template).with('report_a_problem.raw').returns(@report_a_problem_template)
13
+
14
+ template = as_nokogiri %{
15
+ <html>
16
+ <body">
17
+ <div id="wrapper">
18
+ <div id="report-a-problem"></div>
19
+ </div>
20
+ </body>
21
+ </html>
22
+ }
23
+
24
+ Slimmer::Processors::ReportAProblemInserter.new(@skin, "http://www.example.com/somewhere?foo=bar").filter(:any_source, template)
25
+ assert_in template, "#wrapper div.report-a-problem-container"
26
+ assert_in template, "div.report-a-problem-container form input[name=url][value='http://www.example.com/somewhere?foo=bar']"
27
+ end
28
+
29
+ def test_should_not_add_report_a_problem_form_if_wrapper_element_missing
30
+ template = as_nokogiri %{
31
+ <html>
32
+ <body class="mainstream">
33
+ <div id="wrapper">
34
+ </div>
35
+ </body>
36
+ </html>
37
+ }
38
+
39
+ @skin.expects(:template).never # Shouldn't fetch template when not inserting block
40
+
41
+ Slimmer::Processors::ReportAProblemInserter.new(@skin, "").filter(:any_source, template)
42
+ assert_not_in template, "div.report-a-problem-container"
43
+ end
44
+ end
@@ -102,19 +102,4 @@ class SectionInserterTest < MiniTest::Unit::TestCase
102
102
  Slimmer::Processors::SectionInserter.new.filter(:any_source, template)
103
103
  assert_not_in template, "nav[role=navigation]"
104
104
  end
105
-
106
- def test_should_not_blow_up_without_an_artefact
107
- template = as_nokogiri %{
108
- <html>
109
- <body>
110
- <nav role="navigation">
111
- <ol><li><a href="/">Home</a></li></ol>
112
- </nav>
113
- </body>
114
- </html>
115
- }
116
-
117
- # assert_nothing_raised do
118
- Slimmer::Processors::SectionInserter.new(nil).filter(:any_source, template)
119
- end
120
105
  end
data/test/test_helper.rb CHANGED
@@ -68,6 +68,7 @@ class SlimmerIntegrationTest < MiniTest::Unit::TestCase
68
68
 
69
69
  use_template(template_name)
70
70
  use_template('related.raw')
71
+ use_template('report_a_problem.raw')
71
72
 
72
73
  fetch_page
73
74
  end
@@ -246,6 +246,24 @@ module TypicalUsage
246
246
  end
247
247
  end
248
248
 
249
+ class ReportAProblemTest < SlimmerIntegrationTest
250
+ given_response 200, %{
251
+ <html>
252
+ <body>
253
+ <div id="wrapper">The body of the page<div id="report-a-problem"></div></div>
254
+ </body>
255
+ </html>
256
+ }
257
+
258
+ def test_should_insert_the_report_a_problem_form
259
+ assert_rendered_in_template "#wrapper .report-a-problem-container"
260
+ end
261
+
262
+ def test_should_add_the_current_url_to_the_form
263
+ assert_rendered_in_template ".report-a-problem-container input[name=url][value='http://example.org/']"
264
+ end
265
+ end
266
+
249
267
  class Error500ResponseTest < SlimmerIntegrationTest
250
268
  include Rack::Test::Methods
251
269
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: slimmer
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.0.0
5
+ version: 2.1.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-24 00:00:00 Z
14
+ date: 2012-09-10 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: nokogiri
@@ -97,7 +97,7 @@ dependencies:
97
97
  requirements:
98
98
  - - ~>
99
99
  - !ruby/object:Gem::Version
100
- version: 0.9.12
100
+ version: 0.12.4
101
101
  type: :development
102
102
  prerelease: false
103
103
  version_requirements: *id008
@@ -148,44 +148,47 @@ files:
148
148
  - README.md
149
149
  - CHANGELOG.md
150
150
  - lib/tasks/slimmer.rake
151
- - lib/slimmer/version.rb
151
+ - lib/slimmer.rb
152
+ - lib/slimmer/skin.rb
153
+ - lib/slimmer/railtie.rb
154
+ - lib/slimmer/template.rb
155
+ - lib/slimmer/test_template.rb
156
+ - lib/slimmer/test.rb
157
+ - lib/slimmer/app.rb
158
+ - lib/slimmer/processors/logo_class_inserter.rb
152
159
  - lib/slimmer/processors/body_class_copier.rb
160
+ - lib/slimmer/processors/tag_mover.rb
161
+ - lib/slimmer/processors/search_path_setter.rb
162
+ - lib/slimmer/processors/title_inserter.rb
153
163
  - lib/slimmer/processors/google_analytics_configurator.rb
164
+ - lib/slimmer/processors/conditional_comment_mover.rb
154
165
  - lib/slimmer/processors/related_items_inserter.rb
166
+ - lib/slimmer/processors/header_context_inserter.rb
155
167
  - 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
168
  - lib/slimmer/processors/admin_title_inserter.rb
169
+ - lib/slimmer/processors/report_a_problem_inserter.rb
160
170
  - 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
165
- - lib/slimmer/template.rb
166
- - lib/slimmer/railtie.rb
167
- - lib/slimmer/test.rb
168
- - lib/slimmer/skin.rb
169
- - lib/slimmer/app.rb
171
+ - lib/slimmer/processors/footer_remover.rb
170
172
  - lib/slimmer/headers.rb
171
- - lib/slimmer/test_template.rb
172
- - lib/slimmer.rb
173
+ - lib/slimmer/version.rb
173
174
  - Rakefile
174
- - test/processors/related_items_inserter_test.rb
175
- - test/processors/section_inserter_test.rb
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
181
- - test/skin_test.rb
182
175
  - test/headers_test.rb
183
- - test/test_template_dependency_on_static_test.rb
184
- - test/typical_usage_test.rb
176
+ - test/fixtures/related.raw.html.erb
185
177
  - test/fixtures/500.html.erb
186
178
  - test/fixtures/404.html.erb
187
- - test/fixtures/related.raw.html.erb
188
179
  - test/fixtures/wrapper.html.erb
180
+ - test/fixtures/report_a_problem.raw.html.erb
181
+ - test/skin_test.rb
182
+ - test/processors/logo_class_inserter_test.rb
183
+ - test/processors/google_analytics_test.rb
184
+ - test/processors/report_a_problem_inserter_test.rb
185
+ - test/processors/body_inserter_test.rb
186
+ - test/processors/search_path_setter_test.rb
187
+ - test/processors/section_inserter_test.rb
188
+ - test/processors/related_items_inserter_test.rb
189
+ - test/processors/header_context_inserter_test.rb
190
+ - test/typical_usage_test.rb
191
+ - test/test_template_dependency_on_static_test.rb
189
192
  - test/test_helper.rb
190
193
  - bin/render_slimmer_error
191
194
  homepage: http://github.com/alphagov/slimmer
@@ -201,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
204
  requirements:
202
205
  - - ">="
203
206
  - !ruby/object:Gem::Version
204
- hash: -3192498978421929573
207
+ hash: -2259214820452961452
205
208
  segments:
206
209
  - 0
207
210
  version: "0"
@@ -210,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
213
  requirements:
211
214
  - - ">="
212
215
  - !ruby/object:Gem::Version
213
- hash: -3192498978421929573
216
+ hash: -2259214820452961452
214
217
  segments:
215
218
  - 0
216
219
  version: "0"
@@ -222,19 +225,21 @@ signing_key:
222
225
  specification_version: 3
223
226
  summary: Thinner than the skinner
224
227
  test_files:
225
- - test/processors/related_items_inserter_test.rb
226
- - test/processors/section_inserter_test.rb
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
232
- - test/skin_test.rb
233
228
  - test/headers_test.rb
234
- - test/test_template_dependency_on_static_test.rb
235
- - test/typical_usage_test.rb
229
+ - test/fixtures/related.raw.html.erb
236
230
  - test/fixtures/500.html.erb
237
231
  - test/fixtures/404.html.erb
238
- - test/fixtures/related.raw.html.erb
239
232
  - test/fixtures/wrapper.html.erb
233
+ - test/fixtures/report_a_problem.raw.html.erb
234
+ - test/skin_test.rb
235
+ - test/processors/logo_class_inserter_test.rb
236
+ - test/processors/google_analytics_test.rb
237
+ - test/processors/report_a_problem_inserter_test.rb
238
+ - test/processors/body_inserter_test.rb
239
+ - test/processors/search_path_setter_test.rb
240
+ - test/processors/section_inserter_test.rb
241
+ - test/processors/related_items_inserter_test.rb
242
+ - test/processors/header_context_inserter_test.rb
243
+ - test/typical_usage_test.rb
244
+ - test/test_template_dependency_on_static_test.rb
240
245
  - test/test_helper.rb