rack-img-sizes 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: