slimmer 5.0.0 → 5.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 5.0.1
2
+
3
+ * Fix MetaViewportRemover to not raise an exception if there is no meta
4
+ viewport tag. Issue became apparent in 4.3.1.
5
+
1
6
  # 5.0.0
2
7
 
3
8
  This release contains breaking changes.
data/lib/slimmer.rb CHANGED
@@ -1,8 +1,3 @@
1
- #.....................................................
2
- #"""""" Look, Gradiented-Rounded corners.... """""
3
- #////////////////////////////////////////////////////////////////
4
- ###################################################################
5
-
6
1
  require 'nokogiri'
7
2
  require 'erb'
8
3
  require 'plek'
@@ -52,8 +47,3 @@ module Slimmer
52
47
  class TemplateNotFoundException < StandardError; end
53
48
  class CouldNotRetrieveTemplate < StandardError; end
54
49
  end
55
-
56
- ######################################################################
57
- #///////////////////////////////////////////////////////////////////
58
- #"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
59
- #.......................................................
data/lib/slimmer/app.rb CHANGED
@@ -94,6 +94,8 @@ module Slimmer
94
94
  @skin.success request, response, s(response.body)
95
95
  when 404
96
96
  @skin.error '404', s(response.body), request.env
97
+ when 410
98
+ @skin.error '410', s(response.body), request.env
97
99
  else
98
100
  @skin.error '500', s(response.body), request.env
99
101
  end
@@ -1,13 +1,19 @@
1
1
  module Slimmer::Processors
2
2
  class MetaViewportRemover
3
- def initialize(response)
4
- @response = response
3
+ def initialize(skin, headers)
4
+ @skin = skin
5
+ @headers = headers
5
6
  end
6
7
 
7
- def filter(src, dest)
8
- if @response.headers[Slimmer::Headers::REMOVE_META_VIEWPORT] == "true"
9
- dest.at_xpath('//head//meta[@name="viewport"]').remove
8
+ def filter(content_document, page_template)
9
+ if should_remove_meta_viewport?
10
+ viewport = page_template.at_xpath('//head//meta[@name="viewport"]')
11
+ viewport.remove if viewport
10
12
  end
11
13
  end
14
+
15
+ def should_remove_meta_viewport?
16
+ !! @headers[Slimmer::Headers::REMOVE_META_VIEWPORT]
17
+ end
12
18
  end
13
19
  end
data/lib/slimmer/skin.rb CHANGED
@@ -126,7 +126,7 @@ module Slimmer
126
126
  source_request.url,
127
127
  response.headers,
128
128
  wrapper_id),
129
- Processors::MetaViewportRemover.new(response),
129
+ Processors::MetaViewportRemover.new(self, response.headers),
130
130
  Processors::BetaNoticeInserter.new(self, response.headers),
131
131
  Processors::BetaLabelInserter.new(self, response.headers),
132
132
  Processors::AlphaLabelInserter.new(self, response.headers),
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '5.0.0'
2
+ VERSION = '5.0.1'
3
3
  end
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Slimmer, yay!</title>
5
+ </head>
6
+ <body>
7
+ <div class="content">
8
+ <header><h1>That's gone now, sorry.</h1></header>
9
+ <div id="wrapper" class="group">
10
+ </div>
11
+ </div>
12
+ </body>
13
+ </html>
@@ -12,12 +12,26 @@ class MetaViewportRemover < SlimmerIntegrationTest
12
12
  </html>
13
13
  END
14
14
 
15
+ NO_VIEWPORT_TEMPLATE = <<-END
16
+ <html>
17
+ <head>
18
+ </head>
19
+ <body>
20
+ <div><div id="wrapper"></div></div>
21
+ </body>
22
+ </html>
23
+ END
24
+
15
25
  def test_should_leave_all_content_as_it_is_if_there_is_not_a_meta_viewport_header_set
16
26
  given_response 200, TEMPLATE, {}
17
27
  assert_equal "<meta name=\"viewport\" content=\"width=device-width, intial-scale=1\">",
18
28
  Nokogiri::HTML.parse(last_response.body).at_xpath('//head//meta[@name="viewport"]').to_s
19
29
  end
20
30
 
31
+ def test_should_not_fail_if_there_is_no_viewport_meta
32
+ given_response 200, NO_VIEWPORT_TEMPLATE, {Slimmer::Headers::REMOVE_META_VIEWPORT => "true"}
33
+ end
34
+
21
35
  def test_should_remove_the_meta_viewport_if_the_relevant_header_is_set
