slimmer 1.2.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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