dragonfly 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of dragonfly might be problematic. Click here for more details.
- data/.gitignore +7 -0
- data/LICENSE +20 -0
- data/README.markdown +95 -0
- data/Rakefile +60 -0
- data/VERSION +1 -0
- data/config.rb +7 -0
- data/config.ru +10 -0
- data/dragonfly-rails.gemspec +41 -0
- data/dragonfly.gemspec +137 -0
- data/features/dragonfly.feature +38 -0
- data/features/steps/common_steps.rb +8 -0
- data/features/steps/dragonfly_steps.rb +39 -0
- data/features/support/env.rb +25 -0
- data/features/support/image_helpers.rb +9 -0
- data/generators/dragonfly_app/USAGE +16 -0
- data/generators/dragonfly_app/dragonfly_app_generator.rb +54 -0
- data/generators/dragonfly_app/templates/custom_processing.erb +13 -0
- data/generators/dragonfly_app/templates/initializer.erb +7 -0
- data/generators/dragonfly_app/templates/metal_file.erb +32 -0
- data/irbrc.rb +20 -0
- data/lib/dragonfly/active_record_extensions/attachment.rb +117 -0
- data/lib/dragonfly/active_record_extensions/class_methods.rb +41 -0
- data/lib/dragonfly/active_record_extensions/instance_methods.rb +28 -0
- data/lib/dragonfly/active_record_extensions/validations.rb +19 -0
- data/lib/dragonfly/active_record_extensions.rb +12 -0
- data/lib/dragonfly/analysis/analyser.rb +45 -0
- data/lib/dragonfly/analysis/base.rb +10 -0
- data/lib/dragonfly/analysis/r_magick_analyser.rb +40 -0
- data/lib/dragonfly/app.rb +85 -0
- data/lib/dragonfly/app_configuration.rb +9 -0
- data/lib/dragonfly/configurable.rb +113 -0
- data/lib/dragonfly/core_ext/object.rb +8 -0
- data/lib/dragonfly/data_storage/base.rb +19 -0
- data/lib/dragonfly/data_storage/file_data_store.rb +72 -0
- data/lib/dragonfly/data_storage.rb +9 -0
- data/lib/dragonfly/encoding/base.rb +13 -0
- data/lib/dragonfly/encoding/r_magick_encoder.rb +17 -0
- data/lib/dragonfly/extended_temp_object.rb +94 -0
- data/lib/dragonfly/middleware.rb +27 -0
- data/lib/dragonfly/parameters.rb +152 -0
- data/lib/dragonfly/processing/processor.rb +14 -0
- data/lib/dragonfly/processing/r_magick_processor.rb +71 -0
- data/lib/dragonfly/r_magick_configuration.rb +47 -0
- data/lib/dragonfly/rails/images.rb +20 -0
- data/lib/dragonfly/temp_object.rb +118 -0
- data/lib/dragonfly/url_handler.rb +148 -0
- data/lib/dragonfly.rb +33 -0
- data/samples/beach.png +0 -0
- data/samples/egg.png +0 -0
- data/samples/round.gif +0 -0
- data/samples/taj.jpg +0 -0
- data/spec/argument_matchers.rb +29 -0
- data/spec/dragonfly/active_record_extensions/attachment_spec.rb +8 -0
- data/spec/dragonfly/active_record_extensions/initializer.rb +1 -0
- data/spec/dragonfly/active_record_extensions/migration.rb +21 -0
- data/spec/dragonfly/active_record_extensions/model_spec.rb +400 -0
- data/spec/dragonfly/active_record_extensions/models.rb +2 -0
- data/spec/dragonfly/active_record_extensions/spec_helper.rb +23 -0
- data/spec/dragonfly/analysis/analyser_spec.rb +85 -0
- data/spec/dragonfly/analysis/r_magick_analyser_spec.rb +35 -0
- data/spec/dragonfly/app_spec.rb +69 -0
- data/spec/dragonfly/configurable_spec.rb +193 -0
- data/spec/dragonfly/data_storage/data_store_spec.rb +47 -0
- data/spec/dragonfly/data_storage/file_data_store_spec.rb +93 -0
- data/spec/dragonfly/extended_temp_object_spec.rb +67 -0
- data/spec/dragonfly/middleware_spec.rb +44 -0
- data/spec/dragonfly/parameters_spec.rb +293 -0
- data/spec/dragonfly/processing/rmagick_processor_spec.rb +148 -0
- data/spec/dragonfly/temp_object_spec.rb +233 -0
- data/spec/dragonfly/url_handler_spec.rb +246 -0
- data/spec/dragonfly_spec.rb +4 -0
- data/spec/image_matchers.rb +31 -0
- data/spec/simple_matchers.rb +14 -0
- data/spec/spec_helper.rb +19 -0
- metadata +160 -0
@@ -0,0 +1,246 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Dragonfly::UrlHandler do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@url_handler = Dragonfly::UrlHandler.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "extracting parameters from the url" do
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
@url_handler.configure{|c| c.protect_from_dos_attacks = false}
|
13
|
+
@path = "/images/some_image.jpg"
|
14
|
+
@query_string = "m=b&o[d]=e&o[j]=k&e[l]=m"
|
15
|
+
@parameters = @url_handler.url_to_parameters(@path, @query_string)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should correctly extract the uid" do
|
19
|
+
@parameters.uid.should == 'images/some_image'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should behave the same if there is no beginning slash" do
|
23
|
+
parameters = @url_handler.url_to_parameters('images/some_image.jpg', @query_string)
|
24
|
+
parameters.uid.should == 'images/some_image'
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should take into account the path prefix if there is one" do
|
28
|
+
@url_handler.path_prefix = '/images'
|
29
|
+
parameters = @url_handler.url_to_parameters('/images/2009/some_image.jpg', @query_string)
|
30
|
+
parameters.uid.should == '2009/some_image'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should raise an UnknownUrl error if the url doesn't have the path prefix" do
|
34
|
+
@url_handler.path_prefix = '/images'
|
35
|
+
lambda{
|
36
|
+
parameters = @url_handler.url_to_parameters('/wrongprefix/2009/some_image.jpg', @query_string)
|
37
|
+
}.should raise_error(Dragonfly::UrlHandler::UnknownUrl)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should correctly extract the format" do
|
41
|
+
@parameters.format.should == 'jpg'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should correctly extract the processing method" do
|
45
|
+
@parameters.processing_method.should == 'b'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should correctly extract the processing_options" do
|
49
|
+
@parameters.processing_options.should == {:j => 'k', :d => 'e'}
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should correctly extract the encoding" do
|
53
|
+
@parameters.encoding.should == {:l => 'm'}
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should have processing_options and encoding as optional" do
|
57
|
+
parameters = @url_handler.url_to_parameters(@path, 'm=b')
|
58
|
+
parameters.processing_options.should == {}
|
59
|
+
parameters.encoding.should == {}
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should use the parameters class passed in if initialized with one" do
|
63
|
+
parameters_class = mock('parameters_class')
|
64
|
+
url_handler = Dragonfly::UrlHandler.new(parameters_class)
|
65
|
+
url_handler.stub!(:validate_parameters)
|
66
|
+
parameters_class.should_receive(:new)
|
67
|
+
url_handler.url_to_parameters(@path, @query_string)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should raise an UnknownUrl error if the path doesn't have an extension" do
|
71
|
+
lambda{
|
72
|
+
@url_handler.url_to_parameters('hello', @query_string)
|
73
|
+
}.should raise_error(Dragonfly::UrlHandler::UnknownUrl)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should raise an UnknownUrl error if the path doesn't have a uid bit" do
|
77
|
+
lambda{
|
78
|
+
@url_handler.url_to_parameters('.hello', @query_string)
|
79
|
+
}.should raise_error(Dragonfly::UrlHandler::UnknownUrl)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should raise an UnknownUrl error if the path is only slashes" do
|
83
|
+
lambda{
|
84
|
+
@url_handler.url_to_parameters('/./', @query_string)
|
85
|
+
}.should raise_error(Dragonfly::UrlHandler::UnknownUrl)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should set most of the path as the uid if there is more than one dot" do
|
89
|
+
parameters = @url_handler.url_to_parameters('hello.old.bean', @query_string)
|
90
|
+
parameters.uid.should == 'hello.old'
|
91
|
+
parameters.format.should == 'bean'
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "forming a url from parameters" do
|
97
|
+
before(:each) do
|
98
|
+
@parameters = Dragonfly::Parameters.new
|
99
|
+
@parameters.uid = 'thisisunique'
|
100
|
+
@parameters.processing_method = 'b'
|
101
|
+
@parameters.processing_options = {:d => 'e', :j => 'k'}
|
102
|
+
@parameters.format = :gif
|
103
|
+
@parameters.encoding = {:x => 'y'}
|
104
|
+
@url_handler.configure{|c| c.protect_from_dos_attacks = false}
|
105
|
+
end
|
106
|
+
it "should correctly form a query string" do
|
107
|
+
@url_handler.parameters_to_url(@parameters).should match_url('/thisisunique.gif?m=b&o[d]=e&o[j]=k&e[x]=y')
|
108
|
+
end
|
109
|
+
it "should correctly form a query string when dos protection turned on" do
|
110
|
+
@url_handler.configure{|c| c.protect_from_dos_attacks = true}
|
111
|
+
@parameters.should_receive(:generate_sha).and_return('thisismysha12345')
|
112
|
+
@url_handler.parameters_to_url(@parameters).should match_url('/thisisunique.gif?m=b&o[d]=e&o[j]=k&e[x]=y&s=thisismysha12345')
|
113
|
+
end
|
114
|
+
it "should leave out any nil parameters" do
|
115
|
+
@parameters.processing_method = nil
|
116
|
+
@url_handler.parameters_to_url(@parameters).should match_url('/thisisunique.gif?o[d]=e&o[j]=k&e[x]=y')
|
117
|
+
end
|
118
|
+
it "should leave out any empty parameters" do
|
119
|
+
@parameters.processing_options = {}
|
120
|
+
@url_handler.parameters_to_url(@parameters).should match_url('/thisisunique.gif?m=b&e[x]=y')
|
121
|
+
end
|
122
|
+
it "should prefix with the path_prefix if there is one" do
|
123
|
+
@url_handler.path_prefix = '/images'
|
124
|
+
@url_handler.parameters_to_url(@parameters).should match_url('/images/thisisunique.gif?m=b&o[d]=e&o[j]=k&e[x]=y')
|
125
|
+
end
|
126
|
+
it "should validate the parameters" do
|
127
|
+
@parameters.should_receive(:validate!)
|
128
|
+
@url_handler.parameters_to_url(@parameters)
|
129
|
+
end
|
130
|
+
it "should escape any non-url friendly characters except for '/'" do
|
131
|
+
parameters = Dragonfly::Parameters.new :uid => 'hello/u"u', :processing_method => 'm"m', :format => 'jpg'
|
132
|
+
@url_handler.parameters_to_url(parameters).should == '/hello/u%22u.jpg?m=m%22m'
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe "protecting from DOS attacks with SHA" do
|
137
|
+
|
138
|
+
before(:each) do
|
139
|
+
@url_handler.configure{|c|
|
140
|
+
c.protect_from_dos_attacks = true
|
141
|
+
c.secret = 'secret'
|
142
|
+
c.sha_length = 16
|
143
|
+
}
|
144
|
+
@path = "/images/some_image.jpg"
|
145
|
+
@query_string = "m=b&o[d]=e&o[j]=k"
|
146
|
+
@parameters = Dragonfly::Parameters.new
|
147
|
+
Dragonfly::Parameters.stub!(:new).and_return(@parameters)
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should return the parameters as normal if the sha is ok" do
|
151
|
+
@parameters.should_receive(:generate_sha).with('secret', 16).and_return('thisismysha12345')
|
152
|
+
lambda{
|
153
|
+
@url_handler.url_to_parameters(@path, "#{@query_string}&s=thisismysha12345")
|
154
|
+
}.should_not raise_error
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should raise an error if the sha is incorrect" do
|
158
|
+
@parameters.should_receive(:generate_sha).with('secret', 16).and_return('thisismysha12345')
|
159
|
+
lambda{
|
160
|
+
@url_handler.url_to_parameters(@path, "#{@query_string}&s=heyNOTmysha12345")
|
161
|
+
}.should raise_error(Dragonfly::UrlHandler::IncorrectSHA)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should raise an error if the sha isn't given" do
|
165
|
+
lambda{
|
166
|
+
@url_handler.url_to_parameters(@path, @query_string)
|
167
|
+
}.should raise_error(Dragonfly::UrlHandler::SHANotGiven)
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "specifying the SHA length" do
|
171
|
+
|
172
|
+
before(:each) do
|
173
|
+
@url_handler.configure{|c|
|
174
|
+
c.sha_length = 3
|
175
|
+
}
|
176
|
+
Digest::SHA1.should_receive(:hexdigest).and_return("thisismysha12345")
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should use a SHA of the specified length" do
|
180
|
+
lambda{
|
181
|
+
@url_handler.url_to_parameters(@path, "#{@query_string}&s=thi")
|
182
|
+
}.should_not raise_error
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should raise an error if the SHA is correct but too long" do
|
186
|
+
lambda{
|
187
|
+
@url_handler.url_to_parameters(@path, "#{@query_string}&s=this")
|
188
|
+
}.should raise_error(Dragonfly::UrlHandler::IncorrectSHA)
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should raise an error if the SHA is correct but too short" do
|
192
|
+
lambda{
|
193
|
+
@url_handler.url_to_parameters(@path, "#{@query_string}&s=th")
|
194
|
+
}.should raise_error(Dragonfly::UrlHandler::IncorrectSHA)
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should use the secret given to create the sha" do
|
200
|
+
@url_handler.configure{|c| c.secret = 'digby' }
|
201
|
+
Digest::SHA1.should_receive(:hexdigest).with(string_matching(/digby/)).and_return('thisismysha12345')
|
202
|
+
@url_handler.url_to_parameters(@path, "#{@query_string}&s=thisismysha12345")
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|
206
|
+
|
207
|
+
describe "#url_for" do
|
208
|
+
|
209
|
+
it "should pass parameters from Parameter.from_args plus the uid to parameters_to_url" do
|
210
|
+
parameters_class = Class.new(Dragonfly::Parameters)
|
211
|
+
url_handler = Dragonfly::UrlHandler.new(parameters_class)
|
212
|
+
parameters_class.should_receive(:from_args).with(:a, :b, :c).and_return parameters_class.new(:processing_method => :resize)
|
213
|
+
url_handler.should_receive(:parameters_to_url).with(parameters_matching(:processing_method => :resize, :uid => 'some_uid')).and_return 'some.url'
|
214
|
+
url_handler.url_for('some_uid', :a, :b, :c)
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|
218
|
+
|
219
|
+
describe "sanity check" do
|
220
|
+
it "parameters_to_url should exactly reverse map url_to_parameters" do
|
221
|
+
Digest::SHA1.should_receive(:hexdigest).exactly(:twice).and_return('thisismysha12345')
|
222
|
+
path = "/images/some_image.gif"
|
223
|
+
query_string = "m=b&o[d]=e&o[j]=k&e[l]=m&s=thisismysha12345"
|
224
|
+
parameters = @url_handler.url_to_parameters(path, query_string)
|
225
|
+
@url_handler.parameters_to_url(parameters).should match_url("#{path}?#{query_string}")
|
226
|
+
end
|
227
|
+
|
228
|
+
it "url_to_parameters should exactly reverse map parameters_to_url" do
|
229
|
+
@url_handler.configure{|c| c.protect_from_dos_attacks = true}
|
230
|
+
parameters = Dragonfly::Parameters.new(
|
231
|
+
:processing_method => 'b',
|
232
|
+
:processing_options => {
|
233
|
+
:d => 'e',
|
234
|
+
:j => 'k'
|
235
|
+
},
|
236
|
+
:format => 'jpg',
|
237
|
+
:encoding => {:x => 'y'},
|
238
|
+
:uid => 'thisisunique'
|
239
|
+
)
|
240
|
+
|
241
|
+
url = @url_handler.parameters_to_url(parameters)
|
242
|
+
@url_handler.url_to_parameters(*url.split('?')).should == parameters
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
def image_properties(data)
|
2
|
+
tempfile = Tempfile.new('image')
|
3
|
+
tempfile.write(data)
|
4
|
+
tempfile.close
|
5
|
+
details = `identify #{tempfile.path}`
|
6
|
+
# example of details string:
|
7
|
+
# myimage.png PNG 200x100 200x100+0+0 8-bit DirectClass 31.2kb
|
8
|
+
filename, format, geometry, geometry_2, depth, image_class, size = details.split(' ')
|
9
|
+
width, height = geometry.split('x')
|
10
|
+
{
|
11
|
+
:filename => filename,
|
12
|
+
:format => format.downcase,
|
13
|
+
:width => width,
|
14
|
+
:height => height,
|
15
|
+
:depth => depth,
|
16
|
+
:image_class => image_class,
|
17
|
+
:size => size
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def have_width(width)
|
22
|
+
simple_matcher("have width #{width}"){|given| image_properties(given)[:width].to_i.should == width }
|
23
|
+
end
|
24
|
+
|
25
|
+
def have_height(height)
|
26
|
+
simple_matcher("have height #{height}"){|given| image_properties(given)[:height].to_i.should == height }
|
27
|
+
end
|
28
|
+
|
29
|
+
def have_format(format)
|
30
|
+
simple_matcher("have format #{format}"){|given| image_properties(given)[:format].should == format }
|
31
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
def match_url(url)
|
2
|
+
simple_matcher("match url #{url}") do |given|
|
3
|
+
given_path, given_query_string = given.split('?')
|
4
|
+
path, query_string = url.split('?')
|
5
|
+
|
6
|
+
path == given_path && given_query_string.split('&').sort == query_string.split('&').sort
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def be_an_empty_directory
|
11
|
+
simple_matcher("be empty") do |given|
|
12
|
+
Dir.entries(given) == ['.','..']
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'ruby-debug'
|
4
|
+
|
5
|
+
require File.dirname(__FILE__) + '/../lib/dragonfly'
|
6
|
+
$:.unshift(File.dirname(__FILE__))
|
7
|
+
require 'argument_matchers'
|
8
|
+
require 'simple_matchers'
|
9
|
+
require 'image_matchers'
|
10
|
+
|
11
|
+
SAMPLES_DIR = File.expand_path(File.dirname(__FILE__) + '/../samples') unless defined?(SAMPLES_DIR)
|
12
|
+
|
13
|
+
Spec::Runner.configure do |config|
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def todo
|
18
|
+
raise "TODO"
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dragonfly
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark Evans
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-11-09 00:00:00 +00:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rack
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description:
|
26
|
+
email: mark@new-bamboo.co.uk
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- LICENSE
|
33
|
+
- README.markdown
|
34
|
+
files:
|
35
|
+
- .gitignore
|
36
|
+
- LICENSE
|
37
|
+
- README.markdown
|
38
|
+
- Rakefile
|
39
|
+
- VERSION
|
40
|
+
- config.rb
|
41
|
+
- config.ru
|
42
|
+
- dragonfly-rails.gemspec
|
43
|
+
- dragonfly.gemspec
|
44
|
+
- features/dragonfly.feature
|
45
|
+
- features/steps/common_steps.rb
|
46
|
+
- features/steps/dragonfly_steps.rb
|
47
|
+
- features/support/env.rb
|
48
|
+
- features/support/image_helpers.rb
|
49
|
+
- generators/dragonfly_app/USAGE
|
50
|
+
- generators/dragonfly_app/dragonfly_app_generator.rb
|
51
|
+
- generators/dragonfly_app/templates/custom_processing.erb
|
52
|
+
- generators/dragonfly_app/templates/initializer.erb
|
53
|
+
- generators/dragonfly_app/templates/metal_file.erb
|
54
|
+
- irbrc.rb
|
55
|
+
- lib/dragonfly.rb
|
56
|
+
- lib/dragonfly/active_record_extensions.rb
|
57
|
+
- lib/dragonfly/active_record_extensions/attachment.rb
|
58
|
+
- lib/dragonfly/active_record_extensions/class_methods.rb
|
59
|
+
- lib/dragonfly/active_record_extensions/instance_methods.rb
|
60
|
+
- lib/dragonfly/active_record_extensions/validations.rb
|
61
|
+
- lib/dragonfly/analysis/analyser.rb
|
62
|
+
- lib/dragonfly/analysis/base.rb
|
63
|
+
- lib/dragonfly/analysis/r_magick_analyser.rb
|
64
|
+
- lib/dragonfly/app.rb
|
65
|
+
- lib/dragonfly/app_configuration.rb
|
66
|
+
- lib/dragonfly/configurable.rb
|
67
|
+
- lib/dragonfly/core_ext/object.rb
|
68
|
+
- lib/dragonfly/data_storage.rb
|
69
|
+
- lib/dragonfly/data_storage/base.rb
|
70
|
+
- lib/dragonfly/data_storage/file_data_store.rb
|
71
|
+
- lib/dragonfly/encoding/base.rb
|
72
|
+
- lib/dragonfly/encoding/r_magick_encoder.rb
|
73
|
+
- lib/dragonfly/extended_temp_object.rb
|
74
|
+
- lib/dragonfly/middleware.rb
|
75
|
+
- lib/dragonfly/parameters.rb
|
76
|
+
- lib/dragonfly/processing/processor.rb
|
77
|
+
- lib/dragonfly/processing/r_magick_processor.rb
|
78
|
+
- lib/dragonfly/r_magick_configuration.rb
|
79
|
+
- lib/dragonfly/rails/images.rb
|
80
|
+
- lib/dragonfly/temp_object.rb
|
81
|
+
- lib/dragonfly/url_handler.rb
|
82
|
+
- samples/beach.png
|
83
|
+
- samples/egg.png
|
84
|
+
- samples/round.gif
|
85
|
+
- samples/taj.jpg
|
86
|
+
- spec/argument_matchers.rb
|
87
|
+
- spec/dragonfly/active_record_extensions/attachment_spec.rb
|
88
|
+
- spec/dragonfly/active_record_extensions/initializer.rb
|
89
|
+
- spec/dragonfly/active_record_extensions/migration.rb
|
90
|
+
- spec/dragonfly/active_record_extensions/model_spec.rb
|
91
|
+
- spec/dragonfly/active_record_extensions/models.rb
|
92
|
+
- spec/dragonfly/active_record_extensions/spec_helper.rb
|
93
|
+
- spec/dragonfly/analysis/analyser_spec.rb
|
94
|
+
- spec/dragonfly/analysis/r_magick_analyser_spec.rb
|
95
|
+
- spec/dragonfly/app_spec.rb
|
96
|
+
- spec/dragonfly/configurable_spec.rb
|
97
|
+
- spec/dragonfly/data_storage/data_store_spec.rb
|
98
|
+
- spec/dragonfly/data_storage/file_data_store_spec.rb
|
99
|
+
- spec/dragonfly/extended_temp_object_spec.rb
|
100
|
+
- spec/dragonfly/middleware_spec.rb
|
101
|
+
- spec/dragonfly/parameters_spec.rb
|
102
|
+
- spec/dragonfly/processing/rmagick_processor_spec.rb
|
103
|
+
- spec/dragonfly/temp_object_spec.rb
|
104
|
+
- spec/dragonfly/url_handler_spec.rb
|
105
|
+
- spec/dragonfly_spec.rb
|
106
|
+
- spec/image_matchers.rb
|
107
|
+
- spec/simple_matchers.rb
|
108
|
+
- spec/spec_helper.rb
|
109
|
+
has_rdoc: true
|
110
|
+
homepage: http://github.com/markevans/dragonfly
|
111
|
+
licenses: []
|
112
|
+
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options:
|
115
|
+
- --charset=UTF-8
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: "0"
|
123
|
+
version:
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: "0"
|
129
|
+
version:
|
130
|
+
requirements: []
|
131
|
+
|
132
|
+
rubyforge_project:
|
133
|
+
rubygems_version: 1.3.5
|
134
|
+
signing_key:
|
135
|
+
specification_version: 3
|
136
|
+
summary: dragonfly is an on-the-fly processing/encoding framework written as a Rack application. It includes an extension for Ruby on Rails to enable easy image handling
|
137
|
+
test_files:
|
138
|
+
- spec/argument_matchers.rb
|
139
|
+
- spec/dragonfly/active_record_extensions/attachment_spec.rb
|
140
|
+
- spec/dragonfly/active_record_extensions/initializer.rb
|
141
|
+
- spec/dragonfly/active_record_extensions/migration.rb
|
142
|
+
- spec/dragonfly/active_record_extensions/model_spec.rb
|
143
|
+
- spec/dragonfly/active_record_extensions/models.rb
|
144
|
+
- spec/dragonfly/active_record_extensions/spec_helper.rb
|
145
|
+
- spec/dragonfly/analysis/analyser_spec.rb
|
146
|
+
- spec/dragonfly/analysis/r_magick_analyser_spec.rb
|
147
|
+
- spec/dragonfly/app_spec.rb
|
148
|
+
- spec/dragonfly/configurable_spec.rb
|
149
|
+
- spec/dragonfly/data_storage/data_store_spec.rb
|
150
|
+
- spec/dragonfly/data_storage/file_data_store_spec.rb
|
151
|
+
- spec/dragonfly/extended_temp_object_spec.rb
|
152
|
+
- spec/dragonfly/middleware_spec.rb
|
153
|
+
- spec/dragonfly/parameters_spec.rb
|
154
|
+
- spec/dragonfly/processing/rmagick_processor_spec.rb
|
155
|
+
- spec/dragonfly/temp_object_spec.rb
|
156
|
+
- spec/dragonfly/url_handler_spec.rb
|
157
|
+
- spec/dragonfly_spec.rb
|
158
|
+
- spec/image_matchers.rb
|
159
|
+
- spec/simple_matchers.rb
|
160
|
+
- spec/spec_helper.rb
|