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.
- data/lib/rack/img_sizes.rb +17 -8
- data/lib/rack/img_sizes/version.rb +2 -2
- data/test/integration_test.rb +2 -2
- metadata +1 -1
data/lib/rack/img_sizes.rb
CHANGED
@@ -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,
|
18
|
+
@status, @headers, @body = @app.call(env)
|
19
|
+
return [@status, @headers, @body] unless html?
|
17
20
|
|
18
|
-
new_response =
|
19
|
-
|
20
|
-
|
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
|
-
|
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
|
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
|
-
|
44
|
+
regexp = %r{(<img.*?src="#{Regexp.escape(src)}".*?>)}
|
45
|
+
part[regexp, 1] = img.to_s
|
37
46
|
end
|
38
47
|
end
|
39
48
|
part
|
data/test/integration_test.rb
CHANGED
@@ -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>
|