httpimagestore 1.8.1 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile +7 -7
- data/Gemfile.lock +20 -20
- data/README.md +165 -37
- data/Rakefile +7 -2
- data/VERSION +1 -1
- data/bin/httpimagestore +74 -41
- data/lib/httpimagestore/configuration/file.rb +20 -11
- data/lib/httpimagestore/configuration/handler.rb +96 -257
- data/lib/httpimagestore/configuration/handler/source_store_base.rb +37 -0
- data/lib/httpimagestore/configuration/handler/statement.rb +114 -0
- data/lib/httpimagestore/configuration/identify.rb +17 -9
- data/lib/httpimagestore/configuration/output.rb +33 -61
- data/lib/httpimagestore/configuration/path.rb +2 -2
- data/lib/httpimagestore/configuration/request_state.rb +131 -0
- data/lib/httpimagestore/configuration/s3.rb +41 -29
- data/lib/httpimagestore/configuration/thumbnailer.rb +189 -96
- data/lib/httpimagestore/configuration/validate_hmac.rb +170 -0
- data/lib/httpimagestore/error_reporter.rb +6 -1
- data/lib/httpimagestore/ruby_string_template.rb +10 -19
- metadata +40 -102
- data/.rspec +0 -1
- data/features/cache-control.feature +0 -41
- data/features/compatibility.feature +0 -165
- data/features/data-uri.feature +0 -55
- data/features/encoding.feature +0 -103
- data/features/error-reporting.feature +0 -281
- data/features/flexi.feature +0 -259
- data/features/health-check.feature +0 -29
- data/features/request-matching.feature +0 -211
- data/features/rewrite.feature +0 -122
- data/features/s3-store-and-thumbnail.feature +0 -82
- data/features/source-failover.feature +0 -71
- data/features/step_definitions/httpimagestore_steps.rb +0 -203
- data/features/storage.feature +0 -198
- data/features/support/env.rb +0 -116
- data/features/support/test-large.jpg +0 -0
- data/features/support/test.empty +0 -0
- data/features/support/test.jpg +0 -0
- data/features/support/test.png +0 -0
- data/features/support/test.txt +0 -1
- data/features/support/tiny.png +0 -0
- data/features/xid-forwarding.feature +0 -49
- data/httpimagestore.gemspec +0 -145
- data/load_test/load_test.1k.23a022f6e.m1.small-comp.csv +0 -3
- data/load_test/load_test.1k.ec9bde794.m1.small.csv +0 -4
- data/load_test/load_test.jmx +0 -317
- data/load_test/thumbnail_specs.csv +0 -11
- data/load_test/thumbnail_specs_v2.csv +0 -10
- data/spec/configuration_file_spec.rb +0 -333
- data/spec/configuration_handler_spec.rb +0 -255
- data/spec/configuration_identify_spec.rb +0 -67
- data/spec/configuration_output_spec.rb +0 -821
- data/spec/configuration_path_spec.rb +0 -138
- data/spec/configuration_s3_spec.rb +0 -911
- data/spec/configuration_source_failover_spec.rb +0 -101
- data/spec/configuration_spec.rb +0 -90
- data/spec/configuration_thumbnailer_spec.rb +0 -483
- data/spec/ruby_string_template_spec.rb +0 -61
- data/spec/spec_helper.rb +0 -89
- data/spec/support/compute.jpg +0 -0
- data/spec/support/cuba_response_env.rb +0 -40
- data/spec/support/full.cfg +0 -183
- data/spec/support/utf_string.txt +0 -1
@@ -1,61 +0,0 @@
|
|
1
|
-
require_relative 'spec_helper'
|
2
|
-
require 'httpimagestore/ruby_string_template'
|
3
|
-
|
4
|
-
describe RubyStringTemplate do
|
5
|
-
subject do
|
6
|
-
RubyStringTemplate.new('>#{hello}-#{world}#{test}<')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'should replace holders with given values' do
|
10
|
-
subject.render(hello: 'hello', world: 'world', test: 123).should == '>hello-world123<'
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should raise NoValueForTemplatePlaceholderError if template value was not provided' do
|
14
|
-
expect {
|
15
|
-
subject.render(hello: 'hello', test: 123)
|
16
|
-
}.to raise_error RubyStringTemplate::NoValueForTemplatePlaceholderError, %q{no value for '#{world}' in template '>#{hello}-#{world}#{test}<'}
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should not process nested placeholders' do
|
20
|
-
subject.render(hello: '#{nested}', world: 'world', test: 123, nested: 'xxx').should == '>#{nested}-world123<'
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'with custom resolver' do
|
24
|
-
subject do
|
25
|
-
RubyStringTemplate.new('>#{hello}-#{world}#{test}<') do |locals, name|
|
26
|
-
case name
|
27
|
-
when :test
|
28
|
-
321
|
29
|
-
else
|
30
|
-
locals[name]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should ask for values using provided resolver' do
|
36
|
-
subject.render(hello: 'hello', world: 'world').should == '>hello-world321<'
|
37
|
-
subject.render(hello: 'hello', world: 'world', test: 123).should == '>hello-world321<'
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should raise NoValueForTemplatePlaceholderError if template value was not provided' do
|
41
|
-
expect {
|
42
|
-
subject.render(hello: 'hello', test: 123)
|
43
|
-
}.to raise_error RubyStringTemplate::NoValueForTemplatePlaceholderError, %q{no value for '#{world}' in template '>#{hello}-#{world}#{test}<'}
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should allow using custom missing value resolver' do
|
47
|
-
template = subject
|
48
|
-
expect {
|
49
|
-
template.with_missing_resolver do |locals, key|
|
50
|
-
fail "missing key: #{key}"
|
51
|
-
end
|
52
|
-
.render(hello: 'hello', test: 123)
|
53
|
-
}.to raise_error RuntimeError, "missing key: world"
|
54
|
-
|
55
|
-
expect {
|
56
|
-
template.render(hello: 'hello', test: 123)
|
57
|
-
}.to raise_error RubyStringTemplate::NoValueForTemplatePlaceholderError, %q{no value for '#{world}' in template '>#{hello}-#{world}#{test}<'}
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
data/spec/spec_helper.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
-
require 'rspec'
|
4
|
-
require 'faraday'
|
5
|
-
require 'daemon'
|
6
|
-
|
7
|
-
# Requires supporting files with custom matchers and macros, etc,
|
8
|
-
# in ./support/ and its subdirectories.
|
9
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
10
|
-
|
11
|
-
RSpec.configure do |config|
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def support_dir
|
16
|
-
Pathname.new('spec/support')
|
17
|
-
end
|
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
|
-
|
27
|
-
def get(url)
|
28
|
-
http_client.get(url).body
|
29
|
-
end
|
30
|
-
|
31
|
-
def status(url)
|
32
|
-
http_client.get(url).status
|
33
|
-
end
|
34
|
-
|
35
|
-
def headers(url)
|
36
|
-
http_client.get(url).headers
|
37
|
-
end
|
38
|
-
|
39
|
-
@@running_cmd = {}
|
40
|
-
def start_server(cmd, pid_file, log_file, test_url)
|
41
|
-
if @@running_cmd[pid_file]
|
42
|
-
return if @@running_cmd[pid_file] == cmd
|
43
|
-
stop_server(pid_file)
|
44
|
-
end
|
45
|
-
|
46
|
-
fork do
|
47
|
-
Daemon.daemonize(pid_file, log_file)
|
48
|
-
log_file = Pathname.new(log_file)
|
49
|
-
log_file.truncate(0) if log_file.exist?
|
50
|
-
exec(cmd)
|
51
|
-
end
|
52
|
-
|
53
|
-
@@running_cmd[pid_file] = cmd
|
54
|
-
|
55
|
-
ppid = Process.pid
|
56
|
-
at_exit do
|
57
|
-
stop_server(pid_file) if Process.pid == ppid
|
58
|
-
end
|
59
|
-
|
60
|
-
Timeout.timeout(10) do
|
61
|
-
begin
|
62
|
-
get test_url
|
63
|
-
rescue Faraday::Error::ConnectionFailed
|
64
|
-
sleep 0.1
|
65
|
-
retry
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def stop_server(pid_file)
|
71
|
-
pid_file = Pathname.new(pid_file)
|
72
|
-
return unless pid_file.exist?
|
73
|
-
|
74
|
-
STDERR.puts http_client.get_content("http://localhost:3000/stats") if pid_file.to_s.include? 'httpimagestore'
|
75
|
-
pid = pid_file.read.strip.to_i
|
76
|
-
|
77
|
-
Timeout.timeout(20) do
|
78
|
-
begin
|
79
|
-
loop do
|
80
|
-
Process.kill("TERM", pid)
|
81
|
-
sleep 0.1
|
82
|
-
end
|
83
|
-
rescue Errno::ESRCH
|
84
|
-
@@running_cmd.delete pid_file.to_s
|
85
|
-
pid_file.unlink
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
data/spec/support/compute.jpg
DELETED
Binary file
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'unicorn-cuba-base/plugin/response_helpers'
|
2
|
-
class CubaResponseEnv
|
3
|
-
include Plugin::ResponseHelpers
|
4
|
-
|
5
|
-
class Response < Struct.new(:status, :data)
|
6
|
-
extend Forwardable
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
super
|
10
|
-
@headers = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def write(data)
|
14
|
-
(self.data ||= '') << data
|
15
|
-
end
|
16
|
-
|
17
|
-
def_delegators :@headers, :[]=, :[]
|
18
|
-
end
|
19
|
-
|
20
|
-
class Request
|
21
|
-
class Body
|
22
|
-
def read
|
23
|
-
''
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def body
|
28
|
-
Body.new
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@res = Response.new
|
34
|
-
@req = Request.new
|
35
|
-
end
|
36
|
-
|
37
|
-
attr_reader :res
|
38
|
-
attr_reader :req
|
39
|
-
end
|
40
|
-
|
data/spec/support/full.cfg
DELETED
@@ -1,183 +0,0 @@
|
|
1
|
-
s3 key="AKIAJ672BX2L6KYBFWSQ" secret="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" ssl=false
|
2
|
-
|
3
|
-
# API - v2 thumbnails - /thumbnails/<path>[?<query>]
|
4
|
-
path "hash" "#{input_digest}.#{image_mime_extension}"
|
5
|
-
path "path" "#{path}"
|
6
|
-
path "uri_part" "/thumbnails/#{input_digest}/#{name}.#{image_mime_extension}"
|
7
|
-
|
8
|
-
## User uploaded content - always JPEG converted, not bigger than 2160x2160 and in hight quality compression
|
9
|
-
post "iss" "v2" "thumbnails" "pictures" "/(?<name>.+?)(\\.[^\\.]+)?$/" {
|
10
|
-
thumbnail "input" "original" operation="limit" width=2160 height=2160 format="jpeg" quality=95
|
11
|
-
store_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
12
|
-
output_store_path "original" path="uri_part"
|
13
|
-
}
|
14
|
-
|
15
|
-
post "iss" "v2" "thumbnails" "pictures" {
|
16
|
-
thumbnail "input" "original" operation="limit" width=2160 height=2160 format="jpeg" quality=95
|
17
|
-
store_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
18
|
-
output_store_path "original"
|
19
|
-
}
|
20
|
-
|
21
|
-
put "iss" "v2" "thumbnails" "pictures" {
|
22
|
-
thumbnail "input" "original" operation="limit" width=2160 height=2160 format="jpeg" quality=95
|
23
|
-
store_s3 "original" bucket="test.s3.whatclinic.com" path="path" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
24
|
-
output_store_path "original"
|
25
|
-
}
|
26
|
-
|
27
|
-
## Uploaded by us for use on the website - whatever we send
|
28
|
-
post "iss" "v2" "thumbnails" "images" "/(?<name>.+?)(\\.[^\\.]+)?$/" {
|
29
|
-
identify "input"
|
30
|
-
store_s3 "input" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
31
|
-
output_store_path "input" path="uri_part"
|
32
|
-
}
|
33
|
-
|
34
|
-
post "iss" "v2" "thumbnails" "images" {
|
35
|
-
identify "input"
|
36
|
-
store_s3 "input" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
37
|
-
output_store_path "input"
|
38
|
-
}
|
39
|
-
|
40
|
-
put "iss" "v2" "thumbnails" "images" {
|
41
|
-
identify "input"
|
42
|
-
store_s3 "input" bucket="test.s3.whatclinic.com" path="path" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
43
|
-
output_store_path "input"
|
44
|
-
}
|
45
|
-
|
46
|
-
## Thumbailing - keep input format; default JPEG quality is 85
|
47
|
-
### Data URI
|
48
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&:width" "&:height" "&:operation?crop" "&:float-y?0.5" "&:background-color?white" "&data-uri=true" {
|
49
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
50
|
-
thumbnail "original" "thumbnail" operation="#{operation}" width="#{width}" height="#{height}" options="float-y:#{float-y},background-color:#{background-color},quality:30"
|
51
|
-
output_data_uri_image "thumbnail" cache-control="s-maxage=31557600"
|
52
|
-
}
|
53
|
-
|
54
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&:width" "&:height?1080" "&:operation?fit" "&:float-y?0.5" "&:background-color?white" "&data-uri=true" {
|
55
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
56
|
-
thumbnail "original" "thumbnail" operation="#{operation}" width="#{width}" height="#{height}" options="float-y:#{float-y},background-color:#{background-color},quality:30"
|
57
|
-
output_data_uri_image "thumbnail" cache-control="s-maxage=31557600"
|
58
|
-
}
|
59
|
-
|
60
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&:height" "&:width?1080" "&:operation?fit" "&:float-y?0.5" "&:background-color?white" "&data-uri=true" {
|
61
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
62
|
-
thumbnail "original" "thumbnail" operation="#{operation}" width="#{width}" height="#{height}" options="float-y:#{float-y},background-color:#{background-color},quality:30"
|
63
|
-
output_data_uri_image "thumbnail" cache-control="s-maxage=31557600"
|
64
|
-
}
|
65
|
-
|
66
|
-
### Thumbnailing based on query string parameters
|
67
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&:width" "&:height" "&:operation?crop" "&:float-y?0.5" "&:background-color?white" {
|
68
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
69
|
-
thumbnail "original" "thumbnail" operation="#{operation}" width="#{width}" height="#{height}" options="float-y:#{float-y},background-color:#{background-color}"
|
70
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
71
|
-
}
|
72
|
-
|
73
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&:width" "&:height?1080" "&:operation?fit" "&:float-y?0.5" "&:background-color?white" {
|
74
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
75
|
-
thumbnail "original" "thumbnail" operation="#{operation}" width="#{width}" height="#{height}" options="float-y:#{float-y},background-color:#{background-color}"
|
76
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
77
|
-
}
|
78
|
-
|
79
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&:height" "&:width?1080" "&:operation?fit" "&:float-y?0.5" "&:background-color?white" {
|
80
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
81
|
-
thumbnail "original" "thumbnail" operation="#{operation}" width="#{width}" height="#{height}" options="float-y:#{float-y},background-color:#{background-color}"
|
82
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
83
|
-
}
|
84
|
-
|
85
|
-
### Thumbnailing to predefined thumbnail sepcs
|
86
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=search" {
|
87
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
88
|
-
thumbnail "original" "thumbnail" operation="pad" width="162" height="162" options="background-color:0xF0F0F0"
|
89
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
90
|
-
}
|
91
|
-
|
92
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=search_v2" {
|
93
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
94
|
-
thumbnail "original" "thumbnail" operation="crop" width="242" height="162" options="float-y:0.2,background-color:0xF0F0F0"
|
95
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
96
|
-
}
|
97
|
-
|
98
|
-
# Special version of search type that can be included in Data URL; will be cache by Varnish only for it's own use in ESI
|
99
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=search_v2_dataurl" {
|
100
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
101
|
-
thumbnail "original" "thumbnail" operation="crop" width="242" height="162" options="float-y:0.2,background-color:0xF0F0F0,quality:30"
|
102
|
-
output_data_uri_image "thumbnail" cache-control="s-maxage=31557600"
|
103
|
-
}
|
104
|
-
|
105
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=mobile_search_v2" {
|
106
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
107
|
-
thumbnail "original" "thumbnail" operation="pad" width="98" height="148"
|
108
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
109
|
-
}
|
110
|
-
|
111
|
-
# Special version of search type that can be included in Data URL; will be cache by Varnish only for it's own use in ESI
|
112
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=mobile_search_v2_dataurl" {
|
113
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
114
|
-
thumbnail "original" "thumbnail" operation="pad" width="98" height="148" options="quality:30"
|
115
|
-
output_data_uri_image "thumbnail" cache-control="s-maxage=31557600"
|
116
|
-
}
|
117
|
-
|
118
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=original" {
|
119
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
120
|
-
thumbnail "original" "thumbnail" operation="crop" width="input" height="input" options="background-color:white"
|
121
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
122
|
-
}
|
123
|
-
|
124
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=search_thumb" {
|
125
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
126
|
-
thumbnail "original" "thumbnail" operation="pad" width="28" height="28" options="background-color:0xF0F0F0"
|
127
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
128
|
-
}
|
129
|
-
|
130
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=brochure" {
|
131
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
132
|
-
thumbnail "original" "thumbnail" operation="pad" width="264" height="264" options="background-color:0xF0F0F0"
|
133
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
134
|
-
}
|
135
|
-
|
136
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=brochure_thumb" {
|
137
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
138
|
-
thumbnail "original" "thumbnail" operation="pad" width="40" height="40" options="background-color:0xF0F0F0"
|
139
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
140
|
-
}
|
141
|
-
|
142
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=admin" {
|
143
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
144
|
-
thumbnail "original" "thumbnail" operation="pad" width="160" height="160" options="background-color:0xF0F0F0"
|
145
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
146
|
-
}
|
147
|
-
|
148
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=admin_thumb" {
|
149
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
150
|
-
thumbnail "original" "thumbnail" operation="pad" width="65" height="65" options="background-color:0xF0F0F0"
|
151
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
152
|
-
}
|
153
|
-
|
154
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=treatment_thumb" {
|
155
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
156
|
-
thumbnail "original" "thumbnail" operation="pad" width="80" height="60" options="background-color:0xF0F0F0"
|
157
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
158
|
-
}
|
159
|
-
|
160
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=staff_member_thumb" {
|
161
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
162
|
-
thumbnail "original" "thumbnail" operation="pad" width="50" height="50" options="background-color:0xF0F0F0"
|
163
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
164
|
-
}
|
165
|
-
|
166
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=consultation" {
|
167
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
168
|
-
thumbnail "original" "thumbnail" operation="pad" width="126" height="126" options="background-color:0xF0F0F0"
|
169
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
170
|
-
}
|
171
|
-
|
172
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=clinic_google_map_thumb" {
|
173
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
174
|
-
thumbnail "original" "thumbnail" operation="pad" width="74" height="74" options="background-color:0xF0F0F0"
|
175
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
176
|
-
}
|
177
|
-
|
178
|
-
get "iss" "v2" "thumbnails" "/(|.+?\\/)(?<input_digest>[0-f]{16}).*\\.(?<image_mime_extension>...)$/" "&type=large" {
|
179
|
-
source_s3 "original" bucket="test.s3.whatclinic.com" path="hash" prefix="dev/httpimagestore/v1/" cache-root="/var/cache/httpimagestore/s3"
|
180
|
-
thumbnail "original" "thumbnail" operation="limit" width="1200" height="900" interlace="PlaneInterlace"
|
181
|
-
output_image "thumbnail" cache-control="public, max-age=31557600, s-maxage=0"
|
182
|
-
}
|
183
|
-
|
data/spec/support/utf_string.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
zażółć gęślą jaźń
|