rack-img-sizes 0.0.1 → 0.0.2

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.
@@ -11,29 +11,38 @@ module Rack
11
11
  @app = app
12
12
  end
13
13
 
14
- def call(env)
14
+ def call(env); dup._call(env); end
15
+
16
+ def _call(env)
15
17
  @env = env
16
- status, headers, response = @app.call(env)
18
+ @status, @headers, @body = @app.call(env)
19
+ return [@status, @headers, @body] unless html?
17
20
 
18
- new_response = response.map do |part|
19
- process_part(part)
20
- end
21
+ new_response = Rack::Response.new([], @status, @headers)
22
+
23
+ @body.each { |part| new_response.write process_part(part) }
24
+ @body.close if @body.respond_to?(:close)
21
25
 
22
- [status, headers, new_response]
26
+ new_response.finish
23
27
  end
24
28
 
25
29
  private
30
+ def html?; @headers['Content-Type'] =~ /html/; end
31
+
26
32
  def process_part(part)
27
- doc = Nokogiri::HTML.parse(part)
33
+ doc = Nokogiri::HTML(part)
28
34
  doc.css("img").each do |img|
29
35
  old_img = img.dup.to_s
36
+
30
37
  if src = img["src"]
31
38
  uri = ::Rack::ImgSizes::URI.new(@env, src)
32
39
  width, height = *dimensions(uri.to_s)
40
+
33
41
  img.set_attribute("width" , width.to_s)
34
42
  img.set_attribute("height" , height.to_s)
35
43
 
36
- part.sub!(old_img, img.to_s)
44
+ regexp = %r{(<img.*?src="#{Regexp.escape(src)}".*?>)}
45
+ part[regexp, 1] = img.to_s
37
46
  end
38
47
  end
39
48
  part
@@ -1,5 +1,5 @@
1
1
  module Rack
2
- module ImgSizes
3
- VERSION = "0.0.1"
2
+ class ImgSizes
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -27,8 +27,8 @@ class MiddlewareTest < Test::Unit::TestCase
27
27
  <article id="main" role="main">
28
28
  <header>
29
29
  <img src="logo.png">
30
- <img src="/images/icons/adwords-24.gif">
31
- <img src="http://www.google.com/images/logos/ps_logo.png">
30
+ <img src="/images/icons/adwords-24.gif"/>
31
+ <img src="http://www.google.com/images/logos/ps_logo.png" />
32
32
  </header>
33
33
  </article>
34
34
  </div>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-img-sizes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: