scale_down 0.6.1 → 0.7.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/CHANGES +4 -0
- data/README.md +88 -37
- data/config.sample.ru +38 -0
- data/lib/scale_down/configuration.rb +4 -0
- data/lib/scale_down/controller.rb +2 -2
- data/lib/scale_down/dispatcher.rb +25 -7
- data/lib/scale_down/version.rb +1 -1
- data/lib/scale_down.rb +1 -1
- data/test/scale_down/configuration_test.rb +20 -0
- data/test/scale_down/controller_test.rb +4 -4
- data/test/scale_down/dispatcher_test.rb +29 -2
- data/test/scale_down_test.rb +26 -2
- metadata +17 -17
- data/config_sample.ru +0 -21
data/CHANGES
CHANGED
data/README.md
CHANGED
@@ -1,64 +1,98 @@
|
|
1
1
|
[](http://travis-ci.org/jweir/ScaleDown)
|
2
2
|
|
3
|
+
The image scaling server used by [Fame Driver](http://famedriver.com).
|
4
|
+
It supports dynamic sizes, image cropping and color conversion (CMYK to RGB).
|
5
|
+
It only supports images on the same machine (this is not a distributed scaler).
|
6
|
+
|
3
7
|
ScaleDown
|
4
8
|
==========
|
9
|
+
So you want to scale an image?
|
10
|
+
------------------------------
|
5
11
|
|
6
|
-
|
12
|
+
You have an image on `example.com`. It has a public path of `/images/john/picture.png`.
|
13
|
+
You want it scaled to fit in a 400x400 pixel box. ScaleDown is running on the subdomain `images`.
|
7
14
|
|
8
|
-
|
15
|
+
http://server/images/john/scaled/400x400/picture.png?HMAC_SIGNATURE
|
9
16
|
|
10
|
-
|
17
|
+
The scaled file is saved in a public path identical to the request. It will be statically served on the next request.
|
11
18
|
|
12
|
-
|
13
|
-
|
19
|
+
Geometry, Labels and Cropping
|
20
|
+
==============================
|
14
21
|
|
15
|
-
|
22
|
+
There are two methods of requesting a scaled image: label or geometry.
|
16
23
|
|
17
|
-
|
24
|
+
Labels
|
25
|
+
------
|
18
26
|
|
19
|
-
|
27
|
+
A label is a predefined box the scaled image will fit within.
|
28
|
+
Labels are defined in the `config.ru` file.
|
20
29
|
|
21
|
-
|
30
|
+
```sh
|
31
|
+
# A label called thumbnail has been defined as "100x100"
|
32
|
+
# The below url will scale picture.png to fit into a 100 x 100 box
|
33
|
+
http://server/images/john/scaled/thumbnail/picture.png
|
34
|
+
^^^^^^
|
35
|
+
```
|
22
36
|
|
23
|
-
|
37
|
+
```ruby
|
38
|
+
# in your config.ru file
|
39
|
+
config.labels = {
|
40
|
+
"thumbnail" => "100x100"
|
41
|
+
}
|
42
|
+
```
|
24
43
|
|
25
|
-
|
44
|
+
Geometry
|
45
|
+
--------
|
26
46
|
|
27
|
-
|
28
|
-
:path_to_file the public path of the original file
|
29
|
-
`scaled` keyword
|
30
|
-
:geometry width x height and an optional `-crop`
|
31
|
-
:filename the filename of the original image to scale
|
32
|
-
:hmac_signature security measure to validate the request
|
47
|
+
Geometries allow the client to request an image of any size.
|
33
48
|
|
49
|
+
A geometry defines a box the image must fit within: `WIDTHxHEIGHT`.
|
50
|
+
|
51
|
+
|
52
|
+
```sh
|
53
|
+
# scale to a 300 pixel width box by 900 pixel high box
|
54
|
+
http://server/images/john/scaled/300x900/picture.png?HMAC_SIGNATURE
|
55
|
+
^^^^^^^
|
56
|
+
```
|
34
57
|
|
35
|
-
|
36
|
-
====================
|
58
|
+
Either, but not both, dimensions may use the keyword `auto`. This will scale the image to fit the defined dimension.
|
37
59
|
|
38
|
-
|
60
|
+
```sh
|
61
|
+
# scale to a 500 pixel wide box, of any height
|
62
|
+
http://server/images/john/scaled/500xauto/picture.png?HMAC_SIGNATURE
|
63
|
+
^^^^
|
64
|
+
```
|
39
65
|
|
40
|
-
|
66
|
+
When using a geometry an HMAC is required (see below).
|
67
|
+
|
68
|
+
Crop
|
69
|
+
----
|
41
70
|
|
42
|
-
|
71
|
+
To crop an image include the `-crop` option. The image will be scaled and cropped to fit the geometry. This is a simple crop positioned on the center and top of the image.
|
43
72
|
|
44
|
-
|
73
|
+
Both geometry and labels accept the `-crop` option.
|
45
74
|
|
46
|
-
|
75
|
+
```sh
|
76
|
+
http://server/images/john/scaled/thumbnail-crop/picture.png
|
77
|
+
http://server/images/john/scaled/100x100-crop/picture.png
|
78
|
+
```
|
47
79
|
|
48
|
-
|
80
|
+
Info
|
81
|
+
----
|
82
|
+
There is a very simple `/info` function for getting image dimensions. It just returns a string with the WIDTHxHEIGHT of the original image.
|
49
83
|
|
50
|
-
http://
|
84
|
+
http://server/images/logo.png/info
|
51
85
|
|
52
86
|
|
53
|
-
HMAC
|
54
|
-
|
87
|
+
HMAC & Geometry
|
88
|
+
==============
|
55
89
|
|
56
|
-
|
90
|
+
An HMAC signature is required to prevent a DOS attack. This ensures that your URL was generated by a trusted source.
|
57
91
|
|
58
92
|
HMAC requires a shared key between the application generating the URL and the ScaleDown server.
|
59
93
|
|
60
|
-
|
61
|
-
|
94
|
+
Ruby HMAC URL Generator
|
95
|
+
------------------
|
62
96
|
|
63
97
|
```ruby
|
64
98
|
require 'ruby-hmac'
|
@@ -66,12 +100,12 @@ require 'ruby-hmac'
|
|
66
100
|
def signed_image_url(absolute_path, filename, geometry)
|
67
101
|
shared_secret = "secret"
|
68
102
|
hmac = HMAC::SHA1.new(shared_secret).update([absolute_path, 'scaled', geometry, filename].join("/")).to_s[0...8]
|
69
|
-
"http://
|
103
|
+
"http://server#{[absolute_path, 'scaled', geometry, CGI.escape(filename)].join("/")}?#{hmac}"
|
70
104
|
end
|
71
105
|
```
|
72
106
|
|
73
|
-
|
74
|
-
|
107
|
+
Node.js HMAC URL Generator
|
108
|
+
---------------------
|
75
109
|
|
76
110
|
```javascript
|
77
111
|
// Uses the Node.js crypot library
|
@@ -88,8 +122,23 @@ function signed_image_url(absolute_path, filename, geometry){
|
|
88
122
|
}
|
89
123
|
```
|
90
124
|
|
91
|
-
|
92
|
-
|
125
|
+
URL Schema
|
126
|
+
==========
|
127
|
+
|
128
|
+
The schema is
|
129
|
+
|
130
|
+
http://:host/:path_to_file/scaled/:target/:filename?:hmac_signature
|
131
|
+
|
132
|
+
:host the address running ScaleDown
|
133
|
+
:path_to_file the public path of the original file
|
134
|
+
`scaled` keyword
|
135
|
+
:target a label or width x height. An optional `-crop` can be included with either
|
136
|
+
:filename the filename of the original image to scale
|
137
|
+
:hmac_signature security measure to validate the request(not required for labels)
|
138
|
+
|
139
|
+
|
140
|
+
Supported Image Formats
|
141
|
+
=======================
|
93
142
|
|
94
143
|
ScaleDown will handle any image that Image Magick can process. But there are some rules:
|
95
144
|
|
@@ -101,7 +150,9 @@ Installation & Configuration
|
|
101
150
|
|
102
151
|
gem install scale_down
|
103
152
|
|
104
|
-
Create a Rackup file (config.ru).
|
153
|
+
Create a Rackup file (config.ru).
|
154
|
+
|
155
|
+
See https://github.com/jweir/ScaleDown/tree/master/config.sample.ru for all options
|
105
156
|
|
106
157
|
```ruby
|
107
158
|
require 'rubygems'
|
data/config.sample.ru
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'scale_down'
|
2
|
+
|
3
|
+
ScaleDown.tap do |config|
|
4
|
+
|
5
|
+
# The location of the public directory where the original are located
|
6
|
+
# This directory will also be the target for writing scaled images
|
7
|
+
# Most likely this will be a symbolic link to a shared directory
|
8
|
+
config.public_path = "#{File.expand_path(File.dirname(__FILE__))}/public"
|
9
|
+
|
10
|
+
# Labels are predefined geometries.
|
11
|
+
# They have the advantage of not requiring an HMAC signature in the URL
|
12
|
+
# The keys should be strings, not symbols
|
13
|
+
config.labels = {
|
14
|
+
"thumbnail" => "100x100"
|
15
|
+
}
|
16
|
+
|
17
|
+
# an array of the max width and height an image can be scaled, in pixels.
|
18
|
+
config.max_dimensions = [1200,1200]
|
19
|
+
|
20
|
+
# the max file size allowed for the original file to be scaled, in bytes
|
21
|
+
scaledown.max_file_size = 25 * 1_048_576 # 25 Megabytes
|
22
|
+
|
23
|
+
# This is the shared secret for generating and verifying the HMAC signature.
|
24
|
+
# This string would be shared with any application generating URLS for scaled images
|
25
|
+
# http://www.random.org/strings/
|
26
|
+
config.hmac_key = "secret"
|
27
|
+
|
28
|
+
# Change the method for generating the HMAC
|
29
|
+
config.hmac_method = HMAC::SHA1
|
30
|
+
|
31
|
+
# How long of an HMAC signature is required
|
32
|
+
config.hmac_length = 8
|
33
|
+
|
34
|
+
# Optional logger
|
35
|
+
# config.logger = YOUR_LOGGER
|
36
|
+
end
|
37
|
+
|
38
|
+
run ScaleDown::Controller
|
@@ -31,6 +31,10 @@ module ScaleDown
|
|
31
31
|
# +Must be set+
|
32
32
|
attr_accessor :public_folder
|
33
33
|
|
34
|
+
# Labels are predefined gemeotries
|
35
|
+
attr_accessor :labels
|
36
|
+
ScaleDown.labels = Hash.new
|
37
|
+
|
34
38
|
def public_folder=(str)
|
35
39
|
@public_folder = str
|
36
40
|
ScaleDown::Controller.public_folder = str
|
@@ -25,7 +25,7 @@ class ScaleDown::Controller < Sinatra::Application
|
|
25
25
|
params = {
|
26
26
|
:hmac => request.env["QUERY_STRING"],
|
27
27
|
:filename => parts.pop,
|
28
|
-
:
|
28
|
+
:target => parts.pop, # the label or geometry
|
29
29
|
:splat => parts
|
30
30
|
}
|
31
31
|
|
@@ -54,7 +54,7 @@ class ScaleDown::Controller < Sinatra::Application
|
|
54
54
|
ScaleDown::Dispatcher.process \
|
55
55
|
:path => params[:splat].join("/"),
|
56
56
|
:filename => params[:filename],
|
57
|
-
:
|
57
|
+
:target => params[:target],
|
58
58
|
:hmac => params[:hmac]
|
59
59
|
end
|
60
60
|
end
|
@@ -37,11 +37,13 @@ class ScaleDown::Dispatcher
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def image_options
|
40
|
-
|
41
|
-
|
42
|
-
{
|
43
|
-
|
44
|
-
|
40
|
+
width, height = (target_is_label? ? ScaleDown.labels[target] : target).split("x")
|
41
|
+
|
42
|
+
{
|
43
|
+
:height => height.to_i,
|
44
|
+
:width => width.to_i,
|
45
|
+
:crop => crop?
|
46
|
+
}
|
45
47
|
end
|
46
48
|
|
47
49
|
def scale
|
@@ -51,8 +53,24 @@ class ScaleDown::Dispatcher
|
|
51
53
|
:options => image_options
|
52
54
|
end
|
53
55
|
|
56
|
+
def target
|
57
|
+
@dimensions ||= @params[:target].split(/-crop\Z/).first
|
58
|
+
end
|
59
|
+
|
60
|
+
def target_is_label?
|
61
|
+
@target_is_label ||= ScaleDown.labels.keys.include?(target)
|
62
|
+
end
|
63
|
+
|
64
|
+
def crop?
|
65
|
+
@crop ||= ! @params[:target].match(/-crop\Z/).nil?
|
66
|
+
end
|
67
|
+
|
54
68
|
def valid_hmac?
|
55
|
-
|
69
|
+
if target_is_label?
|
70
|
+
true
|
71
|
+
else
|
72
|
+
ScaleDown.valid_hmac?(@params)
|
73
|
+
end
|
56
74
|
end
|
57
75
|
|
58
76
|
def redirect_code
|
@@ -60,7 +78,7 @@ class ScaleDown::Dispatcher
|
|
60
78
|
end
|
61
79
|
|
62
80
|
def redirect_path
|
63
|
-
["/"+@params[:path], @params[:
|
81
|
+
["/"+@params[:path], @params[:target], scaled_filename].join("/")
|
64
82
|
end
|
65
83
|
|
66
84
|
def root_file_exists?
|
data/lib/scale_down/version.rb
CHANGED
data/lib/scale_down.rb
CHANGED
@@ -9,5 +9,25 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
9
9
|
assert_equal "/tmp/directory", ScaleDown::Controller.public_folder
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
13
|
+
context "labels" do
|
14
|
+
context "by default" do
|
15
|
+
should "be an empty hash" do
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when defined" do
|
20
|
+
setup do
|
21
|
+
ScaleDown.labels = {
|
22
|
+
"thumbnail" => "40x40",
|
23
|
+
"large" => "600x600"
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
should "return the defined hash" do
|
28
|
+
assert_equal "40x40", ScaleDown.labels["thumbnail"]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
12
32
|
end
|
13
33
|
end
|
@@ -12,16 +12,16 @@ class ScaleDown::Controller::Test < Test::Unit::TestCase
|
|
12
12
|
ScaleDown::Dispatcher.expects(:process).with(
|
13
13
|
:path => "user/path/scaled",
|
14
14
|
:filename => "filename.png",
|
15
|
-
:
|
15
|
+
:target => "400x300-crop-grayscale",
|
16
16
|
:hmac => "HMAC").
|
17
|
-
|
17
|
+
returns ["path","status"]
|
18
18
|
|
19
|
-
|
19
|
+
get '/user/path/scaled/400x300-crop-grayscale/filename.png?HMAC'
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
context "a valid request" do
|
24
|
-
should "
|
24
|
+
should "respond with the file" do
|
25
25
|
ScaleDown::Dispatcher.expects(:process).returns ["/image-path", 302]
|
26
26
|
get "/path/geo/filename?hmac"
|
27
27
|
|
@@ -14,7 +14,7 @@ class ScaleDown::Dispatcher::Test < Test::Unit::TestCase
|
|
14
14
|
@params = {
|
15
15
|
:path => "file/path/scaled",
|
16
16
|
:filename => "filename.png",
|
17
|
-
:
|
17
|
+
:target => "400x300-crop",
|
18
18
|
:hmac => hmac[0...8]
|
19
19
|
}
|
20
20
|
end
|
@@ -87,8 +87,35 @@ class ScaleDown::Dispatcher::Test < Test::Unit::TestCase
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
context "
|
90
|
+
context "target" do
|
91
|
+
context "from a label" do
|
92
|
+
setup do
|
93
|
+
ScaleDown.labels = { "thumbnail" => "40x50" }
|
94
|
+
@subject = ScaleDown::Dispatcher.new :target => "thumbnail"
|
95
|
+
end
|
96
|
+
|
97
|
+
should "use the label's width and height" do
|
98
|
+
dim = @subject.image_options
|
99
|
+
assert_equal 40, dim[:width]
|
100
|
+
assert_equal 50, dim[:height]
|
101
|
+
assert_equal false, dim[:crop]
|
102
|
+
end
|
103
|
+
|
104
|
+
should "always valid the hmac" do
|
105
|
+
assert @subject.valid_hmac?
|
106
|
+
end
|
107
|
+
|
108
|
+
should "work with the cropped flag" do
|
109
|
+
@subject = ScaleDown::Dispatcher.new :target => "thumbnail-crop"
|
110
|
+
dim = @subject.image_options
|
111
|
+
assert_equal 40, dim[:width]
|
112
|
+
assert_equal 50, dim[:height]
|
113
|
+
assert_equal true, dim[:crop]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
91
117
|
|
118
|
+
context "process response" do
|
92
119
|
context "for an existing, unscaled image" do
|
93
120
|
setup do
|
94
121
|
File.expects(:exists?).with("/tmp/file/path/filename.png").returns true
|
data/test/scale_down_test.rb
CHANGED
@@ -26,7 +26,7 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
26
26
|
@params = {
|
27
27
|
:path => "file/path",
|
28
28
|
:filename => "filename.png",
|
29
|
-
:
|
29
|
+
:target => "400x300-crop",
|
30
30
|
:hmac => hmac[0...8]
|
31
31
|
}
|
32
32
|
end
|
@@ -42,6 +42,7 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
42
42
|
|
43
43
|
context "integration test" do
|
44
44
|
setup do
|
45
|
+
|
45
46
|
FileUtils.mkdir_p("/tmp/scale_down/test_images/example_1")
|
46
47
|
FileUtils.cp fixture_path("files/graphic.png"), "/tmp/scale_down/test_images/example_1/graphic.png"
|
47
48
|
FileUtils.mkdir_p("/tmp/scale_down/test_images/example_2")
|
@@ -58,7 +59,7 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
58
59
|
assert_equal "300x500", last_response.body
|
59
60
|
end
|
60
61
|
|
61
|
-
should "get an image and scale it" do
|
62
|
+
should "get an image with a geometry and scale it" do
|
62
63
|
valid_get '/test_images/example_1/scaled/400x300-cropped/graphic.png'
|
63
64
|
assert_equal 200, last_response.status
|
64
65
|
assert File.exists?("/tmp/scale_down/test_images/example_1/scaled/400x300-cropped/graphic.png")
|
@@ -75,6 +76,29 @@ class ScaleDown::Test < Test::Unit::TestCase
|
|
75
76
|
assert_equal 500, last_response.status
|
76
77
|
assert !File.exists?("/tmp/scale_down/test_images/example_2/scaled/400x300-cropped/invalid_jpeg.jpg")
|
77
78
|
end
|
79
|
+
|
80
|
+
context "using a label" do
|
81
|
+
setup do
|
82
|
+
ScaleDown.labels = { "very-large" => "600x600" }
|
83
|
+
end
|
84
|
+
|
85
|
+
should "get an image with a label and scale it" do
|
86
|
+
get '/test_images/example_1/scaled/very-large/graphic.png'
|
87
|
+
assert_equal 200, last_response.status
|
88
|
+
assert File.exists?("/tmp/scale_down/test_images/example_1/scaled/very-large/graphic.png")
|
89
|
+
|
90
|
+
get '/test_images/example_1/scaled/very-large-crop/graphic.png'
|
91
|
+
assert_equal 200, last_response.status
|
92
|
+
assert File.exists?("/tmp/scale_down/test_images/example_1/scaled/very-large-crop/graphic.png")
|
93
|
+
end
|
94
|
+
|
95
|
+
context "that does not exist" do
|
96
|
+
should "return an error" do
|
97
|
+
get '/test_images/example_1/scaled/toosmall/graphic.png'
|
98
|
+
assert_equal 403, last_response.status
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
78
102
|
end
|
79
103
|
end
|
80
104
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scale_down
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.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-01-
|
12
|
+
date: 2012-01-26 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rmagick
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152325300 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '2.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152325300
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sinatra
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152324800 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152324800
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: ruby-hmac
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152324340 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.4.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152324340
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: contest
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152323880 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.1.2
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152323880
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152323420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.9.2.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152323420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152353140 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - =
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.9.8
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152353140
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rack-test
|
82
|
-
requirement: &
|
82
|
+
requirement: &2152352680 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - =
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: 0.5.6
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2152352680
|
91
91
|
description: ''
|
92
92
|
email:
|
93
93
|
- john@famedriver.com
|
@@ -102,7 +102,7 @@ files:
|
|
102
102
|
- README.md
|
103
103
|
- Rakefile
|
104
104
|
- color_profiles/sRGB.icm
|
105
|
-
-
|
105
|
+
- config.sample.ru
|
106
106
|
- lib/scale_down.rb
|
107
107
|
- lib/scale_down/configuration.rb
|
108
108
|
- lib/scale_down/controller.rb
|
data/config_sample.ru
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'scale_down'
|
2
|
-
|
3
|
-
ScaleDown.tap do |config|
|
4
|
-
|
5
|
-
# This is the shared secret. Use something strong
|
6
|
-
# Perhaps a visit to http://www.random.org/strings/?num=10&len=20&digits=on&upperalpha=on&format=html&rnd=new
|
7
|
-
config.hmac_key = "secret"
|
8
|
-
|
9
|
-
# You can use a different HMAC, see the ruby-hmac gen
|
10
|
-
config.hmac_method = HMAC::SHA1
|
11
|
-
|
12
|
-
# The length of the HMAC signature to use
|
13
|
-
config.hmac_length = 8
|
14
|
-
|
15
|
-
# The location of the public directory for serving static files
|
16
|
-
# This might be redudant since it will always, maybe, maybe not, be the same as root_path
|
17
|
-
config.public_path = "#{File.expand_path(File.dirname(__FILE__))}/public"
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
run ScaleDown::Controller
|