paperclip 3.5.2 → 3.5.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of paperclip might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +9 -0
  3. data/Appraisals +3 -3
  4. data/Gemfile +3 -8
  5. data/NEWS +22 -0
  6. data/README.md +61 -12
  7. data/gemfiles/3.0.gemfile +2 -2
  8. data/gemfiles/3.1.gemfile +2 -2
  9. data/gemfiles/3.2.gemfile +2 -2
  10. data/gemfiles/4.0.gemfile +2 -2
  11. data/lib/paperclip.rb +3 -2
  12. data/lib/paperclip/attachment.rb +13 -2
  13. data/lib/paperclip/attachment_registry.rb +3 -1
  14. data/lib/paperclip/content_type_detector.rb +2 -4
  15. data/lib/paperclip/geometry_detector_factory.rb +8 -3
  16. data/lib/paperclip/has_attached_file.rb +1 -1
  17. data/lib/paperclip/interpolations.rb +4 -4
  18. data/lib/paperclip/io_adapters/abstract_adapter.rb +1 -1
  19. data/lib/paperclip/io_adapters/data_uri_adapter.rb +1 -1
  20. data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +1 -1
  21. data/lib/paperclip/storage/fog.rb +16 -8
  22. data/lib/paperclip/storage/s3.rb +26 -14
  23. data/lib/paperclip/tempfile_factory.rb +1 -3
  24. data/lib/paperclip/validators.rb +3 -1
  25. data/lib/paperclip/version.rb +1 -1
  26. data/paperclip.gemspec +0 -4
  27. data/shoulda_macros/paperclip.rb +14 -3
  28. data/test/attachment_registry_test.rb +11 -0
  29. data/test/attachment_test.rb +30 -1
  30. data/test/content_type_detector_test.rb +1 -0
  31. data/test/file_command_content_type_detector_test.rb +2 -0
  32. data/test/generator_test.rb +6 -2
  33. data/test/has_attached_file_test.rb +3 -3
  34. data/test/helper.rb +18 -1
  35. data/test/integration_test.rb +4 -5
  36. data/test/io_adapters/abstract_adapter_test.rb +1 -1
  37. data/test/io_adapters/attachment_adapter_test.rb +6 -3
  38. data/test/io_adapters/data_uri_adapter_test.rb +7 -0
  39. data/test/io_adapters/empty_string_adapter_test.rb +1 -0
  40. data/test/io_adapters/file_adapter_test.rb +48 -32
  41. data/test/storage/fog_test.rb +28 -8
  42. data/test/storage/s3_test.rb +8 -0
  43. data/test/tempfile_factory_test.rb +4 -0
  44. data/test/validators/attachment_content_type_validator_test.rb +1 -0
  45. data/test/validators_test.rb +29 -0
  46. metadata +42 -95
@@ -32,7 +32,7 @@ class AbstractAdapterTest < Test::Unit::TestCase
32
32
  @adapter.tempfile = stub("Tempfile")
33
33
  end
34
34
 
35
- [:close, :closed?, :eof?, :path, :rewind, :unlink].each do |method|
35
+ [:binmode, :binmode?, :close, :close!, :closed?, :eof?, :path, :rewind, :unlink].each do |method|
36
36
  should "delegate #{method} to @tempfile" do
37
37
  @adapter.tempfile.stubs(method)
38
38
  @adapter.public_send(method)
@@ -1,4 +1,5 @@
1
1
  require './test/helper'
2
+ require 'pp'
2
3
 
3
4
  class AttachmentAdapterTest < Test::Unit::TestCase
4
5
 
@@ -19,6 +20,7 @@ class AttachmentAdapterTest < Test::Unit::TestCase
19
20
 
20
21
  teardown do
21
22
  @file.close
23
+ @subject.close
22
24
  end
23
25
 
24
26
  should "get the right filename" do
@@ -58,8 +60,8 @@ class AttachmentAdapterTest < Test::Unit::TestCase
58
60
 
59
61
  context "for a file with restricted characters in the name" do
60
62
  setup do
61
- file_contents = File.new(fixture_file("animated.gif"))
62
- @file = StringIO.new(file_contents.read)
63
+ file_contents = IO.read(fixture_file("animated.gif"))
64
+ @file = StringIO.new(file_contents)
63
65
  @file.stubs(:original_filename).returns('image:restricted.gif')
64
66
  @file.binmode
65
67
 
@@ -69,7 +71,7 @@ class AttachmentAdapterTest < Test::Unit::TestCase
69
71
  end
70
72
 
71
73
  teardown do
72
- @file.close
74
+ @subject.close
73
75
  end
74
76
 
75
77
  should "not generate paths that include restricted characters" do
@@ -98,6 +100,7 @@ class AttachmentAdapterTest < Test::Unit::TestCase
98
100
  teardown do
99
101
  @file.close
100
102
  @thumb.close
103
+ @subject.close
101
104
  end
102
105
 
103
106
  should "get the original filename" do
@@ -1,6 +1,13 @@
1
1
  require './test/helper'
2
2
 
3
3
  class DataUriAdapterTest < Test::Unit::TestCase
4
+
5
+ def teardown
6
+ if @subject
7
+ @subject.close
8
+ end
9
+ end
10
+
4
11
  context "a new instance" do
5
12
  setup do
6
13
  @contents = "data:image/png;base64,#{original_base64_content}"
@@ -1,6 +1,7 @@
1
1
  require './test/helper'
2
2
 
3
3
  class EmptyStringAdapterTest < Test::Unit::TestCase
4
+
4
5
  context 'a new instance' do
5
6
  setup do
6
7
  @subject = Paperclip.io_adapters.for('')
@@ -6,49 +6,58 @@ class FileAdapterTest < Test::Unit::TestCase
6
6
  setup do
7
7
  @file = File.new(fixture_file("5k.png"))
8
8
  @file.binmode
9
- @subject = Paperclip.io_adapters.for(@file)
10
9
  end
11
10
 
12
- teardown { @file.close }
13
-
14
- should "get the right filename" do
15
- assert_equal "5k.png", @subject.original_filename
11
+ teardown do
12
+ @file.close
13
+ @subject.close if @subject
16
14
  end
17
15
 
18
- should "force binmode on tempfile" do
19
- assert @subject.instance_variable_get("@tempfile").binmode?
20
- end
16
+ context 'doing normal things' do
17
+ setup do
18
+ @subject = Paperclip.io_adapters.for(@file)
19
+ end
21
20
 
22
- should "get the content type" do
23
- assert_equal "image/png", @subject.content_type
24
- end
21
+ should "get the right filename" do
22
+ assert_equal "5k.png", @subject.original_filename
23
+ end
25
24
 
26
- should "return content type as a string" do
27
- assert_kind_of String, @subject.content_type
28
- end
25
+ should "force binmode on tempfile" do
26
+ assert @subject.instance_variable_get("@tempfile").binmode?
27
+ end
29
28
 
30
- should "get the file's size" do
31
- assert_equal 4456, @subject.size
32
- end
29
+ should "get the content type" do
30
+ assert_equal "image/png", @subject.content_type
31
+ end
33
32
 
34
- should "return false for a call to nil?" do
35
- assert ! @subject.nil?
36
- end
33
+ should "return content type as a string" do
34
+ assert_kind_of String, @subject.content_type
35
+ end
37
36
 
38
- should "generate a MD5 hash of the contents" do
39
- expected = Digest::MD5.file(@file.path).to_s
40
- assert_equal expected, @subject.fingerprint
41
- end
37
+ should "get the file's size" do
38
+ assert_equal 4456, @subject.size
39
+ end
40
+
41
+ should "return false for a call to nil?" do
42
+ assert ! @subject.nil?
43
+ end
42
44
 
43
- should "read the contents of the file" do
44
- expected = @file.read
45
- assert expected.length > 0
46
- assert_equal expected, @subject.read
45
+ should "generate a MD5 hash of the contents" do
46
+ expected = Digest::MD5.file(@file.path).to_s
47
+ assert_equal expected, @subject.fingerprint
48
+ end
49
+
50
+ should "read the contents of the file" do
51
+ expected = @file.read
52
+ assert expected.length > 0
53
+ assert_equal expected, @subject.read
54
+ end
47
55
  end
48
56
 
49
57
  context "file with multiple possible content type" do
50
58
  setup do
51
59
  MIME::Types.stubs(:type_for).returns([MIME::Type.new('image/x-png'), MIME::Type.new('image/png')])
60
+ @subject = Paperclip.io_adapters.for(@file)
52
61
  end
53
62
 
54
63
  should "prefer officially registered mime type" do
