httpimagestore 0.3.2 → 0.4.0
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/bin/httpimagestore +57 -23
- data/features/cache-control.feature +80 -0
- data/features/httpimagestore.feature +1 -1
- data/features/step_definitions/httpimagestore_steps.rb +13 -1
- data/httpimagestore.gemspec +4 -3
- data/lib/httpimagestore/s3_service.rb +3 -0
- metadata +38 -117
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/bin/httpimagestore
CHANGED
@@ -3,18 +3,46 @@ require 'ip'
|
|
3
3
|
require 'pathname'
|
4
4
|
require 'cli'
|
5
5
|
|
6
|
-
|
6
|
+
cli_settings = CLI.new do
|
7
7
|
description 'HTTP based image storage and thumbnailer'
|
8
|
-
|
9
|
-
switch :
|
10
|
-
|
11
|
-
switch :
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
|
9
|
+
switch :no_bind,
|
10
|
+
description: "Do not bind to TCP socket - useful with -s fastcgi option"
|
11
|
+
switch :no_logging,
|
12
|
+
description: "Disable logging"
|
13
|
+
switch :debug,
|
14
|
+
description: "Enable debugging"
|
15
|
+
switch :no_uri_encode,
|
16
|
+
description: "Disable output URI encoding"
|
17
|
+
|
18
|
+
option :bind,
|
19
|
+
short: :b,
|
20
|
+
default: IP.new('127.0.0.1'),
|
21
|
+
cast: IP,
|
22
|
+
description: "HTTP server bind address - use 0.0.0.0 to bind to all interfaces"
|
23
|
+
option :port,
|
24
|
+
short: :p,
|
25
|
+
default: 3000,
|
26
|
+
cast: Integer,
|
27
|
+
description: "HTTP server TCP port"
|
28
|
+
option :server,
|
29
|
+
short: :s,
|
30
|
+
default: 'mongrel',
|
31
|
+
description: "Rack server handler like thin, mongrel, webrick, fastcgi etc."
|
32
|
+
option :upload_retry_times,
|
33
|
+
default: 3,
|
34
|
+
cast: Integer,
|
35
|
+
description: "Number of times file upload will be retried in case of an error"
|
36
|
+
option :upload_retry_delay,
|
37
|
+
default: 0.0,
|
38
|
+
cast: Float,
|
39
|
+
description: "Time to sleep between retries"
|
40
|
+
option :cache_control,
|
41
|
+
default: "public, max-age=#{(86400 * 365.25).to_i}",
|
42
|
+
description: "Stored object Cache-Control header value"
|
43
|
+
argument :config,
|
44
|
+
cast: Pathname,
|
45
|
+
description: "Configuration file path"
|
18
46
|
end.parse!
|
19
47
|
|
20
48
|
require 'sinatra/base'
|
@@ -28,23 +56,24 @@ require 'httpimagestore/s3_service'
|
|
28
56
|
|
29
57
|
sinatra = Sinatra.new
|
30
58
|
|
31
|
-
unless
|
32
|
-
sinatra.set :port,
|
33
|
-
sinatra.set :bind,
|
59
|
+
unless cli_settings.no_bind
|
60
|
+
sinatra.set :port, cli_settings.port
|
61
|
+
sinatra.set :bind, cli_settings.bind.to_s
|
34
62
|
else
|
35
63
|
sinatra.set :port, nil
|
36
64
|
sinatra.set :bind, nil
|
37
65
|
end
|
38
66
|
sinatra.set :environment, 'production'
|
39
|
-
sinatra.set :server,
|
67
|
+
sinatra.set :server, cli_settings.server
|
40
68
|
sinatra.set :lock, true
|
41
|
-
sinatra.set :logging, (not
|
42
|
-
sinatra.set :debug,
|
43
|
-
sinatra.set :uri_encode, (not
|
44
|
-
sinatra.set :upload_retry_times,
|
45
|
-
sinatra.set :upload_retry_delay,
|
69
|
+
sinatra.set :logging, (not cli_settings.no_logging)
|
70
|
+
sinatra.set :debug, cli_settings.debug
|
71
|
+
sinatra.set :uri_encode, (not cli_settings.no_uri_encode)
|
72
|
+
sinatra.set :upload_retry_times, cli_settings.upload_retry_times
|
73
|
+
sinatra.set :upload_retry_delay, cli_settings.upload_retry_delay
|
74
|
+
sinatra.set :cache_control, cli_settings.cache_control
|
46
75
|
|
47
|
-
Configuration.from_file(
|
76
|
+
Configuration.from_file(cli_settings.config).put(sinatra)
|
48
77
|
|
49
78
|
class ThumbnailingError < RuntimeError
|
50
79
|
def initialize(thumbnail_class, remote_error)
|
@@ -65,7 +94,7 @@ sinatra.helpers do
|
|
65
94
|
def halt_exception(status, exception)
|
66
95
|
msg = "Error: #{exception.class.name}: #{exception}"
|
67
96
|
if status >= 500
|
68
|
-
logger.error msg
|
97
|
+
logger.error msg + (exception.respond_to?(:response) ? ': ' + exception.response.inspect : '')
|
69
98
|
else
|
70
99
|
logger.warn msg
|
71
100
|
end
|
@@ -81,7 +110,12 @@ sinatra.before do
|
|
81
110
|
begin
|
82
111
|
logger.level = Logger::DEBUG if settings.logging and settings.debug
|
83
112
|
# singletons
|
84
|
-
$s3 ||= S3Service.new(settings.s3_key_id, settings.s3_key_secret, settings.s3_bucket,
|
113
|
+
$s3 ||= S3Service.new(settings.s3_key_id, settings.s3_key_secret, settings.s3_bucket,
|
114
|
+
cache_control: settings.cache_control,
|
115
|
+
logger: logger,
|
116
|
+
upload_retry_times: settings.upload_retry_times,
|
117
|
+
upload_retry_delay: settings.upload_retry_delay
|
118
|
+
)
|
85
119
|
$thumbnailer ||= HTTPThumbnailerClient.new(settings.thumbnailer_url)
|
86
120
|
rescue => exception
|
87
121
|
halt_exception(500, exception)
|
@@ -0,0 +1,80 @@
|
|
1
|
+
Feature: Stored objects should have proper Cache-Control header set
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given issthumbtest S3 bucket with key AKIAJMUYVYOSACNXLPTQ and secret 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
|
5
|
+
Given httpimagestore log is empty
|
6
|
+
Given httpthumbnailer log is empty
|
7
|
+
Given httpthumbnailer server is running at http://localhost:3100/
|
8
|
+
Given Content-Type header set to image/autodetect
|
9
|
+
|
10
|
+
@cache-control
|
11
|
+
Scenario: Image files get Cache-Control header with max-age set by default
|
12
|
+
Given httpimagestore server is running at http://localhost:3000/ with the following configuration
|
13
|
+
"""
|
14
|
+
s3_key 'AKIAJMUYVYOSACNXLPTQ', 'MAeGhvW+clN7kzK3NboASf3/kZ6a81PRtvwMZj4Y'
|
15
|
+
s3_bucket 'issthumbtest'
|
16
|
+
|
17
|
+
thumbnail_class 'small', 'crop', 128, 128
|
18
|
+
"""
|
19
|
+
Given there is no test/image/4006450256177f4a/test.jpg file in S3 bucket
|
20
|
+
And there is no test/image/4006450256177f4a/test-small.jpg file in S3 bucket
|
21
|
+
Given test.jpg file content as request body
|
22
|
+
When I do PUT request http://localhost:3000/thumbnail/small/test/image/test
|
23
|
+
Then response status will be 200
|
24
|
+
And response content type will be text/uri-list
|
25
|
+
And response body will be CRLF ended lines
|
26
|
+
"""
|
27
|
+
http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test.jpg
|
28
|
+
http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test-small.jpg
|
29
|
+
"""
|
30
|
+
And http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test.jpg Cache-Control header will be public, max-age=31557600
|
31
|
+
And http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test-small.jpg Cache-Control header will be public, max-age=31557600
|
32
|
+
|
33
|
+
@cache-control
|
34
|
+
Scenario: Image files get Cache-Control header defined with argument
|
35
|
+
Given httpimagestore argument --cache-control 'private, max-age=300, s-maxage=300'
|
36
|
+
Given httpimagestore server is running at http://localhost:3000/ with the following configuration
|
37
|
+
"""
|
38
|
+
s3_key 'AKIAJMUYVYOSACNXLPTQ', 'MAeGhvW+clN7kzK3NboASf3/kZ6a81PRtvwMZj4Y'
|
39
|
+
s3_bucket 'issthumbtest'
|
40
|
+
|
41
|
+
thumbnail_class 'small', 'crop', 128, 128
|
42
|
+
"""
|
43
|
+
Given there is no test/image/4006450256177f4a/test.jpg file in S3 bucket
|
44
|
+
And there is no test/image/4006450256177f4a/test-small.jpg file in S3 bucket
|
45
|
+
Given test.jpg file content as request body
|
46
|
+
When I do PUT request http://localhost:3000/thumbnail/small/test/image/test
|
47
|
+
Then response status will be 200
|
48
|
+
And response content type will be text/uri-list
|
49
|
+
And response body will be CRLF ended lines
|
50
|
+
"""
|
51
|
+
http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test.jpg
|
52
|
+
http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test-small.jpg
|
53
|
+
"""
|
54
|
+
And http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test.jpg Cache-Control header will be private, max-age=300, s-maxage=300
|
55
|
+
And http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test-small.jpg Cache-Control header will be private, max-age=300, s-maxage=300
|
56
|
+
|
57
|
+
@cache-control
|
58
|
+
Scenario: Image files get Cache-Control header undefined when set to ''
|
59
|
+
Given httpimagestore argument --cache-control ''
|
60
|
+
Given httpimagestore server is running at http://localhost:3000/ with the following configuration
|
61
|
+
"""
|
62
|
+
s3_key 'AKIAJMUYVYOSACNXLPTQ', 'MAeGhvW+clN7kzK3NboASf3/kZ6a81PRtvwMZj4Y'
|
63
|
+
s3_bucket 'issthumbtest'
|
64
|
+
|
65
|
+
thumbnail_class 'small', 'crop', 128, 128
|
66
|
+
"""
|
67
|
+
Given there is no test/image/4006450256177f4a/test.jpg file in S3 bucket
|
68
|
+
And there is no test/image/4006450256177f4a/test-small.jpg file in S3 bucket
|
69
|
+
Given test.jpg file content as request body
|
70
|
+
When I do PUT request http://localhost:3000/thumbnail/small/test/image/test
|
71
|
+
Then response status will be 200
|
72
|
+
And response content type will be text/uri-list
|
73
|
+
And response body will be CRLF ended lines
|
74
|
+
"""
|
75
|
+
http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test.jpg
|
76
|
+
http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test-small.jpg
|
77
|
+
"""
|
78
|
+
And http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test.jpg Cache-Control header will not be set
|
79
|
+
And http://issthumbtest.s3.amazonaws.com/test/image/4006450256177f4a/test-small.jpg Cache-Control header will not be set
|
80
|
+
|
@@ -4,6 +4,7 @@ Feature: Storing of original image and specified classes of its thumbnails on S3
|
|
4
4
|
The response will be paths to files stored in S3
|
5
5
|
|
6
6
|
Background:
|
7
|
+
Given issthumbtest S3 bucket with key AKIAJMUYVYOSACNXLPTQ and secret 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
|
7
8
|
Given httpimagestore log is empty
|
8
9
|
Given httpimagestore server is running at http://localhost:3000/ with the following configuration
|
9
10
|
"""
|
@@ -19,7 +20,6 @@ Feature: Storing of original image and specified classes of its thumbnails on S3
|
|
19
20
|
"""
|
20
21
|
Given httpthumbnailer log is empty
|
21
22
|
Given httpthumbnailer server is running at http://localhost:3100/
|
22
|
-
Given issthumbtest S3 bucket with key AKIAJMUYVYOSACNXLPTQ and secret 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
|
23
23
|
Given Content-Type header set to image/autodetect
|
24
24
|
|
25
25
|
Scenario: Putting original and its thumbnails to S3 bucket
|
@@ -1,3 +1,7 @@
|
|
1
|
+
Given /httpimagestore argument (.*)/ do |arg|
|
2
|
+
(@httpimagestore_args ||= []) << arg
|
3
|
+
end
|
4
|
+
|
1
5
|
Given /httpimagestore server is running at (.*) with the following configuration/ do |url, config|
|
2
6
|
cfile = Tempfile.new('httpimagestore.conf')
|
3
7
|
cfile.write(config)
|
@@ -5,7 +9,7 @@ Given /httpimagestore server is running at (.*) with the following configuration
|
|
5
9
|
|
6
10
|
begin
|
7
11
|
start_server(
|
8
|
-
"bundle exec #{script('httpimagestore')} #{cfile.path}",
|
12
|
+
"bundle exec #{script('httpimagestore')} #{(@httpimagestore_args ||= []).join(' ')} #{cfile.path}",
|
9
13
|
'/tmp/httpimagestore.pid',
|
10
14
|
support_dir + 'server.log',
|
11
15
|
url
|
@@ -78,6 +82,14 @@ Then /(http.*) content type will be (.*)/ do |url, content_type|
|
|
78
82
|
get_headers(url)['Content-Type'].should == content_type
|
79
83
|
end
|
80
84
|
|
85
|
+
Then /(http.*) ([^ ]+) header will be (.*)/ do |url, header, value|
|
86
|
+
get_headers(url)[header].should == value
|
87
|
+
end
|
88
|
+
|
89
|
+
Then /(http.*) ([^ ]+) header will not be set/ do |url, header|
|
90
|
+
get_headers(url)[header].should be_nil
|
91
|
+
end
|
92
|
+
|
81
93
|
Then /(.*) will contain (.*) image of size (.*)x(.*)/ do |url, format, width, height|
|
82
94
|
data = get(url)
|
83
95
|
|
data/httpimagestore.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "httpimagestore"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jakub Pastuszek"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-11-14"
|
13
13
|
s.description = "Thumbnails images using httpthumbnailer and stored data on HTTP server (S3)"
|
14
14
|
s.email = "jpastuszek@gmail.com"
|
15
15
|
s.executables = ["httpimagestore"]
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
29
|
"bin/httpimagestore",
|
30
|
+
"features/cache-control.feature",
|
30
31
|
"features/httpimagestore.feature",
|
31
32
|
"features/step_definitions/httpimagestore_steps.rb",
|
32
33
|
"features/support/env.rb",
|
@@ -46,7 +47,7 @@ Gem::Specification.new do |s|
|
|
46
47
|
s.homepage = "http://github.com/jpastuszek/httpimagestore"
|
47
48
|
s.licenses = ["MIT"]
|
48
49
|
s.require_paths = ["lib"]
|
49
|
-
s.rubygems_version = "1.8.
|
50
|
+
s.rubygems_version = "1.8.15"
|
50
51
|
s.summary = "HTTP based image storage and thumbnailer"
|
51
52
|
|
52
53
|
if s.respond_to? :specification_version then
|
@@ -16,6 +16,9 @@ class S3Service
|
|
16
16
|
@logger.info "Putting image in bucket '#{@bucket.name}': #{image_path}"
|
17
17
|
|
18
18
|
file = @bucket.objects.build(image_path)
|
19
|
+
|
20
|
+
file.cache_control = @options[:cache_control] if @options.include?(:cache_control) and not @options[:cache_control].empty?
|
21
|
+
|
19
22
|
file.content_type = content_type
|
20
23
|
file.content = data
|
21
24
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: httpimagestore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
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-11-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70112214075800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.2.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.2.6
|
24
|
+
version_requirements: *70112214075800
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: mongrel
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70112214091620 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: 1.2.0.pre2
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 1.2.0.pre2
|
35
|
+
version_requirements: *70112214091620
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: s3
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70112214090660 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ~>
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: '0.3'
|
54
44
|
type: :runtime
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.3'
|
46
|
+
version_requirements: *70112214090660
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: httpthumbnailer-client
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70112214088900 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ~>
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: 0.1.0
|
70
55
|
type: :runtime
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 0.1.0
|
57
|
+
version_requirements: *70112214088900
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: ruby-ip
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70112214087800 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ~>
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: '0.9'
|
86
66
|
type: :runtime
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0.9'
|
68
|
+
version_requirements: *70112214087800
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: cli
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70112214086600 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ~>
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: 1.1.0
|
102
77
|
type: :runtime
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 1.1.0
|
79
|
+
version_requirements: *70112214086600
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: mime-types
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &70112214085800 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ~>
|
@@ -117,15 +87,10 @@ dependencies:
|
|
117
87
|
version: 1.17.2
|
118
88
|
type: :runtime
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 1.17.2
|
90
|
+
version_requirements: *70112214085800
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: retry-this
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &70112214085140 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ~>
|
@@ -133,15 +98,10 @@ dependencies:
|
|
133
98
|
version: '1.1'
|
134
99
|
type: :runtime
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '1.1'
|
101
|
+
version_requirements: *70112214085140
|
142
102
|
- !ruby/object:Gem::Dependency
|
143
103
|
name: rspec
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &70112214084480 !ruby/object:Gem::Requirement
|
145
105
|
none: false
|
146
106
|
requirements:
|
147
107
|
- - ~>
|
@@ -149,15 +109,10 @@ dependencies:
|
|
149
109
|
version: 2.8.0
|
150
110
|
type: :development
|
151
111
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ~>
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 2.8.0
|
112
|
+
version_requirements: *70112214084480
|
158
113
|
- !ruby/object:Gem::Dependency
|
159
114
|
name: cucumber
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &70112214083880 !ruby/object:Gem::Requirement
|
161
116
|
none: false
|
162
117
|
requirements:
|
163
118
|
- - ! '>='
|
@@ -165,15 +120,10 @@ dependencies:
|
|
165
120
|
version: '0'
|
166
121
|
type: :development
|
167
122
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ! '>='
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
123
|
+
version_requirements: *70112214083880
|
174
124
|
- !ruby/object:Gem::Dependency
|
175
125
|
name: jeweler
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirement: &70112214099500 !ruby/object:Gem::Requirement
|
177
127
|
none: false
|
178
128
|
requirements:
|
179
129
|
- - ~>
|
@@ -181,15 +131,10 @@ dependencies:
|
|
181
131
|
version: 1.6.4
|
182
132
|
type: :development
|
183
133
|
prerelease: false
|
184
|
-
version_requirements:
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ~>
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 1.6.4
|
134
|
+
version_requirements: *70112214099500
|
190
135
|
- !ruby/object:Gem::Dependency
|
191
136
|
name: simplecov
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
137
|
+
requirement: &70112214097940 !ruby/object:Gem::Requirement
|
193
138
|
none: false
|
194
139
|
requirements:
|
195
140
|
- - ! '>='
|
@@ -197,15 +142,10 @@ dependencies:
|
|
197
142
|
version: '0'
|
198
143
|
type: :development
|
199
144
|
prerelease: false
|
200
|
-
version_requirements:
|
201
|
-
none: false
|
202
|
-
requirements:
|
203
|
-
- - ! '>='
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: '0'
|
145
|
+
version_requirements: *70112214097940
|
206
146
|
- !ruby/object:Gem::Dependency
|
207
147
|
name: rdoc
|
208
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirement: &70112214097240 !ruby/object:Gem::Requirement
|
209
149
|
none: false
|
210
150
|
requirements:
|
211
151
|
- - ~>
|
@@ -213,15 +153,10 @@ dependencies:
|
|
213
153
|
version: '3.9'
|
214
154
|
type: :development
|
215
155
|
prerelease: false
|
216
|
-
version_requirements:
|
217
|
-
none: false
|
218
|
-
requirements:
|
219
|
-
- - ~>
|
220
|
-
- !ruby/object:Gem::Version
|
221
|
-
version: '3.9'
|
156
|
+
version_requirements: *70112214097240
|
222
157
|
- !ruby/object:Gem::Dependency
|
223
158
|
name: daemon
|
224
|
-
requirement: !ruby/object:Gem::Requirement
|
159
|
+
requirement: &70112214096680 !ruby/object:Gem::Requirement
|
225
160
|
none: false
|
226
161
|
requirements:
|
227
162
|
- - ~>
|
@@ -229,15 +164,10 @@ dependencies:
|
|
229
164
|
version: '1'
|
230
165
|
type: :development
|
231
166
|
prerelease: false
|
232
|
-
version_requirements:
|
233
|
-
none: false
|
234
|
-
requirements:
|
235
|
-
- - ~>
|
236
|
-
- !ruby/object:Gem::Version
|
237
|
-
version: '1'
|
167
|
+
version_requirements: *70112214096680
|
238
168
|
- !ruby/object:Gem::Dependency
|
239
169
|
name: httpthumbnailer
|
240
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirement: &70112214095980 !ruby/object:Gem::Requirement
|
241
171
|
none: false
|
242
172
|
requirements:
|
243
173
|
- - ~>
|
@@ -245,28 +175,18 @@ dependencies:
|
|
245
175
|
version: '0.2'
|
246
176
|
type: :development
|
247
177
|
prerelease: false
|
248
|
-
version_requirements:
|
249
|
-
none: false
|
250
|
-
requirements:
|
251
|
-
- - ~>
|
252
|
-
- !ruby/object:Gem::Version
|
253
|
-
version: '0.2'
|
178
|
+
version_requirements: *70112214095980
|
254
179
|
- !ruby/object:Gem::Dependency
|
255
180
|
name: prawn
|
256
|
-
requirement: !ruby/object:Gem::Requirement
|
181
|
+
requirement: &70112214095380 !ruby/object:Gem::Requirement
|
257
182
|
none: false
|
258
183
|
requirements:
|
259
|
-
- -
|
184
|
+
- - =
|
260
185
|
- !ruby/object:Gem::Version
|
261
186
|
version: 0.8.4
|
262
187
|
type: :development
|
263
188
|
prerelease: false
|
264
|
-
version_requirements:
|
265
|
-
none: false
|
266
|
-
requirements:
|
267
|
-
- - '='
|
268
|
-
- !ruby/object:Gem::Version
|
269
|
-
version: 0.8.4
|
189
|
+
version_requirements: *70112214095380
|
270
190
|
description: Thumbnails images using httpthumbnailer and stored data on HTTP server
|
271
191
|
(S3)
|
272
192
|
email: jpastuszek@gmail.com
|
@@ -286,6 +206,7 @@ files:
|
|
286
206
|
- Rakefile
|
287
207
|
- VERSION
|
288
208
|
- bin/httpimagestore
|
209
|
+
- features/cache-control.feature
|
289
210
|
- features/httpimagestore.feature
|
290
211
|
- features/step_definitions/httpimagestore_steps.rb
|
291
212
|
- features/support/env.rb
|
@@ -316,7 +237,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
316
237
|
version: '0'
|
317
238
|
segments:
|
318
239
|
- 0
|
319
|
-
hash: -
|
240
|
+
hash: -3577536956281328176
|
320
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
321
242
|
none: false
|
322
243
|
requirements:
|
@@ -325,7 +246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
325
246
|
version: '0'
|
326
247
|
requirements: []
|
327
248
|
rubyforge_project:
|
328
|
-
rubygems_version: 1.8.
|
249
|
+
rubygems_version: 1.8.15
|
329
250
|
signing_key:
|
330
251
|
specification_version: 3
|
331
252
|
summary: HTTP based image storage and thumbnailer
|