22
36
  given_response 200, TEMPLATE, {Slimmer::Headers::REMOVE_META_VIEWPORT => "true"}
23
37
  assert_nil Nokogiri::HTML.parse(last_response.body).at_xpath('//head//meta[@name="viewport"]')
data/test/test_helper.rb CHANGED
@@ -85,6 +85,7 @@ class SlimmerIntegrationTest < MiniTest::Test
85
85
  template_name = case code
86
86
  when 200 then 'wrapper'
87
87
  when 404 then '404'
88
+ when 410 then '410'
88
89
  else '500'
89
90
  end
90
91
 
@@ -114,6 +115,7 @@ class SlimmerIntegrationTest < MiniTest::Test
114
115
  refute_match /#{Regexp.escape(content)}/, last_response.body
115
116
  end
116
117
 
118
+ # content can be a string or a Regexp
117
119
  def assert_rendered_in_template(selector, content=nil, message=nil)
118
120
  unless message
119
121
  if content
@@ -127,12 +129,9 @@ class SlimmerIntegrationTest < MiniTest::Test
127
129
  assert matched_elements.length > 0, message + ", but selector not found."
128
130
 
129
131
  if content
130
- if content.is_a?(Regexp)
131
- found_match = matched_elements.inject(false) { |had_match, element| had_match || element.inner_html.match(content) }
132
- else
133
- found_match = matched_elements.inject(false) { |had_match, element| had_match || element.inner_html == content }
134
- end
135
- assert found_match, message + ". The selector was found but not with \"#{content}\"."
132
+ inner_htmls = matched_elements.map(&:inner_html)
133
+ found_match = inner_htmls.grep(content).any? # grep matches strings or Regexps
134
+ assert found_match, message + ". The selector was found but with different content: \"#{inner_htmls.join('", ')}\""
136
135
  end
137
136
  end
138
137
 
@@ -284,8 +284,6 @@ module TypicalUsage
284
284
  end
285
285
 
286
286
  class Error500ResponseTest < SlimmerIntegrationTest