@@ -86,13 +95,17 @@ class FileAdapterTest < Test::Unit::TestCase
86
95
 
87
96
  context "filename with restricted characters" do
88
97
  setup do
89
- file_contents = File.new(fixture_file("animated.gif"))
90
- @file = StringIO.new(file_contents.read)
98
+ @file = File.open(fixture_file("animated.gif")) do |file|
99
+ StringIO.new(file.read)
100
+ end
91
101
  @file.stubs(:original_filename).returns('image:restricted.gif')
92
102
  @subject = Paperclip.io_adapters.for(@file)
93
103
  end
94
104
 
95
- teardown { @file.close }
105
+ teardown do
106
+ @file.close
107
+ @subject.close
108
+ end
96
109
 
97
110
  should "not generate filenames that include restricted characters" do
98
111
  assert_equal 'image_restricted.gif', @subject.original_filename
@@ -109,7 +122,10 @@ class FileAdapterTest < Test::Unit::TestCase
109
122
  @subject = Paperclip.io_adapters.for(@file)
110
123
  end
111
124
 
112
- teardown { @file.close }
125
+ teardown do
126
+ @file.close
127
+ @subject.close
128
+ end
113
129
 
114
130
  should "provide correct mime-type" do
115
131
  assert_match %r{.*/x-empty}, @subject.content_type
@@ -309,11 +309,31 @@ class FogTest < Test::Unit::TestCase
309
309
 
310
310
  context "with a valid bucket name for a subdomain" do
311
311
  should "provide an url in subdomain style" do
312
- assert_match /^https:\/\/papercliptests.s3.amazonaws.com\/avatars\/5k.png/, @dummy.avatar.url
312
+ assert_match(/^https:\/\/papercliptests.s3.amazonaws.com\/avatars\/5k.png/, @dummy.avatar.url)
313
313
  end
314
314
 
315
315
  should "provide an url that expires in subdomain style" do
316
- assert_match /^http:\/\/papercliptests.s3.amazonaws.com\/avatars\/5k.png\?AWSAccessKeyId=.+$/, @dummy.avatar.expiring_url
316
+ assert_match(/^http:\/\/papercliptests.s3.amazonaws.com\/avatars\/5k.png\?AWSAccessKeyId=.+$/, @dummy.avatar.expiring_url)
317
+ end
318
+ end
319
+
320
+ context "generating an expiring url" do
321
+ should "generate the same url when using Times and Integer offsets" do
322
+ rebuild_model(@options)
323
+ dummy = Dummy.new
324
+ dummy.avatar = StringIO.new('.')
325
+
326
+ assert_equal dummy.avatar.expiring_url(1234), dummy.avatar.expiring_url(Time.now + 1234)
327
+ end
328
+
329
+ should 'match the default url if there is no assignment' do
330
+ dummy = Dummy.new
331
+ assert_equal dummy.avatar.url, dummy.avatar.expiring_url
332
+ end
333
+
334
+ should 'match the default url when given a style if there is no assignment' do
335
+ dummy = Dummy.new
336
+ assert_equal dummy.avatar.url(:thumb), dummy.avatar.expiring_url(3600, :thumb)
317
337
  end
318
338
  end
319
339
 
@@ -333,11 +353,11 @@ class FogTest < Test::Unit::TestCase
333
353
  end
334
354
 
335
355
  should "provide an url in folder style" do
336
- assert_match /^https:\/\/s3.amazonaws.com\/this_is_invalid\/avatars\/5k.png\?\d*$/, @dummy.avatar.url
356
+ assert_match(/^https:\/\/s3.amazonaws.com\/this_is_invalid\/avatars\/5k.png\?\d*$/, @dummy.avatar.url)
337
357
  end
338
358
 
339
359
  should "provide a url that expires in folder style" do
340
- assert_match /^http:\/\/s3.amazonaws.com\/this_is_invalid\/avatars\/5k.png\?AWSAccessKeyId=.+$/, @dummy.avatar.expiring_url
360
+ assert_match(/^http:\/\/s3.amazonaws.com\/this_is_invalid\/avatars\/5k.png\?AWSAccessKeyId=.+$/, @dummy.avatar.expiring_url)
341
361
  end
342
362
 
343
363
  end
@@ -368,7 +388,7 @@ class FogTest < Test::Unit::TestCase
368
388
  end
369
389
 
370
390
  should "provide a public url" do
