slimmer 1.1.24 → 1.1.25
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/slimmer/app.rb +7 -1
- data/lib/slimmer/related_items_inserter.rb +5 -1
- data/lib/slimmer/skin.rb +39 -2
- data/lib/slimmer/version.rb +1 -1
- metadata +3 -3
data/lib/slimmer/app.rb
CHANGED
@@ -54,6 +54,12 @@ module Slimmer
|
|
54
54
|
body.each {|a| b << a }
|
55
55
|
b
|
56
56
|
end
|
57
|
+
|
58
|
+
def content_length(rewritten_body)
|
59
|
+
size = 0
|
60
|
+
rewritten_body.each { |part| size += part.bytesize }
|
61
|
+
size.to_s
|
62
|
+
end
|
57
63
|
|
58
64
|
def rewrite_response(env, response_to_skin)
|
59
65
|
status, headers, app_body = response_to_skin
|
@@ -93,7 +99,7 @@ module Slimmer
|
|
93
99
|
end
|
94
100
|
rewritten_body = [rewritten_body] unless rewritten_body.respond_to?(:each)
|
95
101
|
|
96
|
-
headers['Content-Length'] = rewritten_body
|
102
|
+
headers['Content-Length'] = content_length(rewritten_body)
|
97
103
|
|
98
104
|
logger.debug "Slimmer: Returning final status, headers and body"
|
99
105
|
[status, headers, rewritten_body]
|
@@ -20,8 +20,12 @@ class RelatedItemsInserter
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
def under_test?
|
24
|
+
ENV['RACK_ENV'] == 'test'
|
25
|
+
end
|
26
|
+
|
23
27
|
def metadata_from_panopticon
|
24
|
-
fetch_artefact(slug: requested_slug)
|
28
|
+
under_test? ? {} : fetch_artefact(slug: requested_slug)
|
25
29
|
end
|
26
30
|
|
27
31
|
def related_item_block
|
data/lib/slimmer/skin.rb
CHANGED
@@ -15,6 +15,9 @@ module Slimmer
|
|
15
15
|
attr_accessor :logger
|
16
16
|
private :logger=, :logger
|
17
17
|
|
18
|
+
attr_accessor :strict
|
19
|
+
private :strict=, :strict
|
20
|
+
|
18
21
|
# TODO: Extract the cache to something we can pass in instead of using
|
19
22
|
# true/false and an in-memory cache.
|
20
23
|
def initialize asset_host, use_cache = false, prefix = nil, options = {}
|
@@ -23,6 +26,7 @@ module Slimmer
|
|
23
26
|
self.prefix = prefix
|
24
27
|
self.use_cache = use_cache
|
25
28
|
self.logger = options[:logger] || NullLogger.instance
|
29
|
+
self.strict = options[:strict] || (ENV['RACK_ENV'] == 'development')
|
26
30
|
end
|
27
31
|
|
28
32
|
def template(template_name)
|
@@ -84,11 +88,44 @@ module Slimmer
|
|
84
88
|
]
|
85
89
|
process(processors, body, template(template_name))
|
86
90
|
end
|
91
|
+
|
92
|
+
def report_parse_errors_if_strict!(nokogiri_doc, description_for_error_message)
|
93
|
+
nokogiri_doc
|
94
|
+
end
|
95
|
+
|
96
|
+
def parse_html(html, description_for_error_message)
|
97
|
+
doc = Nokogiri::HTML.parse(html)
|
98
|
+
if strict
|
99
|
+
errors = doc.errors.select {|e| e.error?}.reject {|e| ignorable?(e)}
|
100
|
+
if errors.size > 0
|
101
|
+
error = errors.first
|
102
|
+
raise "In #{description_for_error_message}: '#{error.message}' at line #{error.line} col #{error.column} (code #{error.code}).\n" +
|
103
|
+
context(html, error)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
doc
|
107
|
+
end
|
108
|
+
|
109
|
+
def context(html, error)
|
110
|
+
context_size = 5
|
111
|
+
lines = [""] + html.split("\n")
|
112
|
+
from = [1, error.line - context_size].max
|
113
|
+
to = [lines.size - 1, error.line + context_size].min
|
114
|
+
context = (from..to).zip(lines[from..to]).map {|lineno, line| "%4d: %s" % [lineno, line] }
|
115
|
+
marker = " " * (error.column - 1) + "-----v"
|
116
|
+
context.insert(context_size, marker)
|
117
|
+
context.join("\n")
|
118
|
+
end
|
119
|
+
|
120
|
+
def ignorable?(error)
|
121
|
+
ignorable_codes = [801]
|
122
|
+
ignorable_codes.include?(error.code)
|
123
|
+
end
|
87
124
|
|
88
125
|
def process(processors,body,template)
|
89
126
|
logger.debug "Slimmer: starting skinning process"
|
90
|
-
src =
|
91
|
-
dest =
|
127
|
+
src = parse_html(body.to_s, "backend response")
|
128
|
+
dest = parse_html(template, "template")
|
92
129
|
|
93
130
|
start_time = Time.now
|
94
131
|
logger.debug "Slimmer: Start time = #{start_time}"
|
data/lib/slimmer/version.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.1.
|
5
|
+
version: 1.1.25
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ben Griffiths
|
@@ -193,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
193
193
|
requirements:
|
194
194
|
- - ">="
|
195
195
|
- !ruby/object:Gem::Version
|
196
|
-
hash:
|
196
|
+
hash: 3024315122856974273
|
197
197
|
segments:
|
198
198
|
- 0
|
199
199
|
version: "0"
|
@@ -202,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
202
|
requirements:
|
203
203
|
- - ">="
|
204
204
|
- !ruby/object:Gem::Version
|
205
|
-
hash:
|
205
|
+
hash: 3024315122856974273
|
206
206
|
segments:
|
207
207
|
- 0
|
208
208
|
version: "0"
|