paperclip 4.1.1 → 4.2.0
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 +4 -4
- data/.gitignore +0 -6
- data/.travis.yml +4 -13
- data/Appraisals +0 -10
- data/CONTRIBUTING.md +10 -5
- data/Gemfile +8 -4
- data/NEWS +1 -1
- data/README.md +51 -10
- data/Rakefile +6 -8
- data/features/basic_integration.feature +5 -5
- data/features/step_definitions/attachment_steps.rb +4 -4
- data/features/step_definitions/rails_steps.rb +4 -4
- data/features/step_definitions/web_steps.rb +2 -2
- data/features/support/env.rb +2 -2
- data/features/support/fixtures/gemfile.txt +1 -1
- data/features/support/rails.rb +2 -1
- data/gemfiles/3.2.gemfile +5 -3
- data/gemfiles/4.0.gemfile +5 -3
- data/gemfiles/4.1.gemfile +5 -3
- data/lib/generators/paperclip/paperclip_generator.rb +0 -2
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
- data/lib/paperclip.rb +4 -1
- data/lib/paperclip/attachment.rb +90 -29
- data/lib/paperclip/content_type_detector.rb +1 -1
- data/lib/paperclip/geometry_detector_factory.rb +3 -1
- data/lib/paperclip/has_attached_file.rb +2 -1
- data/lib/paperclip/interpolations.rb +8 -0
- 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/stringio_adapter.rb +5 -11
- data/lib/paperclip/locales/de.yml +18 -0
- data/lib/paperclip/locales/es.yml +18 -0
- data/lib/paperclip/matchers/have_attached_file_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
- data/lib/paperclip/media_type_spoof_detector.rb +10 -2
- data/lib/paperclip/storage/filesystem.rb +1 -1
- data/lib/paperclip/storage/s3.rb +26 -4
- data/lib/paperclip/style.rb +1 -1
- data/lib/paperclip/thumbnail.rb +6 -6
- data/lib/paperclip/validators.rb +5 -3
- data/lib/paperclip/validators/attachment_size_validator.rb +7 -3
- data/lib/paperclip/version.rb +1 -1
- data/lib/tasks/paperclip.rake +1 -2
- data/paperclip.gemspec +5 -3
- data/shoulda_macros/paperclip.rb +0 -1
- data/{test → spec}/database.yml +0 -0
- data/spec/paperclip/attachment_definitions_spec.rb +13 -0
- data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +20 -21
- data/{test/attachment_registry_test.rb → spec/paperclip/attachment_registry_spec.rb} +10 -11
- data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +367 -360
- data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +8 -8
- data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +5 -5
- data/spec/paperclip/filename_cleaner_spec.rb +14 -0
- data/spec/paperclip/geometry_detector_spec.rb +39 -0
- data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
- data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +49 -51
- data/{test/has_attached_file_test.rb → spec/paperclip/has_attached_file_spec.rb} +18 -27
- data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +134 -126
- data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +54 -40
- data/{test/io_adapters/abstract_adapter_test.rb → spec/paperclip/io_adapters/abstract_adapter_spec.rb} +21 -10
- data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +27 -29
- data/{test/io_adapters/data_uri_adapter_test.rb → spec/paperclip/io_adapters/data_uri_adapter_spec.rb} +22 -18
- data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
- data/{test/io_adapters/file_adapter_test.rb → spec/paperclip/io_adapters/file_adapter_spec.rb} +32 -28
- data/{test/io_adapters/http_url_proxy_adapter_test.rb → spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb} +22 -22
- data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
- data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
- data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +10 -7
- data/{test/io_adapters/stringio_adapter_test.rb → spec/paperclip/io_adapters/stringio_adapter_spec.rb} +16 -17
- data/{test/io_adapters/uploaded_file_adapter_test.rb → spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb} +41 -41
- data/{test/io_adapters/uri_adapter_test.rb → spec/paperclip/io_adapters/uri_adapter_spec.rb} +22 -22
- data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
- data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +99 -0
- data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
- data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
- data/{test/media_type_spoof_detector_test.rb → spec/paperclip/media_type_spoof_detector_spec.rb} +13 -8
- data/spec/paperclip/meta_class_spec.rb +30 -0
- data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
- data/{test/paperclip_test.rb → spec/paperclip/paperclip_spec.rb} +47 -47
- data/{test/plural_cache_test.rb → spec/paperclip/plural_cache_spec.rb} +6 -6
- data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
- data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
- data/spec/paperclip/schema_spec.rb +206 -0
- data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
- data/{test/storage/fog_test.rb → spec/paperclip/storage/fog_spec.rb} +145 -140
- data/spec/paperclip/storage/s3_live_spec.rb +182 -0
- data/spec/paperclip/storage/s3_spec.rb +1475 -0
- data/spec/paperclip/style_spec.rb +255 -0
- data/spec/paperclip/tempfile_factory_spec.rb +29 -0
- data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +107 -107
- data/{test/url_generator_test.rb → spec/paperclip/url_generator_spec.rb} +55 -56
- data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
- data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
- data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +19 -19
- data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +65 -58
- data/{test/validators/media_type_spoof_detection_validator_test.rb → spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb} +8 -8
- data/spec/paperclip/validators_spec.rb +164 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/assertions.rb +71 -0
- data/spec/support/fake_model.rb +21 -0
- data/spec/support/fake_rails.rb +12 -0
- data/{test → spec/support}/fixtures/12k.png +0 -0
- data/{test → spec/support}/fixtures/50x50.png +0 -0
- data/{test → spec/support}/fixtures/5k.png +0 -0
- data/{test → spec/support}/fixtures/animated +0 -0
- data/{test → spec/support}/fixtures/animated.gif +0 -0
- data/{test → spec/support}/fixtures/animated.unknown +0 -0
- data/{test → spec/support}/fixtures/bad.png +0 -0
- data/{test → spec/support}/fixtures/empty.html +0 -0
- data/{test → spec/support}/fixtures/fog.yml +0 -0
- data/{test → spec/support}/fixtures/rotated.jpg +0 -0
- data/{test → spec/support}/fixtures/s3.yml +0 -0
- data/spec/support/fixtures/spaced file.jpg +0 -0
- data/test/fixtures/spaced file.png b/data/spec/support/fixtures/spaced → file.png +0 -0
- data/{test → spec/support}/fixtures/text.txt +0 -0
- data/{test → spec/support}/fixtures/twopage.pdf +0 -0
- data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
- data/spec/support/matchers/accept.rb +5 -0
- data/spec/support/matchers/exist.rb +5 -0
- data/{test → spec}/support/mock_attachment.rb +0 -0
- data/{test → spec}/support/mock_interpolator.rb +0 -0
- data/{test → spec}/support/mock_model.rb +0 -0
- data/{test → spec}/support/mock_url_generator_builder.rb +0 -0
- data/spec/support/model_reconstruction.rb +60 -0
- data/spec/support/rails_helpers.rb +7 -0
- data/spec/support/test_data.rb +13 -0
- data/spec/support/version_helper.rb +9 -0
- metadata +256 -210
- data/gemfiles/3.0.gemfile +0 -11
- data/gemfiles/3.1.gemfile +0 -11
- data/test/attachment_definitions_test.rb +0 -13
- data/test/filename_cleaner_test.rb +0 -14
- data/test/generator_test.rb +0 -84
- data/test/geometry_detector_test.rb +0 -24
- data/test/helper.rb +0 -239
- data/test/io_adapters/empty_string_adapter_test.rb +0 -18
- data/test/io_adapters/identity_adapter_test.rb +0 -8
- data/test/matchers/have_attached_file_matcher_test.rb +0 -25
- data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -111
- data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -70
- data/test/matchers/validate_attachment_size_matcher_test.rb +0 -87
- data/test/meta_class_test.rb +0 -32
- data/test/paperclip_missing_attachment_styles_test.rb +0 -90
- data/test/schema_test.rb +0 -206
- data/test/storage/s3_live_test.rb +0 -179
- data/test/storage/s3_test.rb +0 -1357
- data/test/style_test.rb +0 -251
- data/test/tempfile_factory_test.rb +0 -29
- data/test/validators/attachment_content_type_validator_test.rb +0 -324
- data/test/validators/attachment_file_name_validator_test.rb +0 -162
- data/test/validators_test.rb +0 -101
data/gemfiles/3.0.gemfile
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "jruby-openssl", :platform=>:jruby
|
6
|
-
gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
|
7
|
-
gem "pry", :platform=>:ruby
|
8
|
-
gem "rails", "~> 3.0.20"
|
9
|
-
gem "paperclip", :path=>"../"
|
10
|
-
|
11
|
-
gemspec :path=>"../"
|
data/gemfiles/3.1.gemfile
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "jruby-openssl", :platform=>:jruby
|
6
|
-
gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
|
7
|
-
gem "pry", :platform=>:ruby
|
8
|
-
gem "rails", "~> 3.1.12"
|
9
|
-
gem "paperclip", :path=>"../"
|
10
|
-
|
11
|
-
gemspec :path=>"../"
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
|
3
|
-
class AttachmentDefinitionsTest < Test::Unit::TestCase
|
4
|
-
should 'return all of the attachments on the class' do
|
5
|
-
reset_class "Dummy"
|
6
|
-
Dummy.has_attached_file :avatar, {:path => "abc"}
|
7
|
-
Dummy.has_attached_file :other_attachment, {:url => "123"}
|
8
|
-
Dummy.do_not_validate_attachment_file_type :avatar
|
9
|
-
expected = {:avatar => {:path => "abc"}, :other_attachment => {:url => "123"}}
|
10
|
-
|
11
|
-
assert_equal expected, Dummy.attachment_definitions
|
12
|
-
end
|
13
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require './test/helper'
|
3
|
-
|
4
|
-
class FilenameCleanerTest < Test::Unit::TestCase
|
5
|
-
should 'convert invalid characters to underscores' do
|
6
|
-
cleaner = Paperclip::FilenameCleaner.new(/[aeiou]/)
|
7
|
-
assert_equal "b_s_b_ll", cleaner.call("baseball")
|
8
|
-
end
|
9
|
-
|
10
|
-
should 'not convert anything if the character regex is nil' do
|
11
|
-
cleaner = Paperclip::FilenameCleaner.new(nil)
|
12
|
-
assert_equal "baseball", cleaner.call("baseball")
|
13
|
-
end
|
14
|
-
end
|
data/test/generator_test.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
require 'rails/generators'
|
3
|
-
require 'generators/paperclip/paperclip_generator'
|
4
|
-
|
5
|
-
class GeneratorTest < Rails::Generators::TestCase
|
6
|
-
tests PaperclipGenerator
|
7
|
-
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
8
|
-
setup :prepare_destination
|
9
|
-
|
10
|
-
context 'running migration' do
|
11
|
-
context 'with single attachment name' do
|
12
|
-
setup do
|
13
|
-
run_generator %w(user avatar)
|
14
|
-
end
|
15
|
-
|
16
|
-
should 'create a correct migration file' do
|
17
|
-
assert_migration 'db/migrate/add_attachment_avatar_to_users.rb' do |migration|
|
18
|
-
assert_match /class AddAttachmentAvatarToUsers/, migration
|
19
|
-
|
20
|
-
assert_class_method :up, migration do |up|
|
21
|
-
expected = <<-migration
|
22
|
-
change_table :users do |t|
|
23
|
-
t.attachment :avatar
|
24
|
-
end
|
25
|
-
migration
|
26
|
-
|
27
|
-
assert_equal expected.squish, up.squish
|
28
|
-
end
|
29
|
-
|
30
|
-
assert_class_method :down, migration do |down|
|
31
|
-
expected = <<-migration
|
32
|
-
drop_attached_file :users, :avatar
|
33
|
-
migration
|
34
|
-
|
35
|
-
assert_equal expected.squish, down.squish
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'with multiple attachment names' do
|
42
|
-
setup do
|
43
|
-
run_generator %w(user avatar photo)
|
44
|
-
end
|
45
|
-
|
46
|
-
should 'create a correct migration file' do
|
47
|
-
assert_migration 'db/migrate/add_attachment_avatar_photo_to_users.rb' do |migration|
|
48
|
-
assert_match /class AddAttachmentAvatarPhotoToUsers/, migration
|
49
|
-
|
50
|
-
assert_class_method :up, migration do |up|
|
51
|
-
expected = <<-migration
|
52
|
-
change_table :users do |t|
|
53
|
-
t.attachment :avatar
|
54
|
-
t.attachment :photo
|
55
|
-
end
|
56
|
-
migration
|
57
|
-
|
58
|
-
assert_equal expected.squish, up.squish
|
59
|
-
end
|
60
|
-
|
61
|
-
assert_class_method :down, migration do |down|
|
62
|
-
expected = <<-migration
|
63
|
-
drop_attached_file :users, :avatar
|
64
|
-
drop_attached_file :users, :photo
|
65
|
-
migration
|
66
|
-
|
67
|
-
assert_equal expected.squish, down.squish
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context 'without required arguments' do
|
74
|
-
should 'not create the migration' do
|
75
|
-
begin
|
76
|
-
silence_stream(STDERR) { run_generator %w() }
|
77
|
-
assert_no_migration 'db/migrate/add_attachment_avatar_to_users.rb'
|
78
|
-
rescue Thor::RequiredArgumentMissingError
|
79
|
-
# This is also OK. It happens in 1.9.2 and Rails 3.2
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
|
3
|
-
class GeometryDetectorTest < Test::Unit::TestCase
|
4
|
-
should 'identify an image and extract its dimensions' do
|
5
|
-
Paperclip::GeometryParser.stubs(:new).with("434x66,").returns(stub(:make => :correct))
|
6
|
-
file = fixture_file("5k.png")
|
7
|
-
factory = Paperclip::GeometryDetector.new(file)
|
8
|
-
|
9
|
-
output = factory.make
|
10
|
-
|
11
|
-
assert_equal :correct, output
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'identify an image and extract its dimensions and orientation' do
|
15
|
-
Paperclip::GeometryParser.stubs(:new).with("300x200,6").returns(stub(:make => :correct))
|
16
|
-
file = fixture_file("rotated.jpg")
|
17
|
-
factory = Paperclip::GeometryDetector.new(file)
|
18
|
-
|
19
|
-
output = factory.make
|
20
|
-
|
21
|
-
assert_equal :correct, output
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
data/test/helper.rb
DELETED
@@ -1,239 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'tempfile'
|
3
|
-
require 'pathname'
|
4
|
-
require 'test/unit'
|
5
|
-
require 'active_record'
|
6
|
-
require 'active_record/version'
|
7
|
-
require 'active_support'
|
8
|
-
require 'active_support/core_ext'
|
9
|
-
require 'shoulda'
|
10
|
-
require 'mocha/setup'
|
11
|
-
require 'bourne'
|
12
|
-
require 'shoulda/context'
|
13
|
-
require 'mime/types'
|
14
|
-
require 'pathname'
|
15
|
-
require 'ostruct'
|
16
|
-
|
17
|
-
begin
|
18
|
-
require 'pry'
|
19
|
-
rescue LoadError
|
20
|
-
# Pry is not available, just ignore.
|
21
|
-
end
|
22
|
-
|
23
|
-
puts "Testing against version #{ActiveRecord::VERSION::STRING}"
|
24
|
-
|
25
|
-
`ruby -e 'exit 0'` # Prime $? with a value.
|
26
|
-
|
27
|
-
begin
|
28
|
-
require 'ruby-debug'
|
29
|
-
rescue LoadError
|
30
|
-
puts "debugger disabled"
|
31
|
-
end
|
32
|
-
|
33
|
-
ROOT = Pathname(File.expand_path(File.join(File.dirname(__FILE__), '..')))
|
34
|
-
|
35
|
-
$previous_count = 0
|
36
|
-
class Test::Unit::TestCase
|
37
|
-
def setup
|
38
|
-
silence_warnings do
|
39
|
-
Object.const_set(:Rails, stub('Rails'))
|
40
|
-
Rails.stubs(:root).returns(Pathname.new(ROOT).join('tmp'))
|
41
|
-
Rails.stubs(:env).returns('test')
|
42
|
-
Rails.stubs(:const_defined?).with(:Railtie).returns(false)
|
43
|
-
ActiveSupport::Deprecation.silenced = true
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def teardown
|
48
|
-
end
|
49
|
-
|
50
|
-
def report_files
|
51
|
-
files = []
|
52
|
-
ObjectSpace.each_object(IO){|io| files << io unless io.closed? }
|
53
|
-
if files.count > $previous_count
|
54
|
-
puts __name__
|
55
|
-
puts "#{files.count} files"
|
56
|
-
files.each do |file|
|
57
|
-
puts "Open IO: #{file.inspect}"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
$previous_count = files.count
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
$LOAD_PATH << File.join(ROOT, 'lib')
|
65
|
-
$LOAD_PATH << File.join(ROOT, 'lib', 'paperclip')
|
66
|
-
|
67
|
-
require File.join(ROOT, 'lib', 'paperclip.rb')
|
68
|
-
|
69
|
-
require './shoulda_macros/paperclip'
|
70
|
-
|
71
|
-
FIXTURES_DIR = File.join(File.dirname(__FILE__), "fixtures")
|
72
|
-
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
73
|
-
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
74
|
-
ActiveRecord::Base.establish_connection(config['test'])
|
75
|
-
Paperclip.options[:logger] = ActiveRecord::Base.logger
|
76
|
-
|
77
|
-
def using_protected_attributes?
|
78
|
-
ActiveRecord::VERSION::MAJOR < 4
|
79
|
-
end
|
80
|
-
|
81
|
-
def require_everything_in_directory(directory_name)
|
82
|
-
Dir[File.join(File.dirname(__FILE__), directory_name, '*')].each do |f|
|
83
|
-
require f
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
require_everything_in_directory('support')
|
88
|
-
|
89
|
-
def reset_class class_name
|
90
|
-
ActiveRecord::Base.send(:include, Paperclip::Glue)
|
91
|
-
Object.send(:remove_const, class_name) rescue nil
|
92
|
-
klass = Object.const_set(class_name, Class.new(ActiveRecord::Base))
|
93
|
-
|
94
|
-
klass.class_eval do
|
95
|
-
include Paperclip::Glue
|
96
|
-
end
|
97
|
-
|
98
|
-
klass.reset_column_information
|
99
|
-
klass.connection_pool.clear_table_cache!(klass.table_name) if klass.connection_pool.respond_to?(:clear_table_cache!)
|
100
|
-
klass.connection.schema_cache.clear_table_cache!(klass.table_name) if klass.connection.respond_to?(:schema_cache)
|
101
|
-
klass
|
102
|
-
end
|
103
|
-
|
104
|
-
def reset_table table_name, &block
|
105
|
-
block ||= lambda { |table| true }
|
106
|
-
ActiveRecord::Base.connection.create_table :dummies, {:force => true}, &block
|
107
|
-
end
|
108
|
-
|
109
|
-
def modify_table table_name, &block
|
110
|
-
ActiveRecord::Base.connection.change_table :dummies, &block
|
111
|
-
end
|
112
|
-
|
113
|
-
def rebuild_model options = {}
|
114
|
-
ActiveRecord::Base.connection.create_table :dummies, :force => true do |table|
|
115
|
-
table.column :title, :string
|
116
|
-
table.column :other, :string
|
117
|
-
table.column :avatar_file_name, :string
|
118
|
-
table.column :avatar_content_type, :string
|
119
|
-
table.column :avatar_file_size, :integer
|
120
|
-
table.column :avatar_updated_at, :datetime
|
121
|
-
table.column :avatar_fingerprint, :string
|
122
|
-
end
|
123
|
-
rebuild_class options
|
124
|
-
end
|
125
|
-
|
126
|
-
def rebuild_class options = {}
|
127
|
-
reset_class("Dummy").tap do |klass|
|
128
|
-
klass.has_attached_file :avatar, options
|
129
|
-
klass.do_not_validate_attachment_file_type :avatar
|
130
|
-
Paperclip.reset_duplicate_clash_check!
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def rebuild_meta_class_of obj, options = {}
|
135
|
-
(class << obj; self; end).tap do |metaklass|
|
136
|
-
metaklass.has_attached_file :avatar, options
|
137
|
-
metaklass.do_not_validate_attachment_file_type :avatar
|
138
|
-
Paperclip.reset_duplicate_clash_check!
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
class FakeModel
|
143
|
-
attr_accessor :avatar_file_name,
|
144
|
-
:avatar_file_size,
|
145
|
-
:avatar_updated_at,
|
146
|
-
:avatar_content_type,
|
147
|
-
:avatar_fingerprint,
|
148
|
-
:id
|
149
|
-
|
150
|
-
def errors
|
151
|
-
@errors ||= []
|
152
|
-
end
|
153
|
-
|
154
|
-
def run_paperclip_callbacks name, *args
|
155
|
-
end
|
156
|
-
|
157
|
-
def valid?
|
158
|
-
errors.empty?
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
def attachment(options={})
|
163
|
-
Paperclip::Attachment.new(:avatar, FakeModel.new, options)
|
164
|
-
end
|
165
|
-
|
166
|
-
def silence_warnings
|
167
|
-
old_verbose, $VERBOSE = $VERBOSE, nil
|
168
|
-
yield
|
169
|
-
ensure
|
170
|
-
$VERBOSE = old_verbose
|
171
|
-
end
|
172
|
-
|
173
|
-
def should_accept_dummy_class
|
174
|
-
should "accept the class" do
|
175
|
-
assert_accepts @matcher, Dummy
|
176
|
-
end
|
177
|
-
|
178
|
-
should "accept an instance of that class" do
|
179
|
-
assert_accepts @matcher, Dummy.new
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def should_reject_dummy_class
|
184
|
-
should "reject the class" do
|
185
|
-
assert_rejects @matcher, Dummy
|
186
|
-
end
|
187
|
-
|
188
|
-
should "reject an instance of that class" do
|
189
|
-
assert_rejects @matcher, Dummy.new
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
def with_exitstatus_returning(code)
|
194
|
-
saved_exitstatus = $?.nil? ? 0 : $?.exitstatus
|
195
|
-
begin
|
196
|
-
`ruby -e 'exit #{code.to_i}'`
|
197
|
-
yield
|
198
|
-
ensure
|
199
|
-
`ruby -e 'exit #{saved_exitstatus.to_i}'`
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
def stringy_file
|
204
|
-
StringIO.new('.\n')
|
205
|
-
end
|
206
|
-
|
207
|
-
def fixture_file(filename)
|
208
|
-
File.join(File.dirname(__FILE__), 'fixtures', filename)
|
209
|
-
end
|
210
|
-
|
211
|
-
def assert_success_response(url)
|
212
|
-
Net::HTTP.get_response(URI.parse(url)) do |response|
|
213
|
-
assert_equal "200", response.code,
|
214
|
-
"Expected HTTP response code 200, got #{response.code}"
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
def assert_not_found_response(url)
|
219
|
-
Net::HTTP.get_response(URI.parse(url)) do |response|
|
220
|
-
assert_equal "404", response.code,
|
221
|
-
"Expected HTTP response code 404, got #{response.code}"
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
def assert_file_exists(path)
|
226
|
-
assert File.exists?(path), %(Expect "#{path}" to be exists.)
|
227
|
-
end
|
228
|
-
|
229
|
-
def assert_file_not_exists(path)
|
230
|
-
assert !File.exists?(path), %(Expect "#{path}" to not exists.)
|
231
|
-
end
|
232
|
-
|
233
|
-
def assert_frame_dimensions(range, frames)
|
234
|
-
frames.each_with_index do |frame, frame_index|
|
235
|
-
frame.split('x').each_with_index do |dimension, dimension_index |
|
236
|
-
assert range.include?(dimension.to_i), "Frame #{frame_index}[#{dimension_index}] should have been within #{range.inspect}, but was #{dimension}"
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
|
3
|
-
class EmptyStringAdapterTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
context 'a new instance' do
|
6
|
-
setup do
|
7
|
-
@subject = Paperclip.io_adapters.for('')
|
8
|
-
end
|
9
|
-
|
10
|
-
should "return false for a call to nil?" do
|
11
|
-
assert !@subject.nil?
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'return false for a call to assignment?' do
|
15
|
-
assert !@subject.assignment?
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
|
3
|
-
class HaveAttachedFileMatcherTest < Test::Unit::TestCase
|
4
|
-
context "have_attached_file" do
|
5
|
-
setup do
|
6
|
-
reset_class "Dummy"
|
7
|
-
reset_table "dummies"
|
8
|
-
@matcher = self.class.have_attached_file(:avatar)
|
9
|
-
end
|
10
|
-
|
11
|
-
context "given a class with no attachment" do
|
12
|
-
should_reject_dummy_class
|
13
|
-
end
|
14
|
-
|
15
|
-
context "given a class with an attachment" do
|
16
|
-
setup do
|
17
|
-
modify_table("dummies"){|d| d.string :avatar_file_name }
|
18
|
-
Dummy.has_attached_file :avatar
|
19
|
-
Dummy.do_not_validate_attachment_file_type :avatar
|
20
|
-
end
|
21
|
-
|
22
|
-
should_accept_dummy_class
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|