slimmer 1.1.6 → 1.1.7

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