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.
- checksums.yaml +7 -0
- data/.travis.yml +9 -0
- data/Appraisals +3 -3
- data/Gemfile +3 -8
- data/NEWS +22 -0
- data/README.md +61 -12
- data/gemfiles/3.0.gemfile +2 -2
- data/gemfiles/3.1.gemfile +2 -2
- data/gemfiles/3.2.gemfile +2 -2
- data/gemfiles/4.0.gemfile +2 -2
- data/lib/paperclip.rb +3 -2
- data/lib/paperclip/attachment.rb +13 -2
- data/lib/paperclip/attachment_registry.rb +3 -1
- data/lib/paperclip/content_type_detector.rb +2 -4
- data/lib/paperclip/geometry_detector_factory.rb +8 -3
- data/lib/paperclip/has_attached_file.rb +1 -1
- data/lib/paperclip/interpolations.rb +4 -4
- data/lib/paperclip/io_adapters/abstract_adapter.rb +1 -1
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +1 -1
- data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +1 -1
- data/lib/paperclip/storage/fog.rb +16 -8
- data/lib/paperclip/storage/s3.rb +26 -14
- data/lib/paperclip/tempfile_factory.rb +1 -3
- data/lib/paperclip/validators.rb +3 -1
- data/lib/paperclip/version.rb +1 -1
- data/paperclip.gemspec +0 -4
- data/shoulda_macros/paperclip.rb +14 -3
- data/test/attachment_registry_test.rb +11 -0
- data/test/attachment_test.rb +30 -1
- data/test/content_type_detector_test.rb +1 -0
- data/test/file_command_content_type_detector_test.rb +2 -0
- data/test/generator_test.rb +6 -2
- data/test/has_attached_file_test.rb +3 -3
- data/test/helper.rb +18 -1
- data/test/integration_test.rb +4 -5
- data/test/io_adapters/abstract_adapter_test.rb +1 -1
- data/test/io_adapters/attachment_adapter_test.rb +6 -3
- data/test/io_adapters/data_uri_adapter_test.rb +7 -0
- data/test/io_adapters/empty_string_adapter_test.rb +1 -0
- data/test/io_adapters/file_adapter_test.rb +48 -32
- data/test/storage/fog_test.rb +28 -8
- data/test/storage/s3_test.rb +8 -0
- data/test/tempfile_factory_test.rb +4 -0
- data/test/validators/attachment_content_type_validator_test.rb +1 -0
- data/test/validators_test.rb +29 -0
- 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 =
|
62
|
-
@file = StringIO.new(file_contents
|
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
|
-
@
|
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
|
@@ -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
|
13
|
-
|
14
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
16
|
+
context 'doing normal things' do
|
17
|
+
setup do
|
18
|
+
@subject = Paperclip.io_adapters.for(@file)
|
19
|
+
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
should "get the right filename" do
|
22
|
+
assert_equal "5k.png", @subject.original_filename
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
should "force binmode on tempfile" do
|
26
|
+
assert @subject.instance_variable_get("@tempfile").binmode?
|
27
|
+
end
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
should "get the content type" do
|
30
|
+
assert_equal "image/png", @subject.content_type
|
31
|
+
end
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
should "return content type as a string" do
|
34
|
+
assert_kind_of String, @subject.content_type
|
35
|
+
end
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
-
|
90
|
-
|
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
|
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
|
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
|
data/test/storage/fog_test.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
421
|
+
assert_match(/http:\/\/dynamicfoghost\.com/, @dummy.avatar.expiring_url)
|
402
422
|
end
|
403
423
|
end
|
404
424
|
|
data/test/storage/s3_test.rb
CHANGED
@@ -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
|
data/test/validators_test.rb
CHANGED
@@ -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.
|
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:
|
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
|
-
|
538
|
-
|
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:
|
510
|
+
rubygems_version: 2.0.14
|
564
511
|
signing_key:
|
565
|
-
specification_version:
|
512
|
+
specification_version: 4
|
566
513
|
summary: File attachments as attributes for ActiveRecord
|
567
514
|
test_files:
|
568
515
|
- features/basic_integration.feature
|