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 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.join("").bytesize.to_s
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 = Nokogiri::HTML.parse(body.to_s)
91
- dest = Nokogiri::HTML.parse(template)
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}"
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '1.1.24'
2
+ VERSION = '1.1.25'
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: slimmer
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.24
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: 877888990853693161
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: 877888990853693161
205
+ hash: 3024315122856974273
206
206
  segments:
207
207
  - 0
208
208
  version: "0"