paperclip_duplicate_check 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.3@paperclip_dup --create
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source :rubygems
2
+
3
+ gem 'paperclip'
4
+
5
+ group :development do
6
+ # TESTS
7
+ gem 'rspec'
8
+ gem 'sqlite3'
9
+ gem 'rails'
10
+
11
+ # DOCS
12
+ gem 'yard'
13
+ gem 'redcarpet'
14
+
15
+ # DEVELOPMENT
16
+ gem 'bundler'
17
+ gem 'jeweler'
18
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,117 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ actionmailer (3.2.3)
5
+ actionpack (= 3.2.3)
6
+ mail (~> 2.4.4)
7
+ actionpack (3.2.3)
8
+ activemodel (= 3.2.3)
9
+ activesupport (= 3.2.3)
10
+ builder (~> 3.0.0)
11
+ erubis (~> 2.7.0)
12
+ journey (~> 1.0.1)
13
+ rack (~> 1.4.0)
14
+ rack-cache (~> 1.2)
15
+ rack-test (~> 0.6.1)
16
+ sprockets (~> 2.1.2)
17
+ activemodel (3.2.3)
18
+ activesupport (= 3.2.3)
19
+ builder (~> 3.0.0)
20
+ activerecord (3.2.3)
21
+ activemodel (= 3.2.3)
22
+ activesupport (= 3.2.3)
23
+ arel (~> 3.0.2)
24
+ tzinfo (~> 0.3.29)
25
+ activeresource (3.2.3)
26
+ activemodel (= 3.2.3)
27
+ activesupport (= 3.2.3)
28
+ activesupport (3.2.3)
29
+ i18n (~> 0.6)
30
+ multi_json (~> 1.0)
31
+ arel (3.0.2)
32
+ builder (3.0.0)
33
+ cocaine (0.2.1)
34
+ diff-lcs (1.1.3)
35
+ erubis (2.7.0)
36
+ git (1.2.5)
37
+ hike (1.2.1)
38
+ i18n (0.6.0)
39
+ jeweler (1.8.3)
40
+ bundler (~> 1.0)
41
+ git (>= 1.2.5)
42
+ rake
43
+ rdoc
44
+ journey (1.0.3)
45
+ json (1.6.6)
46
+ mail (2.4.4)
47
+ i18n (>= 0.4.0)
48
+ mime-types (~> 1.16)
49
+ treetop (~> 1.4.8)
50
+ mime-types (1.18)
51
+ multi_json (1.3.2)
52
+ paperclip (3.0.2)
53
+ activemodel (>= 3.0.0)
54
+ activerecord (>= 3.0.0)
55
+ activesupport (>= 3.0.0)
56
+ cocaine (>= 0.0.2)
57
+ mime-types
58
+ polyglot (0.3.3)
59
+ rack (1.4.1)
60
+ rack-cache (1.2)
61
+ rack (>= 0.4)
62
+ rack-ssl (1.3.2)
63
+ rack
64
+ rack-test (0.6.1)
65
+ rack (>= 1.0)
66
+ rails (3.2.3)
67
+ actionmailer (= 3.2.3)
68
+ actionpack (= 3.2.3)
69
+ activerecord (= 3.2.3)
70
+ activeresource (= 3.2.3)
71
+ activesupport (= 3.2.3)
72
+ bundler (~> 1.0)
73
+ railties (= 3.2.3)
74
+ railties (3.2.3)
75
+ actionpack (= 3.2.3)
76
+ activesupport (= 3.2.3)
77
+ rack-ssl (~> 1.3.2)
78
+ rake (>= 0.8.7)
79
+ rdoc (~> 3.4)
80
+ thor (~> 0.14.6)
81
+ rake (0.9.2.2)
82
+ rdoc (3.12)
83
+ json (~> 1.4)
84
+ redcarpet (2.1.1)
85
+ rspec (2.9.0)
86
+ rspec-core (~> 2.9.0)
87
+ rspec-expectations (~> 2.9.0)
88
+ rspec-mocks (~> 2.9.0)
89
+ rspec-core (2.9.0)
90
+ rspec-expectations (2.9.1)
91
+ diff-lcs (~> 1.1.3)
92
+ rspec-mocks (2.9.0)
93
+ sprockets (2.1.2)
94
+ hike (~> 1.2)
95
+ rack (~> 1.0)
96
+ tilt (~> 1.1, != 1.3.0)
97
+ sqlite3 (1.3.6)
98
+ thor (0.14.6)
99
+ tilt (1.3.3)
100
+ treetop (1.4.10)
101
+ polyglot
102
+ polyglot (>= 0.3.1)
103
+ tzinfo (0.3.33)
104
+ yard (0.7.5)
105
+
106
+ PLATFORMS
107
+ ruby
108
+
109
+ DEPENDENCIES
110
+ bundler
111
+ jeweler
112
+ paperclip
113
+ rails
114
+ redcarpet
115
+ rspec
116
+ sqlite3
117
+ yard
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Tim Morgan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,27 @@
1
+ Paperclip Duplicate Checker
2
+ ===========================
3
+
4
+ | | |
5
+ |:------------|:--------------------------------|
6
+ | **Author** | Tim Morgan |
7
+ | **Version** | 1.0 (Apr 20, 2012) |
8
+ | **License** | Released under the MIT license. |
9
+
10
+ This class extends Paperclip, adding a feature that forgoes uploading a
11
+ replacement for an existing attachment file if the replacement is identical to
12
+ the existing file.
13
+
14
+ In order for this to work, your model _must_have an `<attachment>_fingerprint`
15
+ column, since MD5 fingerprints are used for comparison. To use, simply follow
16
+ this example:
17
+
18
+ ```` ruby
19
+ class MyModel < ActiveRecord::Base
20
+ include CheckForDuplicateAttachedFile
21
+ has_attachment :note
22
+ check_for_duplicate_attached_file :note
23
+ end
24
+ ````
25
+
26
+ Et voila! You save on bandwidth costs if your code re-uploads a lot of the same
27
+ files.
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "paperclip_duplicate_check"
18
+ gem.homepage = "http://github.com/RISCfuture/paperclip_duplicate_check"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Skips uploading a Paperclip attachment if it's identical to the one already uploaded}
21
+ gem.description = %Q{This gem adds a mixin allowing you to forgo uploading a replacement Paperclip attachment if it's identical to the current attachment.}
22
+ gem.email = "git@timothymorgan.info"
23
+ gem.authors = ["Tim Morgan"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ task default: :spec
35
+
36
+ require 'yard'
37
+ YARD::Rake::YardocTask.new('doc') do |doc|
38
+ doc.options << '-m' << 'markdown' << '-M' << 'redcarpet'
39
+ doc.options << '--protected' << '--no-private'
40
+ doc.options << '-r' << 'README.md'
41
+ doc.options << '-o' << 'doc'
42
+ doc.options << '--title' << 'Paperclip Duplicate Checker Documentation'
43
+
44
+ doc.files = %w( lib/**/* README.md )
45
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,39 @@
1
+ # Adds Paperclip duplicate-checking to your model.
2
+ #
3
+ # @example
4
+ # class MyModel < ActiveRecord::Base
5
+ # include CheckForDuplicateAttachedFile
6
+ # has_attachment :foo
7
+ # check_for_duplicate_attached_file :foo
8
+ # end
9
+
10
+ module CheckForDuplicateAttachedFile
11
+ extend ActiveSupport::Concern
12
+
13
+ # Methods added to the class.
14
+
15
+ module ClassMethods
16
+
17
+ # @overload check_for_duplicate_attached_file(name, ...)
18
+ # Marks one or more attachments as performing duplicate checking.
19
+ # @param [Symbol] name An attachment name.
20
+
21
+ def check_for_duplicate_attached_file(*names)
22
+ names.each do |name|
23
+ define_method :"#{name}_with_dup_check=" do |file|
24
+ attachment = send(name)
25
+ old_fingerprint = attachment.fingerprint
26
+ send :"#{name}_without_dup_check=", file
27
+ if attachment.fingerprint == old_fingerprint then
28
+ # restore to saved state
29
+ attachment.instance_variable_set :@queued_for_delete, []
30
+ attachment.instance_variable_set :@queued_for_write, {}
31
+ attachment.instance_variable_set :@errors, {}
32
+ attachment.instance_variable_set :@dirty, false
33
+ end
34
+ end
35
+ alias_method_chain :"#{name}=", :dup_check
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,74 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "paperclip_duplicate_check"
8
+ s.version = "1.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Tim Morgan"]
12
+ s.date = "2012-04-21"
13
+ s.description = "TODO: longer description of your gem"
14
+ s.email = "tim@squareup.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ ".rvmrc",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.rdoc",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "lib/paperclip_duplicate_check.rb",
30
+ "spec/fixtures/image.jpg",
31
+ "spec/fixtures/image2.png",
32
+ "spec/paperclip_duplicate_check_spec.rb",
33
+ "spec/spec_helper.rb"
34
+ ]
35
+ s.homepage = "http://github.com/RISCfuture/paperclip_duplicate_check"
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = "1.8.23"
39
+ s.summary = "TODO: one-line summary of your gem"
40
+
41
+ if s.respond_to? :specification_version then
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_runtime_dependency(%q<paperclip>, [">= 0"])
46
+ s.add_development_dependency(%q<rspec>, [">= 0"])
47
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
48
+ s.add_development_dependency(%q<rails>, [">= 0"])
49
+ s.add_development_dependency(%q<yard>, [">= 0"])
50
+ s.add_development_dependency(%q<redcarpet>, [">= 0"])
51
+ s.add_development_dependency(%q<bundler>, [">= 0"])
52
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
53
+ else
54
+ s.add_dependency(%q<paperclip>, [">= 0"])
55
+ s.add_dependency(%q<rspec>, [">= 0"])
56
+ s.add_dependency(%q<sqlite3>, [">= 0"])
57
+ s.add_dependency(%q<rails>, [">= 0"])
58
+ s.add_dependency(%q<yard>, [">= 0"])
59
+ s.add_dependency(%q<redcarpet>, [">= 0"])
60
+ s.add_dependency(%q<bundler>, [">= 0"])
61
+ s.add_dependency(%q<jeweler>, [">= 0"])
62
+ end
63
+ else
64
+ s.add_dependency(%q<paperclip>, [">= 0"])
65
+ s.add_dependency(%q<rspec>, [">= 0"])
66
+ s.add_dependency(%q<sqlite3>, [">= 0"])
67
+ s.add_dependency(%q<rails>, [">= 0"])
68
+ s.add_dependency(%q<yard>, [">= 0"])
69
+ s.add_dependency(%q<redcarpet>, [">= 0"])
70
+ s.add_dependency(%q<bundler>, [">= 0"])
71
+ s.add_dependency(%q<jeweler>, [">= 0"])
72
+ end
73
+ end
74
+
Binary file
Binary file
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe CheckForDuplicateAttachedFile do
4
+ describe ".check_for_duplicate_attached_file" do
5
+ it "should save an attachment if it's different from the current attachment" do
6
+ person = Person.create!(photo: Rack::Test::UploadedFile.new("#{Dir.getwd}/spec/fixtures/image.jpg", 'image/jpeg'))
7
+ person.photo = Rack::Test::UploadedFile.new("#{Dir.getwd}/spec/fixtures/image2.png", 'image/png')
8
+ person.photo.should be_dirty
9
+ person.save!
10
+ `md5 #{person.photo.path}`.split(' ').last.should eql(`md5 #{"#{Dir.getwd}/spec/fixtures/image2.png"}`.split(' ').last)
11
+ end
12
+
13
+ it "should not re-save an attachment if it's the same as the current attachment" do
14
+ person = Person.create!(photo: Rack::Test::UploadedFile.new("#{Dir.getwd}/spec/fixtures/image.jpg", 'image/jpeg'))
15
+ person.photo = Rack::Test::UploadedFile.new("#{Dir.getwd}/spec/fixtures/image.jpg", 'image/jpeg')
16
+ person.photo.should_not be_dirty
17
+ person.save!
18
+ p person.photo.path
19
+ `md5 #{person.photo.path}`.split(' ').last.should eql(`md5 #{"#{Dir.getwd}/spec/fixtures/image.jpg"}`.split(' ').last)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,50 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'bundler'
5
+ Bundler.require :development
6
+ Bundler.require
7
+
8
+ require 'active_record'
9
+ require 'paperclip_duplicate_check'
10
+
11
+ Paperclip::Railtie.insert
12
+ ActiveRecord::Base.establish_connection(
13
+ adapter: 'sqlite3',
14
+ database: 'test.sqlite'
15
+ )
16
+
17
+ class Person < ActiveRecord::Base
18
+ include CheckForDuplicateAttachedFile
19
+
20
+ has_attached_file :photo,
21
+ styles: {
22
+ profile: '200x200>',
23
+ logbook: '32x32#',
24
+ stat: '64x64#',
25
+ },
26
+ storage: :filesystem
27
+ check_for_duplicate_attached_file :photo
28
+ end
29
+
30
+ # Requires supporting files with custom matchers and macros, etc,
31
+ # in ./support/ and its subdirectories.
32
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
33
+
34
+ RSpec.configure do |config|
35
+ config.before(:each) do
36
+ Person.connection.execute "DROP TABLE IF EXISTS people"
37
+ Person.connection.execute <<-SQL
38
+ CREATE TABLE people (
39
+ id INTEGER PRIMARY KEY ASC,
40
+ photo_file_name VARCHAR(255),
41
+ photo_content_type VARCHAR(255),
42
+ photo_file_size INTEGER,
43
+ photo_updated_at TIME,
44
+ photo_fingerprint VARCHAR(64)
45
+ )
46
+ SQL
47
+
48
+ Rails.stub!(:root).and_return(Pathname(Dir.getwd))
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paperclip_duplicate_check
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tim Morgan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: paperclip
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rails
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: yard
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: redcarpet
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: bundler
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: jeweler
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: This gem adds a mixin allowing you to forgo uploading a replacement Paperclip
143
+ attachment if it's identical to the current attachment.
144
+ email: git@timothymorgan.info
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files:
148
+ - LICENSE.txt
149
+ - README.md
150
+ files:
151
+ - .document
152
+ - .rspec
153
+ - .rvmrc
154
+ - Gemfile
155
+ - Gemfile.lock
156
+ - LICENSE.txt
157
+ - README.md
158
+ - Rakefile
159
+ - VERSION
160
+ - lib/paperclip_duplicate_check.rb
161
+ - paperclip_duplicate_check.gemspec
162
+ - spec/fixtures/image.jpg
163
+ - spec/fixtures/image2.png
164
+ - spec/paperclip_duplicate_check_spec.rb
165
+ - spec/spec_helper.rb
166
+ homepage: http://github.com/RISCfuture/paperclip_duplicate_check
167
+ licenses:
168
+ - MIT
169
+ post_install_message:
170
+ rdoc_options: []
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ segments:
180
+ - 0
181
+ hash: -2227327769610888350
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ none: false
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ requirements: []
189
+ rubyforge_project:
190
+ rubygems_version: 1.8.23
191
+ signing_key:
192
+ specification_version: 3
193
+ summary: Skips uploading a Paperclip attachment if it's identical to the one already
194
+ uploaded
195
+ test_files: []