371
- assert_match /http:\/\/dynamicfoghost\.com/, @dummy.avatar.url
391
+ assert_match(/http:\/\/dynamicfoghost\.com/, @dummy.avatar.url)
372
392
  end
373
393
 
374
394
  end
@@ -382,11 +402,11 @@ class FogTest < Test::Unit::TestCase
382
402
  end
383
403
 
384
404
  should "provide a public url" do
385
- assert_match /http:\/\/dynamicfoghost\.com/, @dummy.avatar.url
405
+ assert_match(/http:\/\/dynamicfoghost\.com/, @dummy.avatar.url)
386
406
  end
387
407
 
388
408
  should "provide an expiring url" do
389
- assert_match /http:\/\/dynamicfoghost\.com/, @dummy.avatar.expiring_url
409
+ assert_match(/http:\/\/dynamicfoghost\.com/, @dummy.avatar.expiring_url)
390
410
  end
391
411
 
392
412
  context "with an invalid bucket name for a subdomain" do
@@ -398,7 +418,7 @@ class FogTest < Test::Unit::TestCase
398
418
  end
399
419
 
400
420
  should "provide an expiring url" do
401
- assert_match /http:\/\/dynamicfoghost\.com/, @dummy.avatar.expiring_url
421
+ assert_match(/http:\/\/dynamicfoghost\.com/, @dummy.avatar.expiring_url)
402
422
  end
403
423
  end
404
424
 
@@ -548,6 +548,14 @@ class S3Test < Test::Unit::TestCase
548
548
  should "return the default URL" do
549
549
  assert_equal(@dummy.avatar.url, @dummy.avatar.expiring_url)
550
550
  end
551
+
552
+ should 'generate a url for a style when a file does not exist' do
553
+ assert_equal(@dummy.avatar.url(:thumb), @dummy.avatar.expiring_url(3600, :thumb))
554
+ end
555
+ end
556
+
557
+ should "generate the same url when using Times and Integer offsets" do
558
+ assert_equal @dummy.avatar.expiring_url(1234), @dummy.avatar.expiring_url(Time.now + 1234)
551
559
  end
552
560
  end
553
561
 
@@ -10,4 +10,8 @@ class Paperclip::TempfileFactoryTest < Test::Unit::TestCase
10
10
  should "be able to generate a tempfile with the right name with a tilde at the end" do
11
11
  file = subject.generate("omg.png~")
12
12
  end
13
+ should "be able to generate a tempfile from a file with a really long name" do
14
+ filename = "#{"longfilename" * 100}.txt"
15
+ file = subject.generate(filename)
16
+ end
13
17
  end
@@ -4,6 +4,7 @@ class AttachmentContentTypeValidatorTest < Test::Unit::TestCase
4
4
  def setup
5
5
  rebuild_model
6
6
  @dummy = Dummy.new
7
+ super
7
8
  end
8
9
 
9
10
  def build_validator(options)
@@ -29,4 +29,33 @@ class ValidatorsTest < Test::Unit::TestCase
29
29
  assert_raise(RuntimeError){ dummy.valid? }
30
30
  end
31
31
  end
32
+
33
+ context "using the helper with a conditional" do
34
+ setup do
35
+ Dummy.validates_attachment :avatar, :presence => true,
36
+ :content_type => { :content_type => "image/jpeg" },
37
+ :size => { :in => 0..10.kilobytes },
38
+ :if => :title_present?
39
+ end
40
+
41
+ should "validate the attachment if title is present" do
42
+ Dummy.class_eval do
43
+ def title_present?
44
+ true
45
+ end
46
+ end
47
+ dummy = Dummy.new(:avatar => File.new(fixture_file("12k.png")))
48
+ assert_equal [:avatar_content_type, :avatar, :avatar_file_size], dummy.errors.keys
49
+ end
50
+
51
+ should "not validate attachment if tile is not present" do
52
+ Dummy.class_eval do
53
+ def title_present?
54
+ false
55
+ end
56
+ end
57
+ dummy = Dummy.new(:avatar => File.new(fixture_file("12k.png")))
58
+ assert_equal [], dummy.errors.keys
59
+ end
60
+ end
32
61
  end
