slimmer 1.1.24 → 1.1.25

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/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"