paperclip-cloudfiles 2.3.1.1.6 → 2.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +5 -0
- data/Rakefile +9 -38
- data/lib/paperclip.rb +51 -18
- data/lib/paperclip/attachment.rb +6 -13
- data/lib/paperclip/callback_compatability.rb +50 -22
- data/lib/paperclip/geometry.rb +1 -1
- data/lib/paperclip/interpolations.rb +4 -4
- data/lib/paperclip/iostream.rb +1 -1
- data/lib/paperclip/matchers.rb +29 -0
- data/lib/paperclip/matchers/have_attached_file_matcher.rb +8 -0
- data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +11 -1
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +9 -2
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +12 -1
- data/lib/paperclip/storage.rb +17 -17
- data/lib/paperclip/thumbnail.rb +16 -13
- data/lib/paperclip/upfile.rb +5 -1
- data/shoulda_macros/paperclip.rb +4 -2
- data/test/attachment_test.rb +11 -17
- data/test/helper.rb +61 -21
- data/test/interpolations_test.rb +4 -4
- data/test/iostream_test.rb +1 -1
- data/test/matchers/have_attached_file_matcher_test.rb +9 -6
- data/test/matchers/validate_attachment_content_type_matcher_test.rb +14 -8
- data/test/matchers/validate_attachment_presence_matcher_test.rb +8 -5
- data/test/matchers/validate_attachment_size_matcher_test.rb +17 -17
- data/test/paperclip_test.rb +24 -25
- data/test/storage_test.rb +32 -19
- data/test/thumbnail_test.rb +6 -6
- data/test/upfile_test.rb +8 -0
- metadata +30 -19
data/test/interpolations_test.rb
CHANGED
@@ -11,12 +11,12 @@ class InterpolationsTest < Test::Unit::TestCase
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
should "return the
|
15
|
-
assert_equal
|
14
|
+
should "return the Rails.root" do
|
15
|
+
assert_equal Rails.root, Paperclip::Interpolations.rails_root(:attachment, :style)
|
16
16
|
end
|
17
17
|
|
18
|
-
should "return the
|
19
|
-
assert_equal
|
18
|
+
should "return the Rails.env" do
|
19
|
+
assert_equal Rails.env, Paperclip::Interpolations.rails_env(:attachment, :style)
|
20
20
|
end
|
21
21
|
|
22
22
|
should "return the class of the Interpolations module when called with no params" do
|
data/test/iostream_test.rb
CHANGED
@@ -66,7 +66,7 @@ class IOStreamTest < Test::Unit::TestCase
|
|
66
66
|
name = File.basename(@file.path)
|
67
67
|
extension = File.extname(name)
|
68
68
|
basename = File.basename(name, extension)
|
69
|
-
assert_match %r[
|
69
|
+
assert_match %r[^stream.*?#{Regexp.quote(extension)}], File.basename(@tempfile.path)
|
70
70
|
end
|
71
71
|
|
72
72
|
should "have the Tempfile contain the same data as the file" do
|
@@ -8,14 +8,17 @@ class HaveAttachedFileMatcherTest < Test::Unit::TestCase
|
|
8
8
|
@matcher = self.class.have_attached_file(:avatar)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
context "given a class with no attachment" do
|
12
|
+
should_reject_dummy_class
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
context "given a class with an attachment" do
|
16
|
+
setup do
|
17
|
+
modify_table("dummies"){|d| d.string :avatar_file_name }
|
18
|
+
@dummy_class.has_attached_file :avatar
|
19
|
+
end
|
20
|
+
|
21
|
+
should_accept_dummy_class
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
@@ -14,18 +14,24 @@ class ValidateAttachmentContentTypeMatcherTest < Test::Unit::TestCase
|
|
14
14
|
rejecting(%w(audio/mp3 application/octet-stream))
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
context "given a class with no validation" do
|
18
|
+
should_reject_dummy_class
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
context "given a class with a validation that doesn't match" do
|
22
|
+
setup do
|
23
|
+
@dummy_class.validates_attachment_content_type :avatar, :content_type => %r{audio/.*}
|
24
|
+
end
|
25
|
+
|
26
|
+
should_reject_dummy_class
|
24
27
|
end
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
context "given a class with a matching validation" do
|
30
|
+
setup do
|
31
|
+
@dummy_class.validates_attachment_content_type :avatar, :content_type => %r{image/.*}
|
32
|
+
end
|
33
|
+
|
34
|
+
should_accept_dummy_class
|
29
35
|
end
|
30
36
|
end
|
31
37
|
end
|
@@ -11,13 +11,16 @@ class ValidateAttachmentPresenceMatcherTest < Test::Unit::TestCase
|
|
11
11
|
@matcher = self.class.validate_attachment_presence(:avatar)
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
context "given a class with no validation" do
|
15
|
+
should_reject_dummy_class
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
context "given a class with a matching validation" do
|
19
|
+
setup do
|
20
|
+
@dummy_class.validates_attachment_presence :avatar
|
21
|
+
end
|
22
|
+
|
23
|
+
should_accept_dummy_class
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
@@ -14,37 +14,37 @@ class ValidateAttachmentSizeMatcherTest < Test::Unit::TestCase
|
|
14
14
|
context "of limited size" do
|
15
15
|
setup{ @matcher = self.class.validate_attachment_size(:avatar).in(256..1024) }
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
context "given a class with no validation" do
|
18
|
+
should_reject_dummy_class
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
@dummy_class.validates_attachment_size :avatar, :in => 256..2048
|
23
|
-
|
21
|
+
context "given a class with a validation that's too high" do
|
22
|
+
setup { @dummy_class.validates_attachment_size :avatar, :in => 256..2048 }
|
23
|
+
should_reject_dummy_class
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
@dummy_class.validates_attachment_size :avatar, :in => 0..1024
|
28
|
-
|
26
|
+
context "given a class with a validation that's too low" do
|
27
|
+
setup { @dummy_class.validates_attachment_size :avatar, :in => 0..1024 }
|
28
|
+
should_reject_dummy_class
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
@dummy_class.validates_attachment_size :avatar, :in => 256..1024
|
33
|
-
|
31
|
+
context "given a class with a validation that matches" do
|
32
|
+
setup { @dummy_class.validates_attachment_size :avatar, :in => 256..1024 }
|
33
|
+
should_accept_dummy_class
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
context "validates_attachment_size with infinite range" do
|
38
38
|
setup{ @matcher = self.class.validate_attachment_size(:avatar) }
|
39
39
|
|
40
|
-
|
41
|
-
@dummy_class.validates_attachment_size :avatar, :less_than => 1
|
42
|
-
|
40
|
+
context "given a class with an upper limit" do
|
41
|
+
setup { @dummy_class.validates_attachment_size :avatar, :less_than => 1 }
|
42
|
+
should_accept_dummy_class
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
@dummy_class.validates_attachment_size :avatar, :greater_than => 1
|
47
|
-
|
45
|
+
context "given a class with no upper limit" do
|
46
|
+
setup { @dummy_class.validates_attachment_size :avatar, :greater_than => 1 }
|
47
|
+
should_accept_dummy_class
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
data/test/paperclip_test.rb
CHANGED
@@ -16,8 +16,8 @@ class PaperclipTest < Test::Unit::TestCase
|
|
16
16
|
should "execute the right command" do
|
17
17
|
Paperclip.expects(:path_for_command).with("convert").returns("/usr/bin/convert")
|
18
18
|
Paperclip.expects(:bit_bucket).returns("/dev/null")
|
19
|
-
Paperclip.expects(:"`").with("/usr/bin/convert one.jpg two.jpg 2>/dev/null")
|
20
|
-
Paperclip.run("convert", "one.jpg two.jpg")
|
19
|
+
Paperclip.expects(:"`").with("/usr/bin/convert 'one.jpg' 'two.jpg' 2>/dev/null")
|
20
|
+
Paperclip.run("convert", "one.jpg", "two.jpg")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -35,43 +35,42 @@ class PaperclipTest < Test::Unit::TestCase
|
|
35
35
|
should "execute the right command" do
|
36
36
|
Paperclip.expects(:path_for_command).with("convert").returns("convert")
|
37
37
|
Paperclip.expects(:bit_bucket).returns("/dev/null")
|
38
|
-
Paperclip.expects(:"`").with("convert one.jpg two.jpg 2>/dev/null")
|
39
|
-
Paperclip.run("convert", "one.jpg two.jpg")
|
38
|
+
Paperclip.expects(:"`").with("convert 'one.jpg' 'two.jpg' 2>/dev/null")
|
39
|
+
Paperclip.run("convert", "one.jpg", "two.jpg")
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
context "Calling Paperclip.run and logging" do
|
44
|
-
|
44
|
+
should "log the command when :log_command is true" do
|
45
45
|
Paperclip.options[:image_magick_path] = nil
|
46
46
|
Paperclip.options[:command_path] = nil
|
47
47
|
Paperclip.stubs(:bit_bucket).returns("/dev/null")
|
48
|
-
Paperclip.
|
49
|
-
Paperclip.
|
50
|
-
end
|
51
|
-
|
52
|
-
should "log the command when :log_command is true" do
|
48
|
+
Paperclip.expects(:log).with("this 'is the command' 2>/dev/null")
|
49
|
+
Paperclip.expects(:"`").with("this 'is the command' 2>/dev/null")
|
53
50
|
Paperclip.options[:log_command] = true
|
54
51
|
Paperclip.run("this","is the command")
|
55
|
-
assert_received(Paperclip, :log) do |p|
|
56
|
-
p.with("this is the command 2>/dev/null")
|
57
|
-
end
|
58
|
-
assert_received(Paperclip, :`) do |p|
|
59
|
-
p.with("this is the command 2>/dev/null")
|
60
|
-
end
|
61
52
|
end
|
62
53
|
|
63
54
|
should "not log the command when :log_command is false" do
|
55
|
+
Paperclip.options[:image_magick_path] = nil
|
56
|
+
Paperclip.options[:command_path] = nil
|
57
|
+
Paperclip.stubs(:bit_bucket).returns("/dev/null")
|
58
|
+
Paperclip.expects(:log).with("this 'is the command' 2>/dev/null").never
|
59
|
+
Paperclip.expects(:"`").with("this 'is the command' 2>/dev/null")
|
64
60
|
Paperclip.options[:log_command] = false
|
65
61
|
Paperclip.run("this","is the command")
|
66
|
-
assert_received(Paperclip, :log) do |p|
|
67
|
-
p.with("this is the command 2>/dev/null").never
|
68
|
-
end
|
69
|
-
assert_received(Paperclip, :`) do |p|
|
70
|
-
p.with("this is the command 2>/dev/null")
|
71
|
-
end
|
72
62
|
end
|
73
63
|
end
|
74
64
|
|
65
|
+
should "prevent dangerous characters in the command via quoting" do
|
66
|
+
Paperclip.options[:image_magick_path] = nil
|
67
|
+
Paperclip.options[:command_path] = nil
|
68
|
+
Paperclip.options[:log_command] = false
|
69
|
+
Paperclip.options[:swallow_stderr] = false
|
70
|
+
Paperclip.expects(:"`").with(%q[this 'is' 'jack'\''s' '`command`' 'line!'])
|
71
|
+
Paperclip.run("this", "is", "jack's", "`command`", "line!")
|
72
|
+
end
|
73
|
+
|
75
74
|
context "Paperclip.bit_bucket" do
|
76
75
|
context "on systems without /dev/null" do
|
77
76
|
setup do
|
@@ -257,11 +256,11 @@ class PaperclipTest < Test::Unit::TestCase
|
|
257
256
|
end
|
258
257
|
if validation == :presence
|
259
258
|
should "have an error on the attachment" do
|
260
|
-
assert @dummy.errors
|
259
|
+
assert @dummy.errors[:avatar_file_name]
|
261
260
|
end
|
262
261
|
else
|
263
262
|
should "not have an error on the attachment" do
|
264
|
-
|
263
|
+
assert @dummy.errors[:avatar_file_name].blank?, @dummy.errors.full_messages.join(", ")
|
265
264
|
end
|
266
265
|
end
|
267
266
|
end
|
@@ -310,7 +309,7 @@ class PaperclipTest < Test::Unit::TestCase
|
|
310
309
|
end
|
311
310
|
|
312
311
|
should "have a file size min/max error message" do
|
313
|
-
|
312
|
+
assert @dummy.errors[:avatar_file_size].any?{|e| e.match %r/between 0 and 10240 bytes/ }
|
314
313
|
end
|
315
314
|
end
|
316
315
|
end
|
data/test/storage_test.rb
CHANGED
@@ -4,7 +4,7 @@ require 'aws/s3'
|
|
4
4
|
class StorageTest < Test::Unit::TestCase
|
5
5
|
def rails_env(env)
|
6
6
|
silence_warnings do
|
7
|
-
Object.const_set(:
|
7
|
+
Object.const_set(:Rails, stub('Rails', :env => env))
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -17,12 +17,6 @@ class StorageTest < Test::Unit::TestCase
|
|
17
17
|
|
18
18
|
@dummy = Dummy.new
|
19
19
|
@avatar = @dummy.avatar
|
20
|
-
|
21
|
-
@current_env = RAILS_ENV
|
22
|
-
end
|
23
|
-
|
24
|
-
teardown do
|
25
|
-
rails_env(@current_env)
|
26
20
|
end
|
27
21
|
|
28
22
|
should "get the correct credentials when RAILS_ENV is production" do
|
@@ -100,7 +94,7 @@ class StorageTest < Test::Unit::TestCase
|
|
100
94
|
assert_match %r{^http://s3.amazonaws.com/bucket/avatars/stringio.txt}, @dummy.avatar.url
|
101
95
|
end
|
102
96
|
end
|
103
|
-
|
97
|
+
|
104
98
|
context "" do
|
105
99
|
setup do
|
106
100
|
container = mock
|
@@ -161,7 +155,7 @@ class StorageTest < Test::Unit::TestCase
|
|
161
155
|
assert_match %r{^http://something.something.com/avatars/stringio.txt}, @dummy.avatar.url
|
162
156
|
end
|
163
157
|
end
|
164
|
-
|
158
|
+
|
165
159
|
context "Generating a url with an expiration" do
|
166
160
|
setup do
|
167
161
|
AWS::S3::Base.stubs(:establish_connection!)
|
@@ -173,17 +167,17 @@ class StorageTest < Test::Unit::TestCase
|
|
173
167
|
:s3_host_alias => "something.something.com",
|
174
168
|
:path => ":attachment/:basename.:extension",
|
175
169
|
:url => ":s3_alias_url"
|
176
|
-
|
170
|
+
|
177
171
|
rails_env("production")
|
178
|
-
|
172
|
+
|
179
173
|
@dummy = Dummy.new
|
180
174
|
@dummy.avatar = StringIO.new(".")
|
181
|
-
|
175
|
+
|
182
176
|
AWS::S3::S3Object.expects(:url_for).with("avatars/stringio.txt", "prod_bucket", { :expires_in => 3600 })
|
183
|
-
|
177
|
+
|
184
178
|
@dummy.avatar.expiring_url
|
185
179
|
end
|
186
|
-
|
180
|
+
|
187
181
|
should "should succeed" do
|
188
182
|
assert true
|
189
183
|
end
|
@@ -198,11 +192,8 @@ class StorageTest < Test::Unit::TestCase
|
|
198
192
|
:development => { :bucket => "dev_bucket" }
|
199
193
|
}
|
200
194
|
@dummy = Dummy.new
|
201
|
-
@old_env = RAILS_ENV
|
202
195
|
end
|
203
196
|
|
204
|
-
teardown{ rails_env(@old_env) }
|
205
|
-
|
206
197
|
should "get the right bucket in production" do
|
207
198
|
rails_env("production")
|
208
199
|
assert_equal "prod_bucket", @dummy.avatar.bucket_name
|
@@ -285,7 +276,7 @@ class StorageTest < Test::Unit::TestCase
|
|
285
276
|
assert true
|
286
277
|
end
|
287
278
|
end
|
288
|
-
|
279
|
+
|
289
280
|
context "and remove" do
|
290
281
|
setup do
|
291
282
|
AWS::S3::S3Object.stubs(:exists?).returns(true)
|
@@ -376,7 +367,7 @@ class StorageTest < Test::Unit::TestCase
|
|
376
367
|
:bucket => lambda { |attachment| "bucket_#{attachment.instance.other}" },
|
377
368
|
:s3_credentials => {:not => :important}
|
378
369
|
end
|
379
|
-
|
370
|
+
|
380
371
|
should "get the right bucket name" do
|
381
372
|
assert "bucket_a", Dummy.new(:other => 'a').avatar.bucket_name
|
382
373
|
assert "bucket_b", Dummy.new(:other => 'b').avatar.bucket_name
|
@@ -439,6 +430,28 @@ class StorageTest < Test::Unit::TestCase
|
|
439
430
|
end
|
440
431
|
end
|
441
432
|
|
433
|
+
context "with S3 credentials supplied as Pathname" do
|
434
|
+
setup do
|
435
|
+
ENV['S3_KEY'] = 'pathname_key'
|
436
|
+
ENV['S3_BUCKET'] = 'pathname_bucket'
|
437
|
+
ENV['S3_SECRET'] = 'pathname_secret'
|
438
|
+
|
439
|
+
rails_env('test')
|
440
|
+
|
441
|
+
rebuild_model :storage => :s3,
|
442
|
+
:s3_credentials => Pathname.new(File.join(File.dirname(__FILE__))).join("fixtures/s3.yml")
|
443
|
+
|
444
|
+
Dummy.delete_all
|
445
|
+
@dummy = Dummy.new
|
446
|
+
end
|
447
|
+
|
448
|
+
should "parse the credentials" do
|
449
|
+
assert_equal 'pathname_bucket', @dummy.avatar.bucket_name
|
450
|
+
assert_equal 'pathname_key', AWS::S3::Base.connection.options[:access_key_id]
|
451
|
+
assert_equal 'pathname_secret', AWS::S3::Base.connection.options[:secret_access_key]
|
452
|
+
end
|
453
|
+
end
|
454
|
+
|
442
455
|
context "with S3 credentials in a YAML file" do
|
443
456
|
setup do
|
444
457
|
ENV['S3_KEY'] = 'env_key'
|
data/test/thumbnail_test.rb
CHANGED
@@ -92,7 +92,7 @@ class ThumbnailTest < Test::Unit::TestCase
|
|
92
92
|
|
93
93
|
should "send the right command to convert when sent #make" do
|
94
94
|
Paperclip.expects(:"`").with do |arg|
|
95
|
-
arg.match %r{convert
|
95
|
+
arg.match %r{convert '#{File.expand_path(@thumb.file.path)}\[0\]' '-resize' 'x50' '-crop' '100x50\+114\+0' '\+repage' '.*?'}
|
96
96
|
end
|
97
97
|
@thumb.make
|
98
98
|
end
|
@@ -111,12 +111,12 @@ class ThumbnailTest < Test::Unit::TestCase
|
|
111
111
|
end
|
112
112
|
|
113
113
|
should "have source_file_options value set" do
|
114
|
-
assert_equal "-strip", @thumb.source_file_options
|
114
|
+
assert_equal ["-strip"], @thumb.source_file_options
|
115
115
|
end
|
116
116
|
|
117
117
|
should "send the right command to convert when sent #make" do
|
118
118
|
Paperclip.expects(:"`").with do |arg|
|
119
|
-
arg.match %r{convert
|
119
|
+
arg.match %r{convert '-strip' '#{File.expand_path(@thumb.file.path)}\[0\]' '-resize' 'x50' '-crop' '100x50\+114\+0' '\+repage' '.*?'}
|
120
120
|
end
|
121
121
|
@thumb.make
|
122
122
|
end
|
@@ -149,12 +149,12 @@ class ThumbnailTest < Test::Unit::TestCase
|
|
149
149
|
end
|
150
150
|
|
151
151
|
should "have convert_options value set" do
|
152
|
-
assert_equal "-strip -depth 8", @thumb.convert_options
|
152
|
+
assert_equal %w"-strip -depth 8", @thumb.convert_options
|
153
153
|
end
|
154
154
|
|
155
155
|
should "send the right command to convert when sent #make" do
|
156
156
|
Paperclip.expects(:"`").with do |arg|
|
157
|
-
arg.match %r{convert
|
157
|
+
arg.match %r{convert '#{File.expand_path(@thumb.file.path)}\[0\]' '-resize' 'x50' '-crop' '100x50\+114\+0' '\+repage' '-strip' '-depth' '8' '.*?'}
|
158
158
|
end
|
159
159
|
@thumb.make
|
160
160
|
end
|
@@ -187,7 +187,7 @@ class ThumbnailTest < Test::Unit::TestCase
|
|
187
187
|
end
|
188
188
|
|
189
189
|
should "not get resized by default" do
|
190
|
-
|
190
|
+
assert !@thumb.transformation_command.include?("-resize")
|
191
191
|
end
|
192
192
|
end
|
193
193
|
end
|
data/test/upfile_test.rb
CHANGED
@@ -25,4 +25,12 @@ class UpfileTest < Test::Unit::TestCase
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
+
|
29
|
+
should "return a content_type of text/plain on a real file whose content_type is determined with the file command" do
|
30
|
+
file = File.new(File.join(File.dirname(__FILE__), "..", "LICENSE"))
|
31
|
+
class << file
|
32
|
+
include Paperclip::Upfile
|
33
|
+
end
|
34
|
+
assert_equal 'text/plain', file.content_type
|
35
|
+
end
|
28
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-cloudfiles
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 7
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 2
|
7
8
|
- 3
|
8
|
-
-
|
9
|
-
|
10
|
-
- 6
|
11
|
-
version: 2.3.1.1.6
|
9
|
+
- 2
|
10
|
+
version: 2.3.2
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- Jon Yurek
|
@@ -17,44 +16,46 @@ autorequire:
|
|
17
16
|
bindir: bin
|
18
17
|
cert_chain: []
|
19
18
|
|
20
|
-
date: 2010-
|
19
|
+
date: 2010-05-27 00:00:00 -05:00
|
21
20
|
default_executable:
|
22
21
|
dependencies:
|
23
22
|
- !ruby/object:Gem::Dependency
|
24
23
|
name: shoulda
|
25
24
|
prerelease: false
|
26
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
30
31
|
segments:
|
31
32
|
- 0
|
32
33
|
version: "0"
|
33
34
|
type: :development
|
34
35
|
version_requirements: *id001
|
35
36
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
37
|
+
name: mocha
|
37
38
|
prerelease: false
|
38
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
39
41
|
requirements:
|
40
42
|
- - ">="
|
41
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
42
45
|
segments:
|
43
46
|
- 0
|
44
|
-
|
45
|
-
- 5
|
46
|
-
- 0
|
47
|
-
- 1241126838
|
48
|
-
version: 0.9.5.0.1241126838
|
47
|
+
version: "0"
|
49
48
|
type: :development
|
50
49
|
version_requirements: *id002
|
51
50
|
- !ruby/object:Gem::Dependency
|
52
51
|
name: aws-s3
|
53
52
|
prerelease: false
|
54
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
55
|
requirements:
|
56
56
|
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
58
59
|
segments:
|
59
60
|
- 0
|
60
61
|
version: "0"
|
@@ -64,53 +65,59 @@ dependencies:
|
|
64
65
|
name: cloudfiles
|
65
66
|
prerelease: false
|
66
67
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
67
69
|
requirements:
|
68
70
|
- - ">="
|
69
71
|
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
70
73
|
segments:
|
71
|
-
-
|
72
|
-
|
73
|
-
- 4
|
74
|
-
version: 1.4.4
|
74
|
+
- 0
|
75
|
+
version: "0"
|
75
76
|
type: :development
|
76
77
|
version_requirements: *id004
|
77
78
|
- !ruby/object:Gem::Dependency
|
78
79
|
name: sqlite3-ruby
|
79
80
|
prerelease: false
|
80
81
|
requirement: &id005 !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
81
83
|
requirements:
|
82
84
|
- - ">="
|
83
85
|
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
84
87
|
segments:
|
85
88
|
- 0
|
86
89
|
version: "0"
|
87
90
|
type: :development
|
88
91
|
version_requirements: *id005
|
89
92
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
93
|
+
name: active_record
|
91
94
|
prerelease: false
|
92
95
|
requirement: &id006 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
93
97
|
requirements:
|
94
98
|
- - ">="
|
95
99
|
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
96
101
|
segments:
|
97
102
|
- 0
|
98
103
|
version: "0"
|
99
104
|
type: :development
|
100
105
|
version_requirements: *id006
|
101
106
|
- !ruby/object:Gem::Dependency
|
102
|
-
name:
|
107
|
+
name: active_support
|
103
108
|
prerelease: false
|
104
109
|
requirement: &id007 !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
105
111
|
requirements:
|
106
112
|
- - ">="
|
107
113
|
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
108
115
|
segments:
|
109
116
|
- 0
|
110
117
|
version: "0"
|
111
118
|
type: :development
|
112
119
|
version_requirements: *id007
|
113
|
-
description:
|
120
|
+
description: Easy upload management for ActiveRecord with Rackspace Cloud Files support
|
114
121
|
email:
|
115
122
|
- jyurek@thoughtbot.com
|
116
123
|
- minter@lunenburg.org
|
@@ -182,23 +189,27 @@ rdoc_options:
|
|
182
189
|
require_paths:
|
183
190
|
- lib
|
184
191
|
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
+
none: false
|
185
193
|
requirements:
|
186
194
|
- - ">="
|
187
195
|
- !ruby/object:Gem::Version
|
196
|
+
hash: 3
|
188
197
|
segments:
|
189
198
|
- 0
|
190
199
|
version: "0"
|
191
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
192
202
|
requirements:
|
193
203
|
- - ">="
|
194
204
|
- !ruby/object:Gem::Version
|
205
|
+
hash: 3
|
195
206
|
segments:
|
196
207
|
- 0
|
197
208
|
version: "0"
|
198
209
|
requirements:
|
199
210
|
- ImageMagick
|
200
211
|
rubyforge_project: paperclip
|
201
|
-
rubygems_version: 1.3.
|
212
|
+
rubygems_version: 1.3.7
|
202
213
|
signing_key:
|
203
214
|
specification_version: 3
|
204
215
|
summary: File attachments as attributes for ActiveRecord with Rackspace Cloud Files support
|