slimmer 1.1.6 → 1.1.7

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.
data/lib/slimmer.rb CHANGED
@@ -2,6 +2,7 @@ require 'nokogiri'
2
2
  require 'erb'
3
3
  require 'open-uri'
4
4
  require 'plek'
5
+ require 'null_logger'
5
6
 
6
7
  module Slimmer
7
8
  TEMPLATE_HEADER = 'X-Slimmer-Template'
data/lib/slimmer/app.rb CHANGED
@@ -1,9 +1,15 @@
1
1
  module Slimmer
2
2
  class App
3
+ attr_accessor :logger
4
+ private :logger=, :logger
5
+
3
6
  def initialize(app, *args, &block)
4
7
  options = args.first || {}
5
8
  @app = app
6
9
 
10
+ logger = options[:logger] || NullLogger.instance
11
+ self.logger = logger
12
+
7
13
  if options.key? :template_path
8
14
  raise "Template path should not be used. Use asset_host instead."
9
15
  end
@@ -12,12 +18,14 @@ module Slimmer
12
18
  options[:asset_host] = Plek.current.find("assets")
13
19
  end
14
20
 
15
- @skin = Skin.new options[:asset_host], options[:cache_templates]
21
+ @skin = Skin.new options[:asset_host], options[:cache_templates], :logger => logger
16
22
  end
17
23
 
18
24
  def call(env)
25
+ logger.debug "Slimmer: capturing response"
19
26
  response_array = @app.call(env)
20
27
  if response_array[1][SKIP_HEADER]
28
+ logger.debug "Slimmer: Asked to skip slimmer via HTTP header"
21
29
  response_array
22
30
  else
23
31
  rewrite_response(env, response_array)
@@ -49,35 +57,53 @@ module Slimmer
49
57
 
50
58
  def rewrite_response(env,triplet)
51
59
  status, headers, app_body = triplet
60
+ logger.debug "Slimmer: constructing request object"
52
61
  source_request = Rack::Request.new(env)
62
+ logger.debug "Slimmer: constructing request headers object"
53
63
  request = Rack::Request.new(headers)
54
- if headers['Content-Type'] =~ /text\/html/ || headers['content-type'] =~ /text\/html/
64
+ content_type = headers['Content-Type'] || headers['content-type']
65
+ logger.debug "Slimmer: Content-Type: #{content_type}"
66
+ if content_type =~ /text\/html/
67
+ logger.debug "Slimmer: Status code = #{status}"
55
68
  case status.to_i
56
69
  when 200
70
+ logger.debug "Slimmer: I will rewrite this request"
71
+ logger.debug "Slimmer: #{TEMPLATE_HEADER} = #{headers[TEMPLATE_HEADER].inspect}"
72
+ logger.debug "Slimmer: Request path = #{source_request.path.inspect}"
57
73
  if headers[TEMPLATE_HEADER] == 'admin' || source_request.path =~ /^\/admin(\/|$)/
74
+ logger.debug "Slimmer: Rewriting this request as an admin request"
58
75
  rewritten_body = admin(request,s(app_body))
59
76
  else
77
+ logger.debug "Slimmer: Rewriting this request as a public request"
60
78
  rewritten_body = on_success(request,s(app_body))
61
79
  end
62
80
  when 301, 302, 304
81
+ logger.debug "Slimmer: I will not rewrite this request"
63
82
  rewritten_body = app_body
64
83
  when 404
84
+ logger.debug "Slimmer: Rewriting this request as a 404 error"
65
85
  rewritten_body = on_404(request,s(app_body))
66
86
  else
87
+ logger.debug "Slimmer: Rewriting this request as a generic error"
67
88
  rewritten_body = on_error(request,status,s(app_body))
68
89
  end
69
90
  else
91
+ logger.debug "Slimmer: I will not rewrite this request"
70
92
  rewritten_body = app_body
71
93
  end
72
94
  rewritten_body = [rewritten_body] unless rewritten_body.respond_to?(:each)