287
- include Rack::Test::Methods
288
-
289
287
  given_response 500, %{
290
288
  <html>
291
289
  <head><title>500 Error</title>
@@ -313,8 +311,6 @@ module TypicalUsage
313
311
  end
314
312
 
315
313
  class Error404ResponseTest < SlimmerIntegrationTest
316
- include Rack::Test::Methods
317
-
318
314
  given_response 404, %{
319
315
  <html>
320
316
  <head><title>404 Missing</title>
@@ -342,8 +338,6 @@ module TypicalUsage
342
338
  end
343
339
 
344
340
  class Error406ResponseTest < SlimmerIntegrationTest
345
- include Rack::Test::Methods
346
-
347
341
  given_response 406, %{
348
342
  <html>
349
343
  <head><title>406 Not Acceptable</title>
@@ -370,6 +364,33 @@ module TypicalUsage
370
364
  end
371
365
  end
372
366
 
367
+ class Error410ResponseTest < SlimmerIntegrationTest
368
+ given_response 410, %{
369
+ <html>
370
+ <head><title>410 Gone</title>
371
+ <meta name="something" content="yes">
372
+ <script src="blah.js"></script>
373
+ <link href="app.css" rel="stylesheet" type="text/css">
374
+ </head>
375
+ <body class="body_class">
376
+ <div id="wrapper"><p class='message'>Something bad happened</p></div>
377
+ </body>
378
+ </html>
379
+ }
380
+
381
+ def test_should_not_replace_the_wrapper_using_the_app_response
382
+ assert_not_rendered_in_template "Something bad happened"
383
+ end
384
+
385
+ def test_should_include_default_410_error_message
386
+ assert_rendered_in_template "body .content header h1", "That's gone now, sorry."
387
+ end
388
+
389
+ def test_should_replace_the_title_using_the_app_response
390
+ assert_rendered_in_template "head title", "410 Gone"
391
+ end
392
+ end
393
+
373
394
  class ArbitraryWrapperIdTest < SlimmerIntegrationTest
374
395
 
375
396
  given_response 200, %{
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: 5.0.0
4
+ version: 5.0.1
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-09-01 00:00:00.000000000 Z
13
+ date: 2014-11-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
17
- requirement: &12577020 !ruby/object:Gem::Requirement
17
+ requirement: &7909580 !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: *12577020
25
+ version_requirements: *7909580
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rack
28
- requirement: &12591820 !ruby/object:Gem::Requirement
28
+ requirement: &7937280 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,21 +33,21 @@ dependencies:
33
33
  version: 1.3.5
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *12591820
36
+ version_requirements: *7937280
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: plek
39
- requirement: &12590680 !ruby/object:Gem::Requirement
39
+ requirement: &7936200 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
43
43
  - !ruby/object:Gem::Version
44
- version: 0.1.8
44
+ version: 1.1.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *12590680
47
+ version_requirements: *7936200
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: json
50
- requirement: &12590040 !ruby/object:Gem::Requirement
50
+ requirement: &7934600 !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: *12590040
58
+ version_requirements: *7934600
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: null_logger
61
- requirement: &12588580 !ruby/object:Gem::Requirement
61
+ requirement: &7933600 !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: *12588580
69
+ version_requirements: *7933600
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rest-client
72
- requirement: &12587020 !ruby/object:Gem::Requirement
72
+ requirement: &7931940 !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: *12587020
80
+ version_requirements: *7931940
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: activesupport
83
- requirement: &12584640 !ruby/object:Gem::Requirement
83
+ requirement: &7931220 !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: *12584640
91
+ version_requirements: *7931220
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: minitest
94
- requirement: &12597700 !ruby/object:Gem::Requirement
94
+ requirement: &7943920 !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: *12597700
102
+ version_requirements: *7943920
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rake
105
- requirement: &12596600 !ruby/object:Gem::Requirement
105
+ requirement: &7942880 !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: *12596600
113
+ version_requirements: *7942880
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rack-test
116
- requirement: &12595940 !ruby/object:Gem::Requirement
116
+ requirement: &7940820 !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: *12595940
124
+ version_requirements: *7940820
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: mocha
127
- requirement: &12595260 !ruby/object:Gem::Requirement
127
+ requirement: &7939500 !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: *12595260
135
+ version_requirements: *7939500
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: webmock
138
- requirement: &12594540 !ruby/object:Gem::Requirement
138
+ requirement: &7938000 !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: *12594540
146
+ version_requirements: *7938000
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: therubyracer
149
- requirement: &12593820 !ruby/object:Gem::Requirement
149
+ requirement: &7965480 !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: *12593820
157
+ version_requirements: *7965480
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: gem_publisher
160
- requirement: &12593040 !ruby/object:Gem::Requirement
160
+ requirement: &7963760 !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: *12593040
168
+ version_requirements: *7963760
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: gds-api-adapters
171
- requirement: &12607680 !ruby/object:Gem::Requirement
171
+ requirement: &7962140 !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: *12607680
179
+ version_requirements: *7962140
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: timecop
182
- requirement: &12606600 !ruby/object:Gem::Requirement
182
+ requirement: &7961060 !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: *12606600
190
+ version_requirements: *7961060
191
191
  description: Rack middleware for skinning pages using a specific template
192
192
  email:
193
193
  - bengriffiths@gmail.com
@@ -248,6 +248,7 @@ files:
248
248
  - test/fixtures/wrapper.html.erb
249
249
  - test/fixtures/500.html.erb
250
250
  - test/fixtures/proposition_menu.html.erb
251
+ - test/fixtures/410.html.erb
251
252
  - test/fixtures/alpha_label.html.erb
252
253
  - test/fixtures/404.html.erb
253
254
  - test/fixtures/report_a_problem.raw.html.erb
@@ -287,7 +288,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
287
288
  version: '0'
288
289
  segments:
289
290
  - 0
290
- hash: 4596273305865996013
291
+ hash: 4210104477749647125
291
292
  required_rubygems_version: !ruby/object:Gem::Requirement
292
293
  none: false
293
294
  requirements:
@@ -296,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
297
  version: '0'
297
298
  segments:
298
299
  - 0
299
- hash: 4596273305865996013
300
+ hash: 4210104477749647125
300
301
  requirements: []
301
302
  rubyforge_project: slimmer
302
303
  rubygems_version: 1.8.11
@@ -313,6 +314,7 @@ test_files:
313
314
  - test/fixtures/wrapper.html.erb
314
315
  - test/fixtures/500.html.erb
315
316
  - test/fixtures/proposition_menu.html.erb
317
+ - test/fixtures/410.html.erb
316
318
  - test/fixtures/alpha_label.html.erb
317
319
  - test/fixtures/404.html.erb
318
320
  - test/fixtures/report_a_problem.raw.html.erb