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 +1 -0
- data/lib/slimmer/app.rb +29 -3
- data/lib/slimmer/skin.rb +29 -4
- data/lib/slimmer/version.rb +1 -1
- metadata +51 -40
data/lib/slimmer.rb
CHANGED
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/slimmer/version.rb
CHANGED
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.
|
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.
|
13
|
+
date: 2011-12-14 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
17
|
-
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: *
|
25
|
+
version_requirements: *70148924914440
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rack
|
28
|
-
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: *
|
36
|
+
version_requirements: *70148924913840
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: plek
|
39
|
-
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: *
|
47
|
+
version_requirements: *70148924913280
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: json
|
50
|
-
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: *
|
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: &
|
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: *
|
80
|
+
version_requirements: *70148924911240
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: rack-test
|
72
|
-
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: *
|
91
|
+
version_requirements: *70148924910140
|
81
92
|
- !ruby/object:Gem::Dependency
|
82
93
|
name: mocha
|
83
|
-
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: *
|
102
|
+
version_requirements: *70148924907460
|
92
103
|
- !ruby/object:Gem::Dependency
|
93
104
|
name: webmock
|
94
|
-
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: *
|
113
|
+
version_requirements: *70148924905400
|
103
114
|
- !ruby/object:Gem::Dependency
|
104
115
|
name: therubyracer
|
105
|
-
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: *
|
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/
|
141
|
+
- lib/slimmer/header_context_inserter.rb
|
138
142
|
- lib/slimmer/headers.rb
|
139
|
-
- lib/slimmer/
|
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/
|
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.
|
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
|