73
- [status, filter_headers(headers), rewritten_body]
95
+ filtered_headers = filter_headers headers
96
+ logger.debug "Slimmer: Returning final status, headers and body"
97
+ [status, filtered_headers, rewritten_body]
74
98
  end
75
99
 
76
100
  def filter_headers(header_hash)
77
101
  valid_keys = ['vary', 'set-cookie', 'location', 'content-type', 'expires', 'cache-control']
102
+ logger.debug "Slimmer: removing headers except #{valid_keys} from #{header_hash.keys}"
78
103
  header_hash.keys.each do |key|
79
104
  header_hash.delete(key) unless valid_keys.include?(key.downcase)
80
105
  end
106
+ logger.debug "Slimmer: filtered headers = #{header_hash.inspect}"
81
107
  header_hash
82
108
  end
83
109
  end
data/lib/slimmer/skin.rb CHANGED
@@ -9,37 +9,53 @@ module Slimmer
9
9
  attr_accessor :asset_host
10
10
  private :asset_host=, :asset_host
11
11
 
12
+ attr_accessor :logger
13
+ private :logger=, :logger
14
+
12
15
  # TODO: Extract the cache to something we can pass in instead of using
13
16
  # true/false and an in-memory cache.
14
- def initialize asset_host, use_cache = false
17
+ def initialize asset_host, use_cache = false, options = {}
15
18
  self.asset_host = asset_host
16
19
  self.templated_cache = {}
17
20
  self.use_cache = false
21
+ self.logger = options[:logger] || NullLogger.instance
18
22
  end
19
23
 
20
24
  def template(template_name)
25
+ logger.debug "Slimmer: Looking for template #{template_name}"
21
26
  return cached_template(template_name) if template_cached? template_name
27
+ logger.debug "Slimmer: Asking for the template to be loaded"
22
28
  load_template template_name
23
29
  end
24
30
 
25
31
  def template_cached? name
26
- !cached_template(name).nil?
32
+ logger.debug "Slimmer: Checking cache for template #{name}"
33
+ cached = !cached_template(name).nil?
34
+ logger.debug "Slimmer: Cache hit = #{cached}"
35
+ cached
27
36
  end
28
37
 
29
38
  def cached_template name
39
+ logger.debug "Slimmer: Trying to load cached template #{name}"
30
40
  templated_cache[name]
31
41
  end
32
42
 
33
43
  def cache name, template
44
+ logger.debug "Slimmer: Asked to cache #{name}. use_cache = #{use_cache}"
34
45
  return unless use_cache
46
+ logger.debug "Slimmer: performing caching"
35
47
  templated_cache[name] = template
36
48
  end
37
49
 
38
50
  def load_template template_name
51
+ logger.debug "Slimmer: Loading template #{template_name}"
39
52
  url = template_url template_name
53
+ logger.debug "Slimmer: template lives at #{url}"
40
54
  source = open(url, "r:UTF-8").read
55
+ logger.debug "Slimmer: Evaluating the template as ERB"
41
56
  template = ERB.new(source).result binding
42
57
  cache template_name, template
58
+ logger.debug "Slimmer: Returning evaluated template"
43
59
  template
44
60
  end
45
61
 
@@ -57,17 +73,26 @@ module Slimmer
57
73
  end
58
74
 
59
75
  def process(processors,body,template)
76
+ logger.debug "Slimmer: starting skinning process"
60
77
  src = Nokogiri::HTML.parse(body.to_s)
61
78
  dest = Nokogiri::HTML.parse(template)
62
79
 
80
+ start_time = Time.now
81
+ logger.debug "Slimmer: Start time = #{start_time}"
63
82
  processors.each do |p|
83
+ processor_start_time = Time.now
84
+ logger.debug "Slimmer: Processor #{p} started at #{processor_start_time}"
64
85
  begin
65
86
  p.filter(src,dest)
66
87
  rescue => e
