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.
Files changed (37) hide show
  1. data/CHANGELOG.md +14 -1
  2. data/lib/slimmer.rb +28 -17
  3. data/lib/slimmer/app.rb +9 -9
  4. data/lib/slimmer/headers.rb +32 -1
  5. data/lib/slimmer/{admin_title_inserter.rb → processors/admin_title_inserter.rb} +1 -1
  6. data/lib/slimmer/{body_class_copier.rb → processors/body_class_copier.rb} +1 -1
  7. data/lib/slimmer/{body_inserter.rb → processors/body_inserter.rb} +1 -1
  8. data/lib/slimmer/{conditional_comment_mover.rb → processors/conditional_comment_mover.rb} +1 -1
  9. data/lib/slimmer/{footer_remover.rb → processors/footer_remover.rb} +1 -1
  10. data/lib/slimmer/{google_analytics_configurator.rb → processors/google_analytics_configurator.rb} +3 -2
  11. data/lib/slimmer/{header_context_inserter.rb → processors/header_context_inserter.rb} +1 -1
  12. data/lib/slimmer/processors/logo_class_inserter.rb +20 -0
  13. data/lib/slimmer/processors/related_items_inserter.rb +20 -0
  14. data/lib/slimmer/{search_path_setter.rb → processors/search_path_setter.rb} +2 -4
  15. data/lib/slimmer/{section_inserter.rb → processors/section_inserter.rb} +1 -1
  16. data/lib/slimmer/{tag_mover.rb → processors/tag_mover.rb} +1 -1
  17. data/lib/slimmer/{title_inserter.rb → processors/title_inserter.rb} +1 -1
  18. data/lib/slimmer/skin.rb +28 -20
  19. data/lib/slimmer/template.rb +1 -1
  20. data/lib/slimmer/test.rb +5 -1
  21. data/lib/slimmer/test_template.rb +7 -1
  22. data/lib/slimmer/version.rb +1 -1
  23. data/test/fixtures/related.raw.html.erb +26 -22
  24. data/test/fixtures/wrapper.html.erb +2 -0
  25. data/test/headers_test.rb +56 -1
  26. data/test/processors/body_inserter_test.rb +4 -4
  27. data/test/{google_analytics_test.rb → processors/google_analytics_test.rb} +31 -0
  28. data/test/processors/header_context_inserter_test.rb +5 -5
  29. data/test/processors/logo_class_inserter_test.rb +55 -0
  30. data/test/processors/related_items_inserter_test.rb +61 -0
  31. data/test/{search_path_setter_test.rb → processors/search_path_setter_test.rb} +0 -0
  32. data/test/processors/section_inserter_test.rb +20 -5
  33. data/test/test_helper.rb +31 -22
  34. data/test/typical_usage_test.rb +101 -70
  35. metadata +60 -70
  36. data/lib/slimmer/related_items_inserter.rb +0 -36
  37. data/lib/slimmer/url_rewriter.rb +0 -40
@@ -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
- assert_equal "791", last_response.headers['Content-Length']
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
- given_response 200, %{
75
- <html>
76
- <head><title>The title of the page</title>
77
- <meta name="something" content="yes">
78
- <meta name="x-section-name" content="This section">
79
- <meta name="x-section-link" content="/this_section">
80
- <script src="blah.js"></script>
81
- <link href="app.css" rel="stylesheet" type="text/css">
82
- </head>
83
- <body class="body_class">
84
- <div id="wrapper">The body of the page</div>
85
- </body>
86
- </html>
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
- panopticon_has_metadata(
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
- given_response 200, %{
171
- <html>
172
- <body class="mainstream">
173
- <div id="wrapper">The body of the page<div id="related-items"></div></div>
174
- </body>
175
- </html>
176
- }, {}
177
-
178
- def fetch_page
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
- given_response 200, %{
190
- <html>
191
- <body class="nonmainstream">
192
- <div id="wrapper">The body of the page<div id="related-items"></div></div>
193
- </body>
194
- </html>
195
- }, {}
196
-
197
- def fetch_page
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: 1.2.5
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-23 00:00:00 Z
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: &id007 !ruby/object:Gem::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: *id007
81
+ version_requirements: *id006
96
82
  - !ruby/object:Gem::Dependency
97
83
  name: rack-test
98
- requirement: &id008 !ruby/object:Gem::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: *id008
92
+ version_requirements: *id007
107
93
  - !ruby/object:Gem::Dependency
108
94
  name: mocha
109
- requirement: &id009 !ruby/object:Gem::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: *id009
103
+ version_requirements: *id008
118
104
  - !ruby/object:Gem::Dependency
119
105
  name: webmock
120
- requirement: &id010 !ruby/object:Gem::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: *id010
114
+ version_requirements: *id009
129
115
  - !ruby/object:Gem::Dependency
130
116
  name: therubyracer
131
- requirement: &id011 !ruby/object:Gem::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: *id011
125
+ version_requirements: *id010
140
126
  - !ruby/object:Gem::Dependency
141
127
  name: gem_publisher
142
- requirement: &id012 !ruby/object:Gem::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: *id012
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/admin_title_inserter.rb
165
- - lib/slimmer/app.rb
166
- - lib/slimmer/body_class_copier.rb
167
- - lib/slimmer/body_inserter.rb
168
- - lib/slimmer/conditional_comment_mover.rb
169
- - lib/slimmer/footer_remover.rb
170
- - lib/slimmer/google_analytics_configurator.rb
171
- - lib/slimmer/header_context_inserter.rb
172
- - lib/slimmer/headers.rb
173
- - lib/slimmer/railtie.rb
174
- - lib/slimmer/related_items_inserter.rb
175
- - lib/slimmer/search_path_setter.rb
176
- - lib/slimmer/section_inserter.rb
177
- - lib/slimmer/skin.rb
178
- - lib/slimmer/tag_mover.rb
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/fixtures/404.html.erb
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/search_path_setter_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
198
181
  - test/skin_test.rb
199
- - test/test_helper.rb
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: 4046746777648772958
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: 4046746777648772958
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.12
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/fixtures/404.html.erb
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/search_path_setter_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
247
232
  - test/skin_test.rb
248
- - test/test_helper.rb
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