metadata CHANGED
@@ -1,52 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paperclip
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.2
5
- prerelease:
4
+ version: 3.5.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jon Yurek
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-22 00:00:00.000000000 Z
11
+ date: 2014-01-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activemodel
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 3.0.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 3.0.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activesupport
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 3.0.0
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: 3.0.0
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: cocaine
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,119 +55,104 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: mime-types
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: activerecord
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: 3.0.0
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: 3.0.0
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: shoulda
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: appraisal
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: mocha
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - '>='
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - '>='
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: aws-sdk
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - '>='
148
130
  - !ruby/object:Gem::Version
149
131
  version: 1.5.7
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - '>='
156
137
  - !ruby/object:Gem::Version
157
138
  version: 1.5.7
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: bourne
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - ! '>='
143
+ - - '>='
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - ! '>='
150
+ - - '>='
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: sqlite3
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
157
  - - ~>
180
158
  - !ruby/object:Gem::Version
@@ -182,7 +160,6 @@ dependencies:
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
164
  - - ~>
188
165
  - !ruby/object:Gem::Version
@@ -190,7 +167,6 @@ dependencies:
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: cucumber
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
171
  - - ~>
196
172
  - !ruby/object:Gem::Version
@@ -198,7 +174,6 @@ dependencies:
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
178
  - - ~>
204
179
  - !ruby/object:Gem::Version
@@ -206,39 +181,34 @@ dependencies:
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: aruba
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
- - - ! '>='
185
+ - - '>='
212
186
  - !ruby/object:Gem::Version
213
187
  version: '0'
214
188
  type: :development
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
- - - ! '>='
192
+ - - '>='
220
193
  - !ruby/object:Gem::Version
221
194
  version: '0'
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: nokogiri
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
- - - ! '>='
199
+ - - '>='
228
200
  - !ruby/object:Gem::Version
229
201
  version: '0'
230
202
  type: :development
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
- - - ! '>='
206
+ - - '>='
236
207
  - !ruby/object:Gem::Version
237
208
  version: '0'
238
209
  - !ruby/object:Gem::Dependency
239
210
  name: capybara
240
211
  requirement: !ruby/object:Gem::Requirement
241
- none: false
242
212
  requirements:
243
213
  - - '='
244
214
  - !ruby/object:Gem::Version
@@ -246,7 +216,6 @@ dependencies:
246
216
  type: :development
247
217
  prerelease: false
248
218
  version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
219
  requirements:
251
220
  - - '='
252
221
  - !ruby/object:Gem::Version
@@ -254,23 +223,20 @@ dependencies:
254
223
  - !ruby/object:Gem::Dependency
255
224
  name: bundler
256
225
  requirement: !ruby/object:Gem::Requirement
257
- none: false
258
226
  requirements:
259
- - - ! '>='
227
+ - - '>='
260
228
  - !ruby/object:Gem::Version
261
229
  version: '0'
262
230
  type: :development
263
231
  prerelease: false
264
232
  version_requirements: !ruby/object:Gem::Requirement
265
- none: false
266
233
  requirements:
267
- - - ! '>='
234
+ - - '>='
268
235
  - !ruby/object:Gem::Version
269
236
  version: '0'
270
237
  - !ruby/object:Gem::Dependency
271
238
  name: fog
272
239
  requirement: !ruby/object:Gem::Requirement
273
- none: false
274
240
  requirements:
275
241
  - - ~>
276
242
  - !ruby/object:Gem::Version
@@ -278,7 +244,6 @@ dependencies:
278
244
  type: :development
279
245
  prerelease: false
280
246
  version_requirements: !ruby/object:Gem::Requirement
281
- none: false
282
247
  requirements:
283
248
  - - ~>
284
249
  - !ruby/object:Gem::Version
@@ -286,81 +251,71 @@ dependencies:
286
251
  - !ruby/object:Gem::Dependency
287
252
  name: launchy
288
253
  requirement: !ruby/object:Gem::Requirement
289
- none: false
290
254
  requirements:
291
- - - ! '>='
255
+ - - '>='
292
256
  - !ruby/object:Gem::Version
293
257
  version: '0'
294
258
  type: :development
295
259
  prerelease: false
296
260
  version_requirements: !ruby/object:Gem::Requirement
297
- none: false
298
261
  requirements:
299
- - - ! '>='
262
+ - - '>='
300
263
  - !ruby/object:Gem::Version
301
264
  version: '0'
302
265
  - !ruby/object:Gem::Dependency
303
266
  name: rake
304
267
  requirement: !ruby/object:Gem::Requirement