67
- puts "Failed while processing #{p}"
68
- puts [ e.message, e.backtrace ].flatten.join("\n")
88
+ logger.error "Slimmer: Failed while processing #{p}: #{[ e.message, e.backtrace ].flatten.join("\n")}"
69
89
  end
90
+ processor_end_time = Time.now
91
+ process_time = processor_end_time - processor_start_time
92
+ logger.debug "Slimmer: Processor #{p} ended at #{processor_end_time} (#{process_time}s)"
70
93
  end
94
+ end_time = Time.now
95
+ logger.debug "Slimmer: Skinning process completed at #{end_time} (#{end_time - start_time}s)"
71
96
 
72
97
  return dest.to_html
73
98
  end
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '1.1.6'
2
+ VERSION = '1.1.7'
3
3
  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: 1.1.6
4
+ version: 1.1.7
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: 2011-12-14 00:00:00.000000000 Z
13
+ date: 2011-12-14 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
17
- requirement: &14605900 !ruby/object:Gem::Requirement
17
+ requirement: &70148924914440 !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: *14605900
25
+ version_requirements: *70148924914440
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rack
28
- requirement: &14604560 !ruby/object:Gem::Requirement
28
+ requirement: &70148924913840 !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: *14604560
36
+ version_requirements: *70148924913840
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: plek
39
- requirement: &15450680 !ruby/object:Gem::Requirement
39
+ requirement: &70148924913280 !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: *15450680
47
+ version_requirements: *70148924913280
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: json
50
- requirement: &15450300 !ruby/object:Gem::Requirement
50
+ requirement: &70148924912820 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,21 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *15450300
58
+ version_requirements: *70148924912820
59
+ - !ruby/object:Gem::Dependency
60
+ name: null_logger
61
+ requirement: &70148924912320 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *70148924912320
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: rake
61
- requirement: &15449460 !ruby/object:Gem::Requirement
72
+ requirement: &70148924911240 !ruby/object:Gem::Requirement
62
73
  none: false
63
74
  requirements:
64
75
  - - ~>
@@ -66,10 +77,10 @@ dependencies:
66
77
  version: 0.9.2.2
67
78
  type: :development
68
79
  prerelease: false
69
- version_requirements: *15449460
80
+ version_requirements: *70148924911240
70
81
  - !ruby/object:Gem::Dependency
71
82
  name: rack-test
72
- requirement: &15448960 !ruby/object:Gem::Requirement
83
+ requirement: &70148924910140 !ruby/object:Gem::Requirement
73
84
  none: false
74
85
  requirements:
75
86
  - - ~>
@@ -77,10 +88,10 @@ dependencies:
77
88
  version: 0.6.1
78
89
  type: :development
79
90
  prerelease: false
80
- version_requirements: *15448960
91
+ version_requirements: *70148924910140
81
92
  - !ruby/object:Gem::Dependency
82
93
  name: mocha
83
- requirement: &15448500 !ruby/object:Gem::Requirement
94
+ requirement: &70148924907460 !ruby/object:Gem::Requirement
84
95
  none: false
85
96
  requirements:
86
97
  - - ~>
@@ -88,10 +99,10 @@ dependencies:
88
99
  version: 0.9.12
89
100
  type: :development
90
101
  prerelease: false
91
- version_requirements: *15448500
102
+ version_requirements: *70148924907460
92
103
  - !ruby/object:Gem::Dependency
93
104
  name: webmock
94
- requirement: &15447980 !ruby/object:Gem::Requirement
105
+ requirement: &70148924905400 !ruby/object:Gem::Requirement
95
106
  none: false
96
107
  requirements:
97
108
  - - ~>
@@ -99,10 +110,10 @@ dependencies:
99
110
  version: '1.7'
100
111
  type: :development
101
112
  prerelease: false
102
- version_requirements: *15447980
113
+ version_requirements: *70148924905400
103
114
  - !ruby/object:Gem::Dependency
104
115
  name: therubyracer
105
- requirement: &15447600 !ruby/object:Gem::Requirement
116
+ requirement: &70148922473740 !ruby/object:Gem::Requirement
106
117
  none: false
