imageproxy 0.1.3 → 0.1.4
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/VERSION +1 -1
- data/imageproxy.gemspec +6 -6
- data/lib/imageproxy/command.rb +4 -2
- data/lib/imageproxy/convert.rb +2 -2
- data/lib/imageproxy/server.rb +10 -2
- data/spec/command_spec.rb +15 -0
- data/spec/server_spec.rb +2 -0
- metadata +88 -95
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
data/imageproxy.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{imageproxy}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date = %q{2011-
|
11
|
+
s.authors = [%q{Erik Hanson}]
|
12
|
+
s.date = %q{2011-08-24}
|
13
13
|
s.description = %q{A image processing proxy server, written in Ruby as a Rack application. Requires ImageMagick.}
|
14
14
|
s.email = %q{erik@eahanson.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -48,9 +48,9 @@ Gem::Specification.new do |s|
|
|
48
48
|
"spec/spec_helper.rb"
|
49
49
|
]
|
50
50
|
s.homepage = %q{http://github.com/eahanson/imageproxy}
|
51
|
-
s.licenses = [
|
52
|
-
s.require_paths = [
|
53
|
-
s.rubygems_version = %q{1.6
|
51
|
+
s.licenses = [%q{MIT}]
|
52
|
+
s.require_paths = [%q{lib}]
|
53
|
+
s.rubygems_version = %q{1.8.6}
|
54
54
|
s.summary = %q{A image processing proxy server, written in Ruby as a Rack application.}
|
55
55
|
|
56
56
|
if s.respond_to? :specification_version then
|
data/lib/imageproxy/command.rb
CHANGED
@@ -3,13 +3,15 @@ module Imageproxy
|
|
3
3
|
protected
|
4
4
|
|
5
5
|
def execute_command(command_line)
|
6
|
-
stdin, stdout, stderr = Open3.popen3(command_line)
|
6
|
+
stdin, stdout, stderr, wait_thr = Open3.popen3(command_line)
|
7
|
+
raise "Child process exited with non-zero exit code" unless wait_thr.value.success?
|
7
8
|
[output_to_string(stdout), output_to_string(stderr)].join("")
|
8
9
|
end
|
9
10
|
|
10
11
|
def curl(url, options={})
|
11
12
|
user_agent = options[:user_agent] || "imageproxy"
|
12
|
-
|
13
|
+
timeout = options[:timeout] ? "-m #{options[:timeout]} " : ""
|
14
|
+
%|curl #{timeout}-L -s -A "#{user_agent}" "#{url}"|
|
13
15
|
end
|
14
16
|
|
15
17
|
def to_path(obj)
|
data/lib/imageproxy/convert.rb
CHANGED
@@ -11,8 +11,8 @@ module Imageproxy
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def execute(user_agent=nil)
|
15
|
-
execute_command %'#{curl options.source, :user_agent => user_agent} | convert - #{convert_options} #{new_format}#{file.path}'
|
14
|
+
def execute(user_agent=nil, timeout=nil)
|
15
|
+
execute_command %'#{curl options.source, :user_agent => user_agent, :timeout => timeout} | convert - #{convert_options} #{new_format}#{file.path}'
|
16
16
|
file
|
17
17
|
end
|
18
18
|
|
data/lib/imageproxy/server.rb
CHANGED
@@ -24,7 +24,7 @@ module Imageproxy
|
|
24
24
|
check_domain options
|
25
25
|
check_size options
|
26
26
|
|
27
|
-
file =
|
27
|
+
file = convert_file(options, user_agent)
|
28
28
|
class << file
|
29
29
|
alias to_path path
|
30
30
|
end
|
@@ -48,6 +48,10 @@ module Imageproxy
|
|
48
48
|
|
49
49
|
private
|
50
50
|
|
51
|
+
def convert_file(options, user_agent)
|
52
|
+
Convert.new(options).execute(user_agent, config(:timeout))
|
53
|
+
end
|
54
|
+
|
51
55
|
def config(symbol)
|
52
56
|
ENV["IMAGEPROXY_#{symbol.to_s.upcase}"]
|
53
57
|
end
|
@@ -107,9 +111,13 @@ module Imageproxy
|
|
107
111
|
|
108
112
|
def content_type(file, options)
|
109
113
|
format = options.format
|
110
|
-
format =
|
114
|
+
format = identify_format(file) unless format
|
111
115
|
format = options.source unless format
|
112
116
|
format ? { "Content-Type" => MIME::Types.of(format).first.content_type } : {}
|
113
117
|
end
|
118
|
+
|
119
|
+
def identify_format(file)
|
120
|
+
Imageproxy::IdentifyFormat.new(file).execute
|
121
|
+
end
|
114
122
|
end
|
115
123
|
end
|
data/spec/command_spec.rb
CHANGED
@@ -15,5 +15,20 @@ describe Imageproxy::Command do
|
|
15
15
|
%|curl -L -s -A "imageproxy" "http://example.com/dog.jpg"|
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
context "when a timeout is supplied" do
|
20
|
+
it "should set the timeout" do
|
21
|
+
Imageproxy::Command.new.send(:curl, "http://example.com/dog.jpg", :timeout => "2").should ==
|
22
|
+
%|curl -m 2 -L -s -A "imageproxy" "http://example.com/dog.jpg"|
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "when the command exits with a non-zero status" do
|
27
|
+
it "should raise an exception" do
|
28
|
+
lambda {
|
29
|
+
Imageproxy::Command.new.send(:execute_command, "ls /asdkljasldkjaskl")
|
30
|
+
}.should raise_exception
|
31
|
+
end
|
32
|
+
end
|
18
33
|
end
|
19
34
|
end
|
data/spec/server_spec.rb
CHANGED
@@ -67,6 +67,8 @@ describe "Server" do
|
|
67
67
|
context "when limiting to certain domains" do
|
68
68
|
before do
|
69
69
|
app.stub!(:config) { |sym| {:allowed_domains => " example.com ,example.org"}[sym] }
|
70
|
+
app.stub!(:convert_file).and_return(Tempfile.new("fooo"))
|
71
|
+
app.stub!(:content_type).and_return({ "Content-Type" => "image/jpeg"})
|
70
72
|
end
|
71
73
|
|
72
74
|
it "should parse the allowed domains" do
|
metadata
CHANGED
@@ -1,127 +1,124 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: imageproxy
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.4
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.3
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Erik Hanson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-08-24 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: rack
|
18
|
-
requirement: &
|
16
|
+
requirement: &28077600 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *28077600
|
25
|
+
- !ruby/object:Gem::Dependency
|
28
26
|
name: rake
|
29
|
-
requirement: &
|
27
|
+
requirement: &28077100 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
35
33
|
type: :runtime
|
36
34
|
prerelease: false
|
37
|
-
version_requirements: *
|
38
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *28077100
|
36
|
+
- !ruby/object:Gem::Dependency
|
39
37
|
name: mime-types
|
40
|
-
requirement: &
|
38
|
+
requirement: &28076620 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
46
44
|
type: :runtime
|
47
45
|
prerelease: false
|
48
|
-
version_requirements: *
|
49
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version_requirements: *28076620
|
47
|
+
- !ruby/object:Gem::Dependency
|
50
48
|
name: heroku
|
51
|
-
requirement: &
|
49
|
+
requirement: &28076140 !ruby/object:Gem::Requirement
|
52
50
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
57
55
|
type: :development
|
58
56
|
prerelease: false
|
59
|
-
version_requirements: *
|
60
|
-
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: *28076140
|
58
|
+
- !ruby/object:Gem::Dependency
|
61
59
|
name: shotgun
|
62
|
-
requirement: &
|
60
|
+
requirement: &28075660 !ruby/object:Gem::Requirement
|
63
61
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
68
66
|
type: :development
|
69
67
|
prerelease: false
|
70
|
-
version_requirements: *
|
71
|
-
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: *28075660
|
69
|
+
- !ruby/object:Gem::Dependency
|
72
70
|
name: rspec
|
73
|
-
requirement: &
|
71
|
+
requirement: &28075180 !ruby/object:Gem::Requirement
|
74
72
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version:
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
79
77
|
type: :development
|
80
78
|
prerelease: false
|
81
|
-
version_requirements: *
|
82
|
-
- !ruby/object:Gem::Dependency
|
79
|
+
version_requirements: *28075180
|
80
|
+
- !ruby/object:Gem::Dependency
|
83
81
|
name: rack-test
|
84
|
-
requirement: &
|
82
|
+
requirement: &28074680 !ruby/object:Gem::Requirement
|
85
83
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version:
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
90
88
|
type: :development
|
91
89
|
prerelease: false
|
92
|
-
version_requirements: *
|
93
|
-
- !ruby/object:Gem::Dependency
|
90
|
+
version_requirements: *28074680
|
91
|
+
- !ruby/object:Gem::Dependency
|
94
92
|
name: awesome_print
|
95
|
-
requirement: &
|
93
|
+
requirement: &28074160 !ruby/object:Gem::Requirement
|
96
94
|
none: false
|
97
|
-
requirements:
|
98
|
-
- -
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version:
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
101
99
|
type: :development
|
102
100
|
prerelease: false
|
103
|
-
version_requirements: *
|
104
|
-
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: *28074160
|
102
|
+
- !ruby/object:Gem::Dependency
|
105
103
|
name: jeweler
|
106
|
-
requirement: &
|
104
|
+
requirement: &28073640 !ruby/object:Gem::Requirement
|
107
105
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version:
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
112
110
|
type: :development
|
113
111
|
prerelease: false
|
114
|
-
version_requirements: *
|
115
|
-
description: A image processing proxy server, written in Ruby as a Rack application.
|
112
|
+
version_requirements: *28073640
|
113
|
+
description: A image processing proxy server, written in Ruby as a Rack application.
|
114
|
+
Requires ImageMagick.
|
116
115
|
email: erik@eahanson.com
|
117
116
|
executables: []
|
118
|
-
|
119
117
|
extensions: []
|
120
|
-
|
121
|
-
extra_rdoc_files:
|
118
|
+
extra_rdoc_files:
|
122
119
|
- LICENSE.txt
|
123
120
|
- README.mdown
|
124
|
-
files:
|
121
|
+
files:
|
125
122
|
- .document
|
126
123
|
- Gemfile
|
127
124
|
- Gemfile.lock
|
@@ -151,36 +148,32 @@ files:
|
|
151
148
|
- spec/server_spec.rb
|
152
149
|
- spec/signature_spec.rb
|
153
150
|
- spec/spec_helper.rb
|
154
|
-
has_rdoc: true
|
155
151
|
homepage: http://github.com/eahanson/imageproxy
|
156
|
-
licenses:
|
152
|
+
licenses:
|
157
153
|
- MIT
|
158
154
|
post_install_message:
|
159
155
|
rdoc_options: []
|
160
|
-
|
161
|
-
require_paths:
|
156
|
+
require_paths:
|
162
157
|
- lib
|
163
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
164
159
|
none: false
|
165
|
-
requirements:
|
166
|
-
- -
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
|
169
|
-
segments:
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
segments:
|
170
165
|
- 0
|
171
|
-
|
172
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
hash: 589623391014226257
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
168
|
none: false
|
174
|
-
requirements:
|
175
|
-
- -
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version:
|
169
|
+
requirements:
|
170
|
+
- - ! '>='
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
178
173
|
requirements: []
|
179
|
-
|
180
174
|
rubyforge_project:
|
181
|
-
rubygems_version: 1.6
|
175
|
+
rubygems_version: 1.8.6
|
182
176
|
signing_key:
|
183
177
|
specification_version: 3
|
184
178
|
summary: A image processing proxy server, written in Ruby as a Rack application.
|
185
179
|
test_files: []
|
186
|
-
|