305
- none: false
306
268
  requirements:
307
- - - ! '>='
269
+ - - '>='
308
270
  - !ruby/object:Gem::Version
309
271
  version: '0'
310
272
  type: :development
311
273
  prerelease: false
312
274
  version_requirements: !ruby/object:Gem::Requirement
313
- none: false
314
275
  requirements:
315
- - - ! '>='
276
+ - - '>='
316
277
  - !ruby/object:Gem::Version
317
278
  version: '0'
318
279
  - !ruby/object:Gem::Dependency
319
280
  name: fakeweb
320
281
  requirement: !ruby/object:Gem::Requirement
321
- none: false
322
282
  requirements:
323
- - - ! '>='
283
+ - - '>='
324
284
  - !ruby/object:Gem::Version
325
285
  version: '0'
326
286
  type: :development
327
287
  prerelease: false
328
288
  version_requirements: !ruby/object:Gem::Requirement
329
- none: false
330
289
  requirements:
331
- - - ! '>='
290
+ - - '>='
332
291
  - !ruby/object:Gem::Version
333
292
  version: '0'
334
293
  - !ruby/object:Gem::Dependency
335
294
  name: railties
336
295
  requirement: !ruby/object:Gem::Requirement
337
- none: false
338
296
  requirements:
339
- - - ! '>='
297
+ - - '>='
340
298
  - !ruby/object:Gem::Version
341
299
  version: '0'
342
300
  type: :development
343
301
  prerelease: false
344
302
  version_requirements: !ruby/object:Gem::Requirement
345
- none: false
346
303
  requirements:
347
- - - ! '>='
304
+ - - '>='
348
305
  - !ruby/object:Gem::Version
349
306
  version: '0'
350
307
  - !ruby/object:Gem::Dependency
351
308
  name: actionmailer
352
309
  requirement: !ruby/object:Gem::Requirement
353
- none: false
354
310
  requirements:
355
- - - ! '>='
311
+ - - '>='
356
312
  - !ruby/object:Gem::Version
357
313
  version: 3.0.0
358
314
  type: :development
359
315
  prerelease: false
360
316
  version_requirements: !ruby/object:Gem::Requirement
361
- none: false
362
317
  requirements:
363
- - - ! '>='
318
+ - - '>='
364
319
  - !ruby/object:Gem::Version
365
320
  version: 3.0.0
366
321
  description: Easy upload management for ActiveRecord
@@ -534,35 +489,27 @@ files:
534
489
  homepage: https://github.com/thoughtbot/paperclip
535
490
  licenses:
536
491
  - MIT
537
- post_install_message: ! "##################################################\n# NOTE
538
- FOR UPGRADING FROM PRE-3.0 VERSION #\n##################################################\n\nPaperclip
539
- 3.0 introduces a non-backward compatible change in your attachment\npath. This will
540
- help to prevent attachment name clashes when you have\nmultiple attachments with
541
- the same name. If you didn't alter your\nattachment's path and are using Paperclip's
542
- default, you'll have to add\n`:path` and `:url` to your `has_attached_file` definition.
543
- For example:\n\n has_attached_file :avatar,\n :path => \":rails_root/public/system/:attachment/:id/:style/:filename\",\n
544
- \ :url => \"/system/:attachment/:id/:style/:filename\"\n\n"
492
+ metadata: {}
493
+ post_install_message:
545
494
  rdoc_options: []
546
495
  require_paths:
547
496
  - lib
548
497
  required_ruby_version: !ruby/object:Gem::Requirement
549
- none: false
550
498
  requirements:
551
- - - ! '>='
499
+ - - '>='
552
500
  - !ruby/object:Gem::Version
553
501
  version: 1.9.2
554
502
  required_rubygems_version: !ruby/object:Gem::Requirement
555
- none: false
556
503
  requirements:
557
- - - ! '>='
504
+ - - '>='
558
505
  - !ruby/object:Gem::Version
559
506
  version: '0'
560
507
  requirements:
561
508
  - ImageMagick
562
509
  rubyforge_project: paperclip
563
- rubygems_version: 1.8.23
510
+ rubygems_version: 2.0.14
564
511
  signing_key:
565
- specification_version: 3
512
+ specification_version: 4
566
513
  summary: File attachments as attributes for ActiveRecord
567
514
  test_files:
568
515
  - features/basic_integration.feature