scale_down 0.5.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ == 2011-12-09 ==
2
+ Version 0.5.1
3
+ Fix for non PNG/JPG images. Redirect to the JPG version.
4
+
5
+ Version 0.5.0
6
+ This version no longer uses redirects.
7
+
1
8
  == 2011-09-13 ==
2
9
  Ruby 1.9.2 tested
3
10
 
data/README.rdoc CHANGED
@@ -79,6 +79,13 @@ HMAC requires a shared key between the application generating the URL and the Sc
79
79
  return [global.$FD.assetHost, absolute_path, '/scaled', "/", geometry, "/",escape(filename)].join("") + "?"+ signature
80
80
  }
81
81
 
82
+ == Images: PNGs, JPGs, Tiffs and others
83
+
84
+ ScaleDown will handle any image that Image Magick can process. But there are some rules:
85
+
86
+ * PNGs remain PNGs and JPGs remain JPGS
87
+ * All other images are converted to JPG and issued a 301 redirect
88
+
82
89
  == Installation and Configuration
83
90
 
84
91
  gem install scale_down
@@ -33,6 +33,9 @@ class ScaleDown::Controller < Sinatra::Application
33
33
 
34
34
  ScaleDown.logger.info "Controller#get #{path} #{status}"
35
35
  case status
36
+ when 301 then
37
+ # original is not a png/jpg redirect to jpg
38
+ redirect URI.encode(path), status
36
39
  when 302 then
37
40
  # File is found or scaled, use Sinatra's built in send file method
38
41
  static!
@@ -10,12 +10,12 @@ class ScaleDown::Dispatcher
10
10
  ScaleDown.logger.info "Dipatcher#process #{dispatcher.root_path}"
11
11
 
12
12
  return ["Missing file", 404] unless dispatcher.root_file_exists?
13
- return [dispatcher.redirect_path, 302] if dispatcher.scaled_file_exists?
13
+ return [dispatcher.redirect_path, dispatcher.redirect_code] if dispatcher.scaled_file_exists?
14
14
 
15
15
  return ["Invalid HMAC signature", 403] unless dispatcher.valid_hmac?
16
16
  return ["File failed to scale. The file may be corrupt.", 500] unless dispatcher.scale
17
17
 
18
- [dispatcher.redirect_path, 302]
18
+ [dispatcher.redirect_path, dispatcher.redirect_code]
19
19
  end
20
20
 
21
21
  # TODO return a JSON response with a full set of image details
@@ -54,6 +54,10 @@ class ScaleDown::Dispatcher
54
54
  ScaleDown.valid_hmac?(@params)
55
55
  end
56
56
 
57
+ def redirect_code
58
+ @params[:filename].match(/(png|jpg)$/) ? 302 : 301
59
+ end
60
+
57
61
  def redirect_path
58
62
  ["/"+@params[:path], @params[:geometry], scaled_filename].join("/")
59
63
  end
@@ -1,3 +1,3 @@
1
1
  module ScaleDown
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.2"
3
3
  end
@@ -21,12 +21,20 @@ class ScaleDown::Controller::Test < Test::Unit::TestCase
21
21
  end
22
22
 
23
23
  context "a valid request" do
24
- should "redirect to the image path" do
24
+ should "send the file" do
25
25
  ScaleDown::Dispatcher.expects(:process).returns ["/image-path", 302]
26
26
  get "/path/geo/filename?hmac"
27
27
 
28
28
  assert_equal 200, last_response.status
29
29
  end
30
+
31
+ should "redirect to the image path for non png or jpg original imags" do
32
+ ScaleDown::Dispatcher.expects(:process).returns ["/image-path", 301]
33
+ get "/path/geo/filename?hmac"
34
+
35
+ assert_equal 301, last_response.status
36
+ assert_equal "http://example.org/image-path", last_response["Location"]
37
+ end
30
38
  end
31
39
 
32
40
  context "an invalid request" do
@@ -67,6 +67,24 @@ class ScaleDown::Dispatcher::Test < Test::Unit::TestCase
67
67
  dispatcher = ScaleDown::Dispatcher.new @params.merge(:filename => "test.png")
68
68
  assert_match /\.png$/, dispatcher.scaled_file_path
69
69
  end
