dm-paperclip 2.1.2.1 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/{README.textile → README.rdoc} +9 -7
- data/Rakefile +5 -5
- data/lib/dm-paperclip.rb +36 -20
- data/lib/dm-paperclip/attachment.rb +81 -23
- data/lib/dm-paperclip/geometry.rb +1 -1
- data/lib/dm-paperclip/iostream.rb +1 -1
- data/lib/dm-paperclip/storage.rb +82 -7
- data/lib/dm-paperclip/thumbnail.rb +16 -8
- data/lib/dm-paperclip/upfile.rb +8 -5
- data/lib/dm-paperclip/validations.rb +5 -5
- data/test/attachment_test.rb +363 -0
- data/test/{test_geometry.rb → geometry_test.rb} +0 -0
- data/test/helper.rb +10 -18
- data/test/{test_integration.rb → integration_test.rb} +73 -11
- data/test/{test_iostream.rb → iostream_test.rb} +0 -0
- data/test/{test_paperclip.rb → paperclip_test.rb} +60 -16
- data/test/{test_storage.rb → storage_test.rb} +38 -1
- data/test/{test_thumbnail.rb → thumbnail_test.rb} +39 -1
- metadata +15 -21
- data/test/test_attachment.rb +0 -225
File without changes
|
data/test/helper.rb
CHANGED
@@ -4,7 +4,7 @@ require 'shoulda'
|
|
4
4
|
require 'mocha'
|
5
5
|
require 'tempfile'
|
6
6
|
|
7
|
-
require '
|
7
|
+
require 'dm-core'
|
8
8
|
require 'dm-validations'
|
9
9
|
require 'dm-migrations'
|
10
10
|
begin
|
@@ -15,6 +15,7 @@ end
|
|
15
15
|
|
16
16
|
ROOT = File.join(File.dirname(__FILE__), '..')
|
17
17
|
RAILS_ROOT = ROOT
|
18
|
+
RAILS_ENV = ENV['RAILS_ENV']
|
18
19
|
|
19
20
|
Object.const_set("Merb", Class.new())
|
20
21
|
Merb.class_eval do
|
@@ -42,23 +43,6 @@ unless defined?(Mash)
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def rebuild_model options = {}
|
45
|
-
DataMapper::Migration.new( 1, :drop_dummies_table ) do
|
46
|
-
up do
|
47
|
-
create_table :dummies do
|
48
|
-
column :id, "integer", true
|
49
|
-
column :other, "varchar(255)"
|
50
|
-
column :avatar_file_name, "varchar(255)"
|
51
|
-
column :avatar_content_type, "varchar(255)"
|
52
|
-
column :avatar_file_size, "integer"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
down do
|
56
|
-
drop_table :dummies
|
57
|
-
end
|
58
|
-
perform_down
|
59
|
-
perform_up
|
60
|
-
end
|
61
|
-
|
62
46
|
Object.send(:remove_const, "Dummy") rescue nil
|
63
47
|
Object.const_set("Dummy", Class.new())
|
64
48
|
Dummy.class_eval do
|
@@ -69,4 +53,12 @@ def rebuild_model options = {}
|
|
69
53
|
property :other, String
|
70
54
|
has_attached_file :avatar, options
|
71
55
|
end
|
56
|
+
Dummy.auto_migrate!
|
72
57
|
end
|
58
|
+
|
59
|
+
def temporary_env(new_env)
|
60
|
+
old_env = defined?(RAILS_ENV) ? RAILS_ENV : nil
|
61
|
+
Object.const_set("RAILS_ENV", new_env)
|
62
|
+
yield
|
63
|
+
Object.const_set("RAILS_ENV", old_env)
|
64
|
+
end
|
@@ -39,7 +39,7 @@ class IntegrationTest < Test::Unit::TestCase
|
|
39
39
|
Dummy.class_eval do
|
40
40
|
has_attached_file :avatar, :styles => { :thumb => "150x25#" }
|
41
41
|
end
|
42
|
-
@d2 = Dummy
|
42
|
+
@d2 = Dummy.get(@dummy.id)
|
43
43
|
@d2.avatar.reprocess!
|
44
44
|
@d2.save
|
45
45
|
end
|
@@ -92,6 +92,38 @@ class IntegrationTest < Test::Unit::TestCase
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
+
context "A model with no thumbnail_convert_options setting" do
|
96
|
+
setup do
|
97
|
+
rebuild_model :styles => { :large => "300x300>",
|
98
|
+
:medium => "100x100",
|
99
|
+
:thumb => ["32x32#", :gif] },
|
100
|
+
:default_style => :medium,
|
101
|
+
:url => "/:attachment/:class/:style/:id/:basename.:extension",
|
102
|
+
:path => ":merb_root/tmp/:attachment/:class/:style/:id/:basename.:extension"
|
103
|
+
@dummy = Dummy.new
|
104
|
+
end
|
105
|
+
|
106
|
+
should "have its definition return nil when asked about convert_options" do
|
107
|
+
assert ! Dummy.attachment_definitions[:avatar][:thumbnail_convert_options]
|
108
|
+
end
|
109
|
+
|
110
|
+
context "redefined to have convert_options setting" do
|
111
|
+
setup do
|
112
|
+
rebuild_model :styles => { :large => "300x300>",
|
113
|
+
:medium => "100x100",
|
114
|
+
:thumb => ["32x32#", :gif] },
|
115
|
+
:thumbnail_convert_options => "-strip -depth 8",
|
116
|
+
:default_style => :medium,
|
117
|
+
:url => "/:attachment/:class/:style/:id/:basename.:extension",
|
118
|
+
:path => ":merb_root/tmp/:attachment/:class/:style/:id/:basename.:extension"
|
119
|
+
end
|
120
|
+
|
121
|
+
should "have its definition return convert_options value when asked about convert_options" do
|
122
|
+
assert_equal "-strip -depth 8", Dummy.attachment_definitions[:avatar][:thumbnail_convert_options]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
95
127
|
context "A model with a filesystem attachment" do
|
96
128
|
setup do
|
97
129
|
rebuild_model :styles => { :large => "300x300>",
|
@@ -122,7 +154,7 @@ class IntegrationTest < Test::Unit::TestCase
|
|
122
154
|
|
123
155
|
saved_paths = [:thumb, :medium, :large, :original].collect{|s| @dummy.avatar.to_file(s).path }
|
124
156
|
|
125
|
-
@d2 = Dummy
|
157
|
+
@d2 = Dummy.get(@dummy.id)
|
126
158
|
assert_equal "100x15", `identify -format "%wx%h" #{@d2.avatar.to_file.path}`.chomp
|
127
159
|
assert_equal "434x66", `identify -format "%wx%h" #{@d2.avatar.to_file(:original).path}`.chomp
|
128
160
|
assert_equal "300x46", `identify -format "%wx%h" #{@d2.avatar.to_file(:large).path}`.chomp
|
@@ -148,12 +180,12 @@ class IntegrationTest < Test::Unit::TestCase
|
|
148
180
|
assert ! File.exists?(p)
|
149
181
|
end
|
150
182
|
|
151
|
-
@d2 = Dummy
|
183
|
+
@d2 = Dummy.get(@dummy.id)
|
152
184
|
assert_nil @d2.avatar_file_name
|
153
185
|
end
|
154
186
|
|
155
187
|
should "work exactly the same when new as when reloaded" do
|
156
|
-
@d2 = Dummy
|
188
|
+
@d2 = Dummy.get(@dummy.id)
|
157
189
|
|
158
190
|
assert_equal @dummy.avatar_file_name, @d2.avatar_file_name
|
159
191
|
[:thumb, :medium, :large, :original].each do |style|
|
@@ -184,7 +216,7 @@ class IntegrationTest < Test::Unit::TestCase
|
|
184
216
|
|
185
217
|
should "know the difference between good files, bad files, not files, and nil when validating" do
|
186
218
|
Dummy.validates_attachment_presence :avatar
|
187
|
-
@d2 = Dummy
|
219
|
+
@d2 = Dummy.get(@dummy.id)
|
188
220
|
@d2.avatar = @file
|
189
221
|
assert @d2.valid?
|
190
222
|
@d2.avatar = @bad_file
|
@@ -195,12 +227,42 @@ class IntegrationTest < Test::Unit::TestCase
|
|
195
227
|
|
196
228
|
should "be able to reload without saving an not have the file disappear" do
|
197
229
|
@dummy.avatar = @file
|
198
|
-
|
230
|
+
@dummy.save
|
199
231
|
@dummy.avatar = nil
|
200
232
|
assert_nil @dummy.avatar_file_name
|
201
233
|
@dummy.reload
|
202
234
|
assert_equal "5k.png", @dummy.avatar_file_name
|
203
235
|
end
|
236
|
+
|
237
|
+
context "that is assigned its file from another Paperclip attachment" do
|
238
|
+
setup do
|
239
|
+
@dummy2 = Dummy.new
|
240
|
+
@file2 = File.new(File.join(FIXTURES_DIR, "12k.png"))
|
241
|
+
assert @dummy2.avatar = @file2
|
242
|
+
@dummy2.save
|
243
|
+
end
|
244
|
+
|
245
|
+
should "work when assigned a file" do
|
246
|
+
assert_not_equal `identify -format "%wx%h" #{@dummy.avatar.to_file(:original).path}`,
|
247
|
+
`identify -format "%wx%h" #{@dummy2.avatar.to_file(:original).path}`
|
248
|
+
|
249
|
+
assert @dummy.avatar = @dummy2.avatar
|
250
|
+
@dummy.save
|
251
|
+
assert_equal `identify -format "%wx%h" #{@dummy.avatar.to_file(:original).path}`,
|
252
|
+
`identify -format "%wx%h" #{@dummy2.avatar.to_file(:original).path}`
|
253
|
+
end
|
254
|
+
|
255
|
+
should "work when assigned a nil file" do
|
256
|
+
@dummy2.avatar = nil
|
257
|
+
@dummy2.save
|
258
|
+
|
259
|
+
@dummy.avatar = @dummy2.avatar
|
260
|
+
@dummy.save
|
261
|
+
|
262
|
+
assert !@dummy.avatar?
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
204
266
|
end
|
205
267
|
|
206
268
|
if ENV['S3_TEST_BUCKET']
|
@@ -247,7 +309,7 @@ class IntegrationTest < Test::Unit::TestCase
|
|
247
309
|
assert_equal geo, `#{cmd}`.chomp, cmd
|
248
310
|
end
|
249
311
|
|
250
|
-
@d2 = Dummy
|
312
|
+
@d2 = Dummy.get(@dummy.id)
|
251
313
|
@d2_files = s3_files_for @d2.avatar
|
252
314
|
[["434x66", :original],
|
253
315
|
["300x46", :large],
|
@@ -277,12 +339,12 @@ class IntegrationTest < Test::Unit::TestCase
|
|
277
339
|
assert ! key.exists?
|
278
340
|
end
|
279
341
|
|
280
|
-
@d2 = Dummy
|
342
|
+
@d2 = Dummy.get(@dummy.id)
|
281
343
|
assert_nil @d2.avatar_file_name
|
282
344
|
end
|
283
345
|
|
284
346
|
should "work exactly the same when new as when reloaded" do
|
285
|
-
@d2 = Dummy
|
347
|
+
@d2 = Dummy.get(@dummy.id)
|
286
348
|
|
287
349
|
assert_equal @dummy.avatar_file_name, @d2.avatar_file_name
|
288
350
|
[:thumb, :medium, :large, :original].each do |style|
|
@@ -311,7 +373,7 @@ class IntegrationTest < Test::Unit::TestCase
|
|
311
373
|
assert @dummy.valid?
|
312
374
|
|
313
375
|
Dummy.validates_attachment_presence :avatar
|
314
|
-
@d2 = Dummy
|
376
|
+
@d2 = Dummy.get(@dummy.id)
|
315
377
|
@d2.avatar = @file
|
316
378
|
assert @d2.valid?
|
317
379
|
@d2.avatar = @bad_file
|
@@ -320,7 +382,7 @@ class IntegrationTest < Test::Unit::TestCase
|
|
320
382
|
assert ! @d2.valid?
|
321
383
|
end
|
322
384
|
|
323
|
-
should "be able to reload without saving
|
385
|
+
should "be able to reload without saving and not have the file disappear" do
|
324
386
|
@dummy.avatar = @file
|
325
387
|
assert @dummy.save
|
326
388
|
@dummy.avatar = nil
|
File without changes
|
@@ -1,12 +1,39 @@
|
|
1
1
|
require 'test/helper.rb'
|
2
2
|
|
3
3
|
class PaperclipTest < Test::Unit::TestCase
|
4
|
-
context "
|
4
|
+
context "A DataMapper model with an 'avatar' attachment" do
|
5
5
|
setup do
|
6
6
|
rebuild_model :path => "tmp/:class/omg/:style.:extension"
|
7
7
|
@file = File.new(File.join(FIXTURES_DIR, "5k.png"))
|
8
8
|
end
|
9
9
|
|
10
|
+
should "not error when trying to also create a 'blah' attachment" do
|
11
|
+
assert_nothing_raised do
|
12
|
+
Dummy.class_eval do
|
13
|
+
has_attached_file :blah
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
should "handle multiple classes using attachments" do
|
19
|
+
Object.const_set("DummyTwo", Class.new())
|
20
|
+
DummyTwo.class_eval do
|
21
|
+
include DataMapper::Resource
|
22
|
+
include DataMapper::Validate
|
23
|
+
include Paperclip::Resource
|
24
|
+
property :id, Integer, :serial => true
|
25
|
+
property :other, String
|
26
|
+
has_attached_file :file
|
27
|
+
end
|
28
|
+
|
29
|
+
assert_equal [:file], DummyTwo.attachment_definitions.keys
|
30
|
+
assert_equal [:avatar], Dummy.attachment_definitions.keys
|
31
|
+
|
32
|
+
Object.send(:remove_const, "DummyTwo") rescue nil
|
33
|
+
|
34
|
+
assert_equal [:avatar], Dummy.attachment_definitions.keys
|
35
|
+
end
|
36
|
+
|
10
37
|
context "that is write protected" do
|
11
38
|
setup do
|
12
39
|
Dummy.class_eval do
|
@@ -60,6 +87,38 @@ class PaperclipTest < Test::Unit::TestCase
|
|
60
87
|
assert Dummy.new.respond_to?(:avatar=)
|
61
88
|
end
|
62
89
|
|
90
|
+
context "that is valid" do
|
91
|
+
setup do
|
92
|
+
@dummy = Dummy.new
|
93
|
+
@dummy.avatar = @file
|
94
|
+
end
|
95
|
+
|
96
|
+
should "be valid" do
|
97
|
+
assert @dummy.valid?
|
98
|
+
end
|
99
|
+
|
100
|
+
context "then has a validation added that makes it invalid" do
|
101
|
+
setup do
|
102
|
+
assert @dummy.save
|
103
|
+
Dummy.class_eval do
|
104
|
+
validates_attachment_content_type :avatar, :content_type => ["text/plain"]
|
105
|
+
end
|
106
|
+
@dummy2 = Dummy.get(@dummy.id)
|
107
|
+
end
|
108
|
+
|
109
|
+
should "be invalid when reloaded" do
|
110
|
+
assert ! @dummy2.valid?, @dummy2.errors.inspect
|
111
|
+
end
|
112
|
+
|
113
|
+
should "be able to call #valid? twice without having duplicate errors" do
|
114
|
+
@dummy2.avatar.valid?
|
115
|
+
first_errors = @dummy2.avatar.errors
|
116
|
+
@dummy2.avatar.valid?
|
117
|
+
assert_equal first_errors, @dummy2.avatar.errors
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
63
122
|
[[:presence, nil, "5k.png", nil],
|
64
123
|
[:size, {:in => 1..10240}, "5k.png", "12k.png"],
|
65
124
|
[:size2, {:in => 1..10240}, nil, "12k.png"],
|
@@ -98,21 +157,6 @@ class PaperclipTest < Test::Unit::TestCase
|
|
98
157
|
assert_equal 1, @dummy.errors.length
|
99
158
|
end
|
100
159
|
end
|
101
|
-
|
102
|
-
# context "and an invalid file with :message" do
|
103
|
-
# setup do
|
104
|
-
# @file = args[3] && File.new(File.join(FIXTURES_DIR, args[3]))
|
105
|
-
# end
|
106
|
-
#
|
107
|
-
# should "have errors" do
|
108
|
-
# if args[1] && args[1][:message] && args[4]
|
109
|
-
# @dummy.avatar = @file
|
110
|
-
# assert ! @dummy.valid?
|
111
|
-
# assert_equal 1, @dummy.errors.length
|
112
|
-
# assert_equal args[4], @dummy.errors[0]
|
113
|
-
# end
|
114
|
-
# end
|
115
|
-
# end
|
116
160
|
end
|
117
161
|
end
|
118
162
|
end
|
@@ -42,6 +42,25 @@ class StorageTest < Test::Unit::TestCase
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
context "Parsing S3 credentials with a bucket in them" do
|
46
|
+
setup do
|
47
|
+
rebuild_model :storage => :s3,
|
48
|
+
:s3_credentials => {
|
49
|
+
:production => { :bucket => "prod_bucket" },
|
50
|
+
:development => { :bucket => "dev_bucket" }
|
51
|
+
}
|
52
|
+
@dummy = Dummy.new
|
53
|
+
end
|
54
|
+
|
55
|
+
should "get the right bucket in production", :before => lambda{ ENV.expects(:[]).returns('production') } do
|
56
|
+
assert_equal "prod_bucket", @dummy.avatar.bucket_name
|
57
|
+
end
|
58
|
+
|
59
|
+
should "get the right bucket in development", :before => lambda{ ENV.expects(:[]).returns('development') } do
|
60
|
+
assert_equal "dev_bucket", @dummy.avatar.bucket_name
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
45
64
|
context "An attachment with S3 storage" do
|
46
65
|
setup do
|
47
66
|
rebuild_model :storage => :s3,
|
@@ -71,7 +90,7 @@ class StorageTest < Test::Unit::TestCase
|
|
71
90
|
should "not get a bucket to get a URL" do
|
72
91
|
@dummy.avatar.expects(:s3).never
|
73
92
|
@dummy.avatar.expects(:s3_bucket).never
|
74
|
-
|
93
|
+
assert_match %r{^http://s3\.amazonaws\.com/testing/avatars/original/5k\.png}, @dummy.avatar.url
|
75
94
|
end
|
76
95
|
|
77
96
|
context "and saved" do
|
@@ -84,6 +103,7 @@ class StorageTest < Test::Unit::TestCase
|
|
84
103
|
@bucket_mock.expects(:key).returns(@key_mock)
|
85
104
|
@key_mock.expects(:data=)
|
86
105
|
@key_mock.expects(:put)
|
106
|
+
@dummy.id = 1
|
87
107
|
@dummy.save
|
88
108
|
end
|
89
109
|
|
@@ -91,6 +111,23 @@ class StorageTest < Test::Unit::TestCase
|
|
91
111
|
assert true
|
92
112
|
end
|
93
113
|
end
|
114
|
+
|
115
|
+
context "and remove" do
|
116
|
+
setup do
|
117
|
+
@s3_mock = stub
|
118
|
+
@bucket_mock = stub
|
119
|
+
RightAws::S3.expects(:new).with("12345", "54321", {}).returns(@s3_mock)
|
120
|
+
@s3_mock.expects(:bucket).with("testing", true, "public-read").returns(@bucket_mock)
|
121
|
+
@key_mock = stub
|
122
|
+
@bucket_mock.expects(:key).at_least(2).returns(@key_mock)
|
123
|
+
@key_mock.expects(:delete)
|
124
|
+
@dummy.destroy_attached_files
|
125
|
+
end
|
126
|
+
|
127
|
+
should "succeed" do
|
128
|
+
assert true
|
129
|
+
end
|
130
|
+
end
|
94
131
|
end
|
95
132
|
end
|
96
133
|
|
@@ -90,10 +90,36 @@ class ThumbnailTest < Test::Unit::TestCase
|
|
90
90
|
should "have whiny_thumbnails turned on by default" do
|
91
91
|
assert @thumb.whiny_thumbnails
|
92
92
|
end
|
93
|
+
|
94
|
+
should "have convert_options set to nil by default" do
|
95
|
+
assert_equal nil, @thumb.convert_options
|
96
|
+
end
|
97
|
+
|
98
|
+
should "send the right command to convert when sent #make" do
|
99
|
+
@thumb.expects(:system).with do |arg|
|
100
|
+
arg.match %r{convert\s+"#{File.expand_path(@thumb.file.path)}\[0\]"\s+-resize\s+\"x50\"\s+-crop\s+\"100x50\+114\+0\"\s+\+repage\s+".*?"}
|
101
|
+
end
|
102
|
+
@thumb.make
|
103
|
+
end
|
104
|
+
|
105
|
+
should "create the thumbnail when sent #make" do
|
106
|
+
dst = @thumb.make
|
107
|
+
assert_match /100x50/, `identify #{dst.path}`
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "being thumbnailed with convert options set" do
|
112
|
+
setup do
|
113
|
+
@thumb = Paperclip::Thumbnail.new(@file, "100x50#", format=nil, convert_options="-strip -depth 8", whiny_thumbnails=true)
|
114
|
+
end
|
115
|
+
|
116
|
+
should "have convert_options value set" do
|
117
|
+
assert_equal "-strip -depth 8", @thumb.convert_options
|
118
|
+
end
|
93
119
|
|
94
120
|
should "send the right command to convert when sent #make" do
|
95
121
|
@thumb.expects(:system).with do |arg|
|
96
|
-
arg.match %r{convert\s+"#{File.expand_path(@thumb.file.path)}"\s+-
|
122
|
+
arg.match %r{convert\s+"#{File.expand_path(@thumb.file.path)}\[0\]"\s+-resize\s+"x50"\s+-crop\s+"100x50\+114\+0"\s+\+repage\s+-strip\s+-depth\s+8\s+".*?"}
|
97
123
|
end
|
98
124
|
@thumb.make
|
99
125
|
end
|
@@ -102,6 +128,18 @@ class ThumbnailTest < Test::Unit::TestCase
|
|
102
128
|
dst = @thumb.make
|
103
129
|
assert_match /100x50/, `identify #{dst.path}`
|
104
130
|
end
|
131
|
+
|
132
|
+
context "redefined to have bad convert_options setting" do
|
133
|
+
setup do
|
134
|
+
@thumb = Paperclip::Thumbnail.new(@file, "100x50#", format=nil, convert_options="-this-aint-no-option", whiny_thumbnails=true)
|
135
|
+
end
|
136
|
+
|
137
|
+
should "error when trying to create the thumbnail" do
|
138
|
+
assert_raises(Paperclip::PaperclipError) do
|
139
|
+
@thumb.make
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
105
143
|
end
|
106
144
|
end
|
107
145
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-paperclip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken Robertson
|
@@ -9,20 +9,20 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-11-29 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description:
|
17
|
-
email: ken@invalidlogic.com
|
17
|
+
email: ken@invalidlogic.com
|
18
18
|
executables: []
|
19
19
|
|
20
20
|
extensions: []
|
21
21
|
|
22
22
|
extra_rdoc_files:
|
23
|
-
- README.
|
23
|
+
- README.rdoc
|
24
24
|
files:
|
25
|
-
- README.
|
25
|
+
- README.rdoc
|
26
26
|
- LICENSE
|
27
27
|
- Rakefile
|
28
28
|
- init.rb
|
@@ -36,20 +36,20 @@ files:
|
|
36
36
|
- lib/dm-paperclip/validations.rb
|
37
37
|
- lib/dm-paperclip.rb
|
38
38
|
- tasks/paperclip_tasks.rake
|
39
|
+
- test/attachment_test.rb
|
39
40
|
- test/fixtures
|
40
41
|
- test/fixtures/12k.png
|
41
42
|
- test/fixtures/50x50.png
|
42
43
|
- test/fixtures/5k.png
|
43
44
|
- test/fixtures/bad.png
|
44
45
|
- test/fixtures/text.txt
|
46
|
+
- test/geometry_test.rb
|
45
47
|
- test/helper.rb
|
46
|
-
- test/
|
47
|
-
- test/
|
48
|
-
- test/
|
49
|
-
- test/
|
50
|
-
- test/
|
51
|
-
- test/test_storage.rb
|
52
|
-
- test/test_thumbnail.rb
|
48
|
+
- test/integration_test.rb
|
49
|
+
- test/iostream_test.rb
|
50
|
+
- test/paperclip_test.rb
|
51
|
+
- test/storage_test.rb
|
52
|
+
- test/thumbnail_test.rb
|
53
53
|
has_rdoc: true
|
54
54
|
homepage: http://invalidlogic.com/dm-paperclip/
|
55
55
|
post_install_message:
|
@@ -74,15 +74,9 @@ requirements:
|
|
74
74
|
- ImageMagick
|
75
75
|
- data_mapper
|
76
76
|
rubyforge_project: dm-paperclip
|
77
|
-
rubygems_version: 1.
|
77
|
+
rubygems_version: 1.3.1
|
78
78
|
signing_key:
|
79
79
|
specification_version: 2
|
80
80
|
summary: File attachments as attributes for DataMapper, based on the original Paperclip by Jon Yurek at Thoughtbot
|
81
|
-
test_files:
|
82
|
-
|
83
|
-
- test/test_geometry.rb
|
84
|
-
- test/test_integration.rb
|
85
|
-
- test/test_iostream.rb
|
86
|
-
- test/test_paperclip.rb
|
87
|
-
- test/test_storage.rb
|
88
|
-
- test/test_thumbnail.rb
|
81
|
+
test_files: []
|
82
|
+
|