httpimagestore 1.7.0 → 1.8.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/Gemfile +2 -2
- data/Gemfile.lock +7 -7
- data/README.md +59 -4
- data/VERSION +1 -1
- data/features/compatibility.feature +3 -3
- data/features/encoding.feature +35 -0
- data/features/error-reporting.feature +11 -0
- data/features/rewrite.feature +122 -0
- data/features/s3-store-and-thumbnail.feature +4 -4
- data/features/step_definitions/httpimagestore_steps.rb +18 -6
- data/features/support/env.rb +11 -9
- data/httpimagestore.gemspec +12 -9
- data/lib/httpimagestore/configuration/file.rb +2 -2
- data/lib/httpimagestore/configuration/handler.rb +7 -3
- data/lib/httpimagestore/configuration/output.rb +55 -17
- data/lib/httpimagestore/configuration/s3.rb +12 -4
- data/spec/configuration_file_spec.rb +3 -4
- data/spec/configuration_handler_spec.rb +1 -2
- data/spec/configuration_identify_spec.rb +1 -2
- data/spec/configuration_output_spec.rb +289 -10
- data/spec/configuration_path_spec.rb +2 -3
- data/spec/configuration_s3_spec.rb +39 -38
- data/spec/configuration_source_failover_spec.rb +1 -1
- data/spec/configuration_spec.rb +1 -2
- data/spec/configuration_thumbnailer_spec.rb +1 -2
- data/spec/spec_helper.rb +15 -7
- data/spec/support/utf_string.txt +1 -0
- metadata +11 -8
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
require_relative 'spec_helper'
|
|
2
2
|
require 'aws-sdk'
|
|
3
3
|
require 'httpimagestore/configuration'
|
|
4
|
-
|
|
5
|
-
Configuration::Scope.logger = Logger.new('/dev/null')
|
|
4
|
+
MemoryLimit.logger = Configuration::Scope.logger = RootLogger.new('/dev/null')
|
|
6
5
|
|
|
6
|
+
require 'httpimagestore/configuration/output'
|
|
7
7
|
require 'httpimagestore/configuration/s3'
|
|
8
|
-
MemoryLimit.logger = Logger.new('/dev/null')
|
|
9
8
|
|
|
10
9
|
unless ENV['AWS_ACCESS_KEY_ID'] and ENV['AWS_SECRET_ACCESS_KEY'] and ENV['AWS_S3_TEST_BUCKET']
|
|
11
10
|
puts "AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY or AWS_S3_TEST_BUCKET environment variables not set - Skipping S3 specs"
|
|
@@ -131,10 +130,10 @@ else
|
|
|
131
130
|
subject.handlers[0].sources[0].realize(state)
|
|
132
131
|
|
|
133
132
|
state.images['original'].source_path.should == "test.jpg"
|
|
134
|
-
state.images['original'].source_url.should start_with "https://"
|
|
135
|
-
state.images['original'].source_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
136
|
-
state.images['original'].source_url.should include "/test.jpg"
|
|
137
|
-
state.images['original'].source_url.should include ENV['AWS_ACCESS_KEY_ID']
|
|
133
|
+
state.images['original'].source_url.to_s.should start_with "https://"
|
|
134
|
+
state.images['original'].source_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
135
|
+
state.images['original'].source_url.to_s.should include "/test.jpg"
|
|
136
|
+
state.images['original'].source_url.to_s.should include ENV['AWS_ACCESS_KEY_ID']
|
|
138
137
|
status(state.images['original'].source_url).should == 200
|
|
139
138
|
end
|
|
140
139
|
|
|
@@ -152,10 +151,10 @@ else
|
|
|
152
151
|
it 'should still provide valid HTTPS URL incliding prefix' do
|
|
153
152
|
subject.handlers[0].sources[0].realize(state)
|
|
154
153
|
|
|
155
|
-
state.images['original'].source_url.should start_with "https://"
|
|
156
|
-
state.images['original'].source_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
157
|
-
state.images['original'].source_url.should include "/test_prefix/test.jpg"
|
|
158
|
-
state.images['original'].source_url.should include ENV['AWS_ACCESS_KEY_ID']
|
|
154
|
+
state.images['original'].source_url.to_s.should start_with "https://"
|
|
155
|
+
state.images['original'].source_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
156
|
+
state.images['original'].source_url.to_s.should include "/test_prefix/test.jpg"
|
|
157
|
+
state.images['original'].source_url.to_s.should include ENV['AWS_ACCESS_KEY_ID']
|
|
159
158
|
status(state.images['original'].source_url).should == 200
|
|
160
159
|
end
|
|
161
160
|
|
|
@@ -219,7 +218,8 @@ else
|
|
|
219
218
|
it 'should keep private source URL' do
|
|
220
219
|
subject.handlers[0].sources[0].realize(state)
|
|
221
220
|
|
|
222
|
-
state.images['original'].source_url.should
|
|
221
|
+
state.images['original'].source_url.should be_a URI::HTTPS
|
|
222
|
+
state.images['original'].source_url.to_s.should == 'https://s3-eu-west-1.amazonaws.com/test/ghost.jpg?' + ENV['AWS_ACCESS_KEY_ID']
|
|
223
223
|
end
|
|
224
224
|
|
|
225
225
|
it 'should keep public source URL' do
|
|
@@ -232,7 +232,8 @@ else
|
|
|
232
232
|
EOF
|
|
233
233
|
subject.handlers[0].sources[0].realize(state)
|
|
234
234
|
|
|
235
|
-
state.images['original'].source_url.should
|
|
235
|
+
state.images['original'].source_url.should be_a URI::HTTPS
|
|
236
|
+
state.images['original'].source_url.to_s.should == 'https://s3-eu-west-1.amazonaws.com/test/ghost.jpg'
|
|
236
237
|
end
|
|
237
238
|
|
|
238
239
|
describe 'read-through' do
|
|
@@ -417,10 +418,10 @@ else
|
|
|
417
418
|
|
|
418
419
|
it 'should provide source HTTP url' do
|
|
419
420
|
subject.handlers[0].sources[0].realize(state)
|
|
420
|
-
state.images['original'].source_url.should start_with "http://"
|
|
421
|
-
state.images['original'].source_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
422
|
-
state.images['original'].source_url.should include "/test.jpg"
|
|
423
|
-
state.images['original'].source_url.should include ENV['AWS_ACCESS_KEY_ID']
|
|
421
|
+
state.images['original'].source_url.to_s.should start_with "http://"
|
|
422
|
+
state.images['original'].source_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
423
|
+
state.images['original'].source_url.to_s.should include "/test.jpg"
|
|
424
|
+
state.images['original'].source_url.to_s.should include ENV['AWS_ACCESS_KEY_ID']
|
|
424
425
|
status(state.images['original'].source_url).should == 200
|
|
425
426
|
end
|
|
426
427
|
end
|
|
@@ -627,10 +628,10 @@ else
|
|
|
627
628
|
subject.handlers[0].stores[0].realize(state)
|
|
628
629
|
|
|
629
630
|
state.images['input'].store_path.should == "test_out.jpg"
|
|
630
|
-
state.images['input'].store_url.should start_with "https://"
|
|
631
|
-
state.images['input'].store_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
632
|
-
state.images['input'].store_url.should include "/test_out.jpg"
|
|
633
|
-
state.images['input'].store_url.should include ENV['AWS_ACCESS_KEY_ID']
|
|
631
|
+
state.images['input'].store_url.to_s.should start_with "https://"
|
|
632
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
633
|
+
state.images['input'].store_url.to_s.should include "/test_out.jpg"
|
|
634
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_ACCESS_KEY_ID']
|
|
634
635
|
status(state.images['input'].store_url).should == 200
|
|
635
636
|
end
|
|
636
637
|
|
|
@@ -648,10 +649,10 @@ else
|
|
|
648
649
|
it 'should still provide valid HTTPS URL incliding prefix' do
|
|
649
650
|
subject.handlers[0].stores[0].realize(state)
|
|
650
651
|
|
|
651
|
-
state.images['input'].store_url.should start_with "https://"
|
|
652
|
-
state.images['input'].store_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
653
|
-
state.images['input'].store_url.should include "test_prefix/test_out.jpg"
|
|
654
|
-
state.images['input'].store_url.should include ENV['AWS_ACCESS_KEY_ID']
|
|
652
|
+
state.images['input'].store_url.to_s.should start_with "https://"
|
|
653
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
654
|
+
state.images['input'].store_url.to_s.should include "test_prefix/test_out.jpg"
|
|
655
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_ACCESS_KEY_ID']
|
|
655
656
|
status(state.images['input'].store_url).should == 200
|
|
656
657
|
end
|
|
657
658
|
|
|
@@ -683,10 +684,10 @@ else
|
|
|
683
684
|
it 'should provide source HTTP url' do
|
|
684
685
|
subject.handlers[0].stores[0].realize(state)
|
|
685
686
|
|
|
686
|
-
state.images['input'].store_url.should start_with "http://"
|
|
687
|
-
state.images['input'].store_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
688
|
-
state.images['input'].store_url.should include "/test_out.jpg"
|
|
689
|
-
state.images['input'].store_url.should include ENV['AWS_ACCESS_KEY_ID']
|
|
687
|
+
state.images['input'].store_url.to_s.should start_with "http://"
|
|
688
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
689
|
+
state.images['input'].store_url.to_s.should include "/test_out.jpg"
|
|
690
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_ACCESS_KEY_ID']
|
|
690
691
|
status(state.images['input'].store_url).should == 200
|
|
691
692
|
end
|
|
692
693
|
end
|
|
@@ -694,7 +695,7 @@ else
|
|
|
694
695
|
describe 'permission control' do
|
|
695
696
|
it 'should store images that are not accessible by public by default' do
|
|
696
697
|
subject.handlers[0].stores[0].realize(state)
|
|
697
|
-
status(state.images['input'].store_url[/^[^\?]*/]).should == 403
|
|
698
|
+
status(state.images['input'].store_url.to_s[/^[^\?]*/]).should == 403
|
|
698
699
|
end
|
|
699
700
|
|
|
700
701
|
describe 'public' do
|
|
@@ -717,10 +718,10 @@ else
|
|
|
717
718
|
it 'should provide public source HTTPS url' do
|
|
718
719
|
subject.handlers[0].stores[0].realize(state)
|
|
719
720
|
|
|
720
|
-
state.images['input'].store_url.should start_with "https://"
|
|
721
|
-
state.images['input'].store_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
722
|
-
state.images['input'].store_url.should include "/test_out.jpg"
|
|
723
|
-
state.images['input'].store_url.should_not include ENV['AWS_ACCESS_KEY_ID']
|
|
721
|
+
state.images['input'].store_url.to_s.should start_with "https://"
|
|
722
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
723
|
+
state.images['input'].store_url.to_s.should include "/test_out.jpg"
|
|
724
|
+
state.images['input'].store_url.to_s.should_not include ENV['AWS_ACCESS_KEY_ID']
|
|
724
725
|
status(state.images['input'].store_url).should == 200
|
|
725
726
|
end
|
|
726
727
|
|
|
@@ -738,10 +739,10 @@ else
|
|
|
738
739
|
it 'should provide public source HTTP url' do
|
|
739
740
|
subject.handlers[0].stores[0].realize(state)
|
|
740
741
|
|
|
741
|
-
state.images['input'].store_url.should start_with "http://"
|
|
742
|
-
state.images['input'].store_url.should include ENV['AWS_S3_TEST_BUCKET']
|
|
743
|
-
state.images['input'].store_url.should include "/test_out.jpg"
|
|
744
|
-
state.images['input'].store_url.should_not include ENV['AWS_ACCESS_KEY_ID']
|
|
742
|
+
state.images['input'].store_url.to_s.should start_with "http://"
|
|
743
|
+
state.images['input'].store_url.to_s.should include ENV['AWS_S3_TEST_BUCKET']
|
|
744
|
+
state.images['input'].store_url.to_s.should include "/test_out.jpg"
|
|
745
|
+
state.images['input'].store_url.to_s.should_not include ENV['AWS_ACCESS_KEY_ID']
|
|
745
746
|
status(state.images['input'].store_url).should == 200
|
|
746
747
|
end
|
|
747
748
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require_relative 'spec_helper'
|
|
2
2
|
require 'httpimagestore/configuration'
|
|
3
|
-
Configuration::Scope.logger =
|
|
3
|
+
MemoryLimit.logger = Configuration::Scope.logger = RootLogger.new('/dev/null')
|
|
4
4
|
|
|
5
5
|
require 'httpimagestore/configuration/source_failover'
|
|
6
6
|
require 'httpimagestore/configuration/file'
|
data/spec/configuration_spec.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require_relative 'spec_helper'
|
|
2
2
|
require 'httpimagestore/configuration'
|
|
3
|
-
|
|
4
|
-
Configuration::Scope.logger = Logger.new('/dev/null')
|
|
3
|
+
MemoryLimit.logger = Configuration::Scope.logger = RootLogger.new('/dev/null')
|
|
5
4
|
|
|
6
5
|
require 'pathname'
|
|
7
6
|
Pathname.glob('lib/httpimagestore/configuration/*.rb').each do |conf|
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
require_relative 'spec_helper'
|
|
2
2
|
require 'httpimagestore/configuration'
|
|
3
3
|
require 'httpimagestore/configuration/output'
|
|
4
|
-
Configuration::Scope.logger =
|
|
4
|
+
MemoryLimit.logger = Configuration::Scope.logger = RootLogger.new('/dev/null')
|
|
5
5
|
|
|
6
6
|
require 'httpimagestore/configuration/thumbnailer'
|
|
7
|
-
MemoryLimit.logger = Logger.new('/dev/null')
|
|
8
7
|
|
|
9
8
|
describe Configuration do
|
|
10
9
|
describe 'thumbnailer' do
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
3
3
|
require 'rspec'
|
|
4
|
-
require '
|
|
4
|
+
require 'faraday'
|
|
5
5
|
require 'daemon'
|
|
6
6
|
|
|
7
7
|
# Requires supporting files with custom matchers and macros, etc,
|
|
@@ -9,30 +9,38 @@ require 'daemon'
|
|
|
9
9
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
10
10
|
|
|
11
11
|
RSpec.configure do |config|
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def support_dir
|
|
16
16
|
Pathname.new('spec/support')
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
def http_client
|
|
20
|
+
@faraday ||= Faraday.new
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def request(method, uri, body, headers)
|
|
24
|
+
http_client.run_request(method.downcase.to_sym, uri.replace_s3_variables, body, headers || {})
|
|
25
|
+
end
|
|
26
|
+
|
|
19
27
|
def get(url)
|
|
20
|
-
|
|
28
|
+
http_client.get(url).body
|
|
21
29
|
end
|
|
22
30
|
|
|
23
31
|
def status(url)
|
|
24
|
-
|
|
32
|
+
http_client.get(url).status
|
|
25
33
|
end
|
|
26
34
|
|
|
27
35
|
def headers(url)
|
|
28
|
-
|
|
36
|
+
http_client.get(url).headers
|
|
29
37
|
end
|
|
30
38
|
|
|
31
39
|
@@running_cmd = {}
|
|
32
40
|
def start_server(cmd, pid_file, log_file, test_url)
|
|
33
41
|
if @@running_cmd[pid_file]
|
|
34
42
|
return if @@running_cmd[pid_file] == cmd
|
|
35
|
-
stop_server(pid_file)
|
|
43
|
+
stop_server(pid_file)
|
|
36
44
|
end
|
|
37
45
|
|
|
38
46
|
fork do
|
|
@@ -52,7 +60,7 @@ def start_server(cmd, pid_file, log_file, test_url)
|
|
|
52
60
|
Timeout.timeout(10) do
|
|
53
61
|
begin
|
|
54
62
|
get test_url
|
|
55
|
-
rescue
|
|
63
|
+
rescue Faraday::Error::ConnectionFailed
|
|
56
64
|
sleep 0.1
|
|
57
65
|
retry
|
|
58
66
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
zażółć gęślą jaźń
|
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: 1.
|
|
4
|
+
version: 1.8.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-
|
|
12
|
+
date: 2014-08-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: unicorn-cuba-base
|
|
@@ -18,7 +18,7 @@ dependencies:
|
|
|
18
18
|
requirements:
|
|
19
19
|
- - ~>
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: 1.2.
|
|
21
|
+
version: 1.2.2
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -26,7 +26,7 @@ dependencies:
|
|
|
26
26
|
requirements:
|
|
27
27
|
- - ~>
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 1.2.
|
|
29
|
+
version: 1.2.2
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
31
|
name: httpthumbnailer-client
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,13 +108,13 @@ dependencies:
|
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
109
|
version: '0.5'
|
|
110
110
|
- !ruby/object:Gem::Dependency
|
|
111
|
-
name:
|
|
111
|
+
name: faraday
|
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
|
113
113
|
none: false
|
|
114
114
|
requirements:
|
|
115
115
|
- - ! '>='
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
117
|
+
version: '0.8'
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -122,7 +122,7 @@ dependencies:
|
|
|
122
122
|
requirements:
|
|
123
123
|
- - ! '>='
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
|
-
version: '
|
|
125
|
+
version: '0.8'
|
|
126
126
|
- !ruby/object:Gem::Dependency
|
|
127
127
|
name: rspec
|
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -257,10 +257,12 @@ files:
|
|
|
257
257
|
- features/cache-control.feature
|
|
258
258
|
- features/compatibility.feature
|
|
259
259
|
- features/data-uri.feature
|
|
260
|
+
- features/encoding.feature
|
|
260
261
|
- features/error-reporting.feature
|
|
261
262
|
- features/flexi.feature
|
|
262
263
|
- features/health-check.feature
|
|
263
264
|
- features/request-matching.feature
|
|
265
|
+
- features/rewrite.feature
|
|
264
266
|
- features/s3-store-and-thumbnail.feature
|
|
265
267
|
- features/source-failover.feature
|
|
266
268
|
- features/step_definitions/httpimagestore_steps.rb
|
|
@@ -305,6 +307,7 @@ files:
|
|
|
305
307
|
- spec/support/compute.jpg
|
|
306
308
|
- spec/support/cuba_response_env.rb
|
|
307
309
|
- spec/support/full.cfg
|
|
310
|
+
- spec/support/utf_string.txt
|
|
308
311
|
homepage: http://github.com/jpastuszek/httpimagestore
|
|
309
312
|
licenses:
|
|
310
313
|
- MIT
|
|
@@ -320,7 +323,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
320
323
|
version: '0'
|
|
321
324
|
segments:
|
|
322
325
|
- 0
|
|
323
|
-
hash:
|
|
326
|
+
hash: -4420249284992726613
|
|
324
327
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
325
328
|
none: false
|
|
326
329
|
requirements:
|