httpimagestore 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
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
- options = CLI.new do
6
+ cli_settings = CLI.new do
7
7
  description 'HTTP based image storage and thumbnailer'
8
- switch :no_bind, :description => "Do not bind to TCP socket - useful with -s fastcgi option"
9
- switch :no_logging, :description => "Disable logging"
10
- switch :debug, :description => "Enable debugging"
11
- switch :no_uri_encode, :description => "Disable output URI encoding"
12
- option :bind, :short => :b, :default => IP.new('127.0.0.1'), :cast => IP, :description => "HTTP server bind address - use 0.0.0.0 to bind to all interfaces"
13
- option :port, :short => :p, :default => 3000, :cast => Integer, :description => "HTTP server TCP port"
14
- option :server, :short => :s, :default => 'mongrel', :description => "Rack server handler like thin, mongrel, webrick, fastcgi etc."
15
- option :upload_retry_times, :default => 3, :cast => Integer, :description => "Number of times file upload will be retried in case of an error"
16
- option :upload_retry_delay, :default => 0.0, :cast => Float, :description => "Time to sleep between retries"
17
- argument :config, :cast => Pathname, :description => "Configuration file path"
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 options.no_bind
32
- sinatra.set :port, options.port
33
- sinatra.set :bind, options.bind.to_s
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, options.server
67
+ sinatra.set :server, cli_settings.server
40
68
  sinatra.set :lock, true
41
- sinatra.set :logging, (not options.no_logging)
42
- sinatra.set :debug, options.debug
43
- sinatra.set :uri_encode, (not options.no_uri_encode)
44
- sinatra.set :upload_retry_times, options.upload_retry_times
45
- sinatra.set :upload_retry_delay, options.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(options.config).put(sinatra)
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, :logger => logger, :upload_retry_times => settings.upload_retry_times, :upload_retry_delay => settings.upload_retry_delay)
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
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "httpimagestore"
8
- s.version = "0.3.2"
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-09-05"
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.23"
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.3.2
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-09-05 00:00:00.000000000 Z
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: -3544343476789840343
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.23
249
+ rubygems_version: 1.8.15
329
250
  signing_key:
330
251
  specification_version: 3
331
252
  summary: HTTP based image storage and thumbnailer