70
+
71
+ should "use a jpeg for all non png images" do
72
+ dispatcher = ScaleDown::Dispatcher.new @params.merge(:filename => "test.tif")
73
+ assert_match /\.jpg$/, dispatcher.scaled_file_path
74
+ assert_match /\.jpg$/, dispatcher.redirect_path
75
+ end
76
+
77
+ context "redirect_code" do
78
+ should "be 302 for png and jpgs" do
79
+ dispatcher = ScaleDown::Dispatcher.new @params
80
+ assert_equal 302, dispatcher.redirect_code
81
+ end
82
+
83
+ should "be 301 for non png or jpgs " do
84
+ dispatcher = ScaleDown::Dispatcher.new @params.merge(:filename => "test.tif")
85
+ assert_equal 301, dispatcher.redirect_code
86
+ end
87
+ end
70
88
  end
71
89
 
72
90
  context "process response" do
@@ -62,7 +62,6 @@ class ScaleDown::Test < Test::Unit::TestCase
62
62
  valid_get '/test_images/example_1/scaled/400x300-cropped/graphic.png'
63
63
  assert_equal 200, last_response.status
64
64
  assert File.exists?("/tmp/scale_down/test_images/example_1/scaled/400x300-cropped/graphic.png")
65
- assert_match "/test_images/example_1/scaled/400x300-cropped/graphic.png", last_response["Location"]
66
65
  end
67
66
 
68
67
  should "get a nonexistant image and return a 404" do
metadata CHANGED
@@ -1,94 +1,89 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: scale_down
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.2
4
5
  prerelease:
5
- version: 0.5.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - John Weir
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-12-09 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-12-15 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: rmagick
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2165822980 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "2.1"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '2.1'
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: sinatra
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2165822980
25
+ - !ruby/object:Gem::Dependency
26
+ name: sinatra
27
+ requirement: &2165822480 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "1.0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
35
33
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: ruby-hmac
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2165822480
36
+ - !ruby/object:Gem::Dependency
37
+ name: ruby-hmac
38
+ requirement: &2165822020 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
45
43
  version: 0.4.0
46
44
  type: :runtime
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: contest
50
45
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2165822020
47
+ - !ruby/object:Gem::Dependency
48
+ name: contest
49
+ requirement: &2165821560 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
56
54
  version: 0.1.2
57
55
  type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: mocha
61
56
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2165821560
58
+ - !ruby/object:Gem::Dependency
59
+ name: mocha
60
+ requirement: &2165851280 !ruby/object:Gem::Requirement
63
61
  none: false
64
- requirements:
65
- - - "="
66
- - !ruby/object:Gem::Version
62
+ requirements:
63
+ - - =
64
+ - !ruby/object:Gem::Version
67
65
  version: 0.9.8
68
66
  type: :development
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
71
- name: rack-test
72
67
  prerelease: false
73
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *2165851280
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-test
71
+ requirement: &2165850820 !ruby/object:Gem::Requirement
74
72
  none: false
75
- requirements:
76
- - - "="
77
- - !ruby/object:Gem::Version
73
+ requirements:
74
+ - - =
75
+ - !ruby/object:Gem::Version
78
76
  version: 0.5.6
79
77
  type: :development
80
- version_requirements: *id006
81
- description: ""
82
- email:
78
+ prerelease: false
79
+ version_requirements: *2165850820
80
+ description: ''
81
+ email:
83
82
  - john@famedriver.com
84
83
  executables: []
85
-
86
84
  extensions: []
87
-
88
85
  extra_rdoc_files: []
89
-
90
- files:
91
- - .bundle/config
86
+ files:
92
87
  - .gitignore
93
88
  - CHANGES
94
89
  - Gemfile
@@ -119,32 +114,29 @@ files:
119
114
  - test/test_helper.rb
120
115
  homepage: http://github.com/jweir/ScaleDown
121
116
  licenses: []
122
-
123
117
  post_install_message:
124
118
  rdoc_options: []
125
-
126
- require_paths:
119
+ require_paths:
127
120
  - lib
128
- required_ruby_version: !ruby/object:Gem::Requirement
121
+ required_ruby_version: !ruby/object:Gem::Requirement
129
122
  none: false
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- version: "0"
134
- required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
128
  none: false
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: "0"
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
140
133
  requirements: []
141
-
142
134
  rubyforge_project: scale_down
143
135
  rubygems_version: 1.8.8
144
136
  signing_key:
145
137
  specification_version: 3
146
138
  summary: A Sinatra based server for quickly scaling and serving images. Nothing more.
147
- test_files:
139
+ test_files:
148
140
  - test/files/cmyk.tif
149
141
  - test/files/cmyk_gray.jpg
150
142
  - test/files/graphic.png
data/.bundle/config DELETED
@@ -1 +0,0 @@
1
- --- {}