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.
@@ -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