scale_down 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- path, status = dispatch(params)
34
+ body, status = dispatch(params)
33
35
 
34
- ScaleDown.logger.info "Controller#get #{path} #{status}"
35
- $0 = "scale_down Controller#get #{path} #{status}"
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(path), status
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, "Error: this image could not be processed"]
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?
@@ -1,3 +1,3 @@
1
1
  module ScaleDown
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.1"
3
3
  end
@@ -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
- FileUtils.mkdir_p("/tmp/scale_down/test_images/example_1")
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
- FileUtils.cp fixture_path("files/cmyk.tif"), "/tmp/scale_down/test_images/example_1/long-name.tiff"
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.0
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-01-26 00:00:00.000000000Z
12
+ date: 2012-02-15 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rmagick
16
- requirement: &2152325300 !ruby/object:Gem::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: *2152325300
24
+ version_requirements: *2153009160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sinatra
27
- requirement: &2152324800 !ruby/object:Gem::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: *2152324800
35
+ version_requirements: *2153008660
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: ruby-hmac
38
- requirement: &2152324340 !ruby/object:Gem::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: *2152324340
46
+ version_requirements: *2153008200
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: contest
49
- requirement: &2152323880 !ruby/object:Gem::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: *2152323880
57
+ version_requirements: *2153007740
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &2152323420 !ruby/object:Gem::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: *2152323420
68
+ version_requirements: *2153037480
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &2152353140 !ruby/object:Gem::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: *2152353140
79
+ version_requirements: *2153037020
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rack-test
82
- requirement: &2152352680 !ruby/object:Gem::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: *2152352680
90
+ version_requirements: *2153036560
91
91
  description: ''
92
92
  email:
93
93
  - john@famedriver.com