scale_down 0.7.0 → 0.7.1
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/scale_down/controller.rb +8 -10
- data/lib/scale_down/dispatcher.rb +1 -1
- data/lib/scale_down/version.rb +1 -1
- data/test/scale_down_test.rb +16 -6
- metadata +16 -16
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
1
3
|
class ScaleDown::Controller < Sinatra::Application
|
2
4
|
|
3
5
|
set :raise_errors, true
|
@@ -24,28 +26,24 @@ class ScaleDown::Controller < Sinatra::Application
|
|
24
26
|
|
25
27
|
params = {
|
26
28
|
:hmac => request.env["QUERY_STRING"],
|
27
|
-
:filename => parts.pop,
|
29
|
+
:filename => CGI.unescape(parts.pop),
|
28
30
|
:target => parts.pop, # the label or geometry
|
29
31
|
:splat => parts
|
30
32
|
}
|
31
33
|
|
32
|
-
|
34
|
+
body, status = dispatch(params)
|
33
35
|
|
34
|
-
ScaleDown.logger.info "Controller#get #{
|
35
|
-
$0 = "scale_down Controller#get #{
|
36
|
+
ScaleDown.logger.info "Controller#get #{body} #{status}"
|
37
|
+
$0 = "scale_down Controller#get #{body} #{status}"
|
36
38
|
case status
|
37
39
|
when 301 then
|
38
40
|
# original is not a png/jpg redirect to jpg
|
39
|
-
redirect URI.encode(
|
41
|
+
redirect URI.encode(body), status
|
40
42
|
when 302 then
|
41
43
|
# File is found or scaled, use Sinatra's built in send file method
|
42
44
|
static!
|
43
|
-
when 403 then
|
44
|
-
[status, "Error: the the HMAC is invalid for this request"]
|
45
|
-
when 404 then
|
46
|
-
[status, "Error: the orignal image could not be found"]
|
47
45
|
else
|
48
|
-
[status,
|
46
|
+
[status, body]
|
49
47
|
end
|
50
48
|
end
|
51
49
|
|
@@ -10,7 +10,7 @@ class ScaleDown::Dispatcher
|
|
10
10
|
ScaleDown.logger.info "Dipatcher#process #{dispatcher.root_path}"
|
11
11
|
$0= "scale_down Dipatcher#process #{dispatcher.root_path}"
|
12
12
|
|
13
|
-
return ["Missing file", 404] unless dispatcher.root_file_exists?
|
13
|
+
return ["Missing file #{dispatcher.root_path}", 404] unless dispatcher.root_file_exists?
|
14
14
|
return [dispatcher.redirect_path, dispatcher.redirect_code] if dispatcher.scaled_file_exists?
|
15
15
|
|
16
16
|
return ["Invalid HMAC signature", 403] unless dispatcher.valid_hmac?
|
data/lib/scale_down/version.rb
CHANGED
data/test/scale_down_test.rb
CHANGED
@@ -11,6 +11,11 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
11
11
|
get "#{path}?#{ScaleDown.hmac(path)}"
|
12
12
|
end
|
13
13
|
|
14
|
+
def copy(f, to, num)
|
15
|
+
FileUtils.mkdir_p("/tmp/scale_down/test_images/example_#{num}")
|
16
|
+
FileUtils.cp fixture_path("files/#{f}"), "/tmp/scale_down/test_images/example_#{num}/#{to}"
|
17
|
+
end
|
18
|
+
|
14
19
|
context "ScaleDown" do
|
15
20
|
setup do
|
16
21
|
ScaleDown.hmac_key = "secret"
|
@@ -42,11 +47,8 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
42
47
|
|
43
48
|
context "integration test" do
|
44
49
|
setup do
|
45
|
-
|
46
|
-
|
47
|
-
FileUtils.cp fixture_path("files/graphic.png"), "/tmp/scale_down/test_images/example_1/graphic.png"
|
48
|
-
FileUtils.mkdir_p("/tmp/scale_down/test_images/example_2")
|
49
|
-
FileUtils.cp fixture_path("files/invalid_jpeg.jpg"), "/tmp/scale_down/test_images/example_2/invalid_jpeg.jpg"
|
50
|
+
copy 'graphic.png', 'graphic.png', 1
|
51
|
+
copy 'invalid_jpeg.jpg', 'invalid_jpeg.jpg', 2
|
50
52
|
end
|
51
53
|
|
52
54
|
teardown do
|
@@ -54,7 +56,7 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
54
56
|
end
|
55
57
|
|
56
58
|
should "get image info" do
|
57
|
-
|
59
|
+
copy 'cmyk.tif', 'long-name.tiff', 1
|
58
60
|
get "/test_images/example_1/#{CGI.escape 'long-name.tiff'}/info"
|
59
61
|
assert_equal "300x500", last_response.body
|
60
62
|
end
|
@@ -65,6 +67,14 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
65
67
|
assert File.exists?("/tmp/scale_down/test_images/example_1/scaled/400x300-cropped/graphic.png")
|
66
68
|
end
|
67
69
|
|
70
|
+
should "consider + in filenames as spaces" do
|
71
|
+
copy 'graphic.png', 'name space.png', 3
|
72
|
+
|
73
|
+
hmac = ScaleDown.hmac '/test_images/example_3/scaled/400x300/name space.png'
|
74
|
+
get "/test_images/example_3/scaled/400x300/name+space.png?#{hmac}"
|
75
|
+
assert_equal 200, last_response.status
|
76
|
+
assert File.exists?("/tmp/scale_down/test_images/example_3/scaled/400x300/name space.png")
|
77
|
+
end
|
68
78
|
should "get a nonexistant image and return a 404" do
|
69
79
|
valid_get "/test_images/example_none/scaled/400x300/image.jpg"
|
70
80
|
assert_equal 404, last_response.status
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scale_down
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-02-15 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rmagick
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153009160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '2.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153009160
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sinatra
|
27
|
-
requirement: &
|
27
|
+
requirement: &2153008660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2153008660
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: ruby-hmac
|
38
|
-
requirement: &
|
38
|
+
requirement: &2153008200 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.4.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2153008200
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: contest
|
49
|
-
requirement: &
|
49
|
+
requirement: &2153007740 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.1.2
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2153007740
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &2153037480 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.9.2.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2153037480
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
|
-
requirement: &
|
71
|
+
requirement: &2153037020 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - =
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.9.8
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2153037020
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rack-test
|
82
|
-
requirement: &
|
82
|
+
requirement: &2153036560 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - =
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: 0.5.6
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2153036560
|
91
91
|
description: ''
|
92
92
|
email:
|
93
93
|
- john@famedriver.com
|