107
118
  requirements:
108
119
  - - ! '>='
@@ -110,7 +121,7 @@ dependencies:
110
121
  version: '0'
111
122
  type: :development
112
123
  prerelease: false
113
- version_requirements: *15447600
124
+ version_requirements: *70148922473740
114
125
  description: Rack middleware for skinning pages using a specific template
115
126
  email:
116
127
  - bengriffiths@gmail.com
@@ -121,36 +132,36 @@ extra_rdoc_files: []
121
132
  files:
122
133
  - README.md
123
134
  - CHANGELOG.md
124
- - lib/slimmer/tag_mover.rb
125
135
  - lib/slimmer/admin_title_inserter.rb
126
- - lib/slimmer/footer_remover.rb
127
- - lib/slimmer/section_inserter.rb
128
- - lib/slimmer/template.rb
129
- - lib/slimmer/header_context_inserter.rb
130
136
  - lib/slimmer/app.rb
131
- - lib/slimmer/skin.rb
132
137
  - lib/slimmer/body_class_copier.rb
133
- - lib/slimmer/railtie.rb
134
- - lib/slimmer/title_inserter.rb
135
138
  - lib/slimmer/body_inserter.rb
139
+ - lib/slimmer/footer_remover.rb
136
140
  - lib/slimmer/google_analytics_configurator.rb
137
- - lib/slimmer/test.rb
141
+ - lib/slimmer/header_context_inserter.rb
138
142
  - lib/slimmer/headers.rb
139
- - lib/slimmer/version.rb
143
+ - lib/slimmer/railtie.rb
144
+ - lib/slimmer/section_inserter.rb
145
+ - lib/slimmer/skin.rb
146
+ - lib/slimmer/tag_mover.rb
147
+ - lib/slimmer/template.rb
148
+ - lib/slimmer/test.rb
149
+ - lib/slimmer/title_inserter.rb
140
150
  - lib/slimmer/url_rewriter.rb
141
- - lib/tasks/slimmer.rake
151
+ - lib/slimmer/version.rb
142
152
  - lib/slimmer.rb
153
+ - lib/tasks/slimmer.rake
143
154
  - Rakefile
144
- - test/typical_usage_test.rb
145
- - test/fixtures/500.html.erb
146
155
  - test/fixtures/404.html.erb
156
+ - test/fixtures/500.html.erb
147
157
  - test/fixtures/wrapper.html.erb
148
- - test/test_helper.rb
149
- - test/skin_test.rb
150
158
  - test/google_analytics_test.rb
151
159
  - test/headers_test.rb
152
160
  - test/processors/body_inserter_test.rb
153
161
  - test/processors/header_context_inserter_test.rb
162
+ - test/skin_test.rb
163
+ - test/test_helper.rb
164
+ - test/typical_usage_test.rb
154
165
  homepage: http://github.com/alphagov/slimmer
155
166
  licenses: []
156
167
  post_install_message:
@@ -171,18 +182,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
182
  version: '0'
172
183
  requirements: []
173
184
  rubyforge_project: slimmer
174
- rubygems_version: 1.8.11
185
+ rubygems_version: 1.8.10
175
186
  signing_key:
176
187
  specification_version: 3
177
188
  summary: Thinner than the skinner
178
189
  test_files:
179
- - test/typical_usage_test.rb
180
- - test/fixtures/500.html.erb
181
190
  - test/fixtures/404.html.erb
191
+ - test/fixtures/500.html.erb
182
192
  - test/fixtures/wrapper.html.erb
183
- - test/test_helper.rb
184
- - test/skin_test.rb
185
193
  - test/google_analytics_test.rb
186
194
  - test/headers_test.rb
187
195
  - test/processors/body_inserter_test.rb
188
196
  - test/processors/header_context_inserter_test.rb
197
+ - test/skin_test.rb
198
+ - test/test_helper.rb
199
+ - test/typical_usage_test.rb