artmotion-attachment_fu 0.0.1
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/CHANGELOG +35 -0
- data/README +186 -0
- data/Rakefile +22 -0
- data/amazon_s3.yml.tpl +14 -0
- data/init.rb +16 -0
- data/install.rb +5 -0
- data/lib/gem_init.rb +2 -0
- data/lib/geometry.rb +93 -0
- data/lib/technoweenie/attachment_fu/backends/db_file_backend.rb +39 -0
- data/lib/technoweenie/attachment_fu/backends/file_system_backend.rb +101 -0
- data/lib/technoweenie/attachment_fu/backends/s3_backend.rb +303 -0
- data/lib/technoweenie/attachment_fu/processors/core_image_processor.rb +59 -0
- data/lib/technoweenie/attachment_fu/processors/gd2_processor.rb +54 -0
- data/lib/technoweenie/attachment_fu/processors/image_science_processor.rb +61 -0
- data/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb +59 -0
- data/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb +54 -0
- data/lib/technoweenie/attachment_fu.rb +473 -0
- data/test/backends/db_file_test.rb +16 -0
- data/test/backends/file_system_test.rb +80 -0
- data/test/backends/remote/s3_test.rb +107 -0
- data/test/base_attachment_tests.rb +77 -0
- data/test/basic_test.rb +70 -0
- data/test/database.yml +18 -0
- data/test/extra_attachment_test.rb +67 -0
- data/test/fixtures/attachment.rb +148 -0
- data/test/fixtures/files/fake/rails.png +0 -0
- data/test/fixtures/files/foo.txt +1 -0
- data/test/fixtures/files/rails.png +0 -0
- data/test/geometry_test.rb +101 -0
- data/test/processors/core_image_test.rb +37 -0
- data/test/processors/gd2_test.rb +31 -0
- data/test/processors/image_science_test.rb +31 -0
- data/test/processors/mini_magick_test.rb +31 -0
- data/test/processors/rmagick_test.rb +255 -0
- data/test/schema.rb +108 -0
- data/test/test_helper.rb +150 -0
- data/test/validation_test.rb +55 -0
- data/vendor/red_artisan/core_image/filters/color.rb +27 -0
- data/vendor/red_artisan/core_image/filters/effects.rb +31 -0
- data/vendor/red_artisan/core_image/filters/perspective.rb +25 -0
- data/vendor/red_artisan/core_image/filters/quality.rb +25 -0
- data/vendor/red_artisan/core_image/filters/scale.rb +47 -0
- data/vendor/red_artisan/core_image/filters/watermark.rb +32 -0
- data/vendor/red_artisan/core_image/processor.rb +123 -0
- metadata +109 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
module BaseAttachmentTests
|
2
|
+
def test_should_create_file_from_uploaded_file
|
3
|
+
assert_created do
|
4
|
+
attachment = upload_file :filename => '/files/foo.txt'
|
5
|
+
assert_valid attachment
|
6
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
7
|
+
assert attachment.image?
|
8
|
+
assert !attachment.size.zero?
|
9
|
+
#assert_equal 3, attachment.size
|
10
|
+
assert_nil attachment.width
|
11
|
+
assert_nil attachment.height
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_create_file_from_merb_temp_file
|
16
|
+
assert_created do
|
17
|
+
attachment = upload_merb_file :filename => '/files/foo.txt'
|
18
|
+
assert_valid attachment
|
19
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
20
|
+
assert attachment.image?
|
21
|
+
assert !attachment.size.zero?
|
22
|
+
#assert_equal 3, attachment.size
|
23
|
+
assert_nil attachment.width
|
24
|
+
assert_nil attachment.height
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_reassign_attribute_data
|
29
|
+
assert_created 1 do
|
30
|
+
attachment = upload_file :filename => '/files/rails.png'
|
31
|
+
assert_valid attachment
|
32
|
+
assert attachment.size > 0, "no data was set"
|
33
|
+
|
34
|
+
attachment.temp_data = 'wtf'
|
35
|
+
assert attachment.save_attachment?
|
36
|
+
attachment.save!
|
37
|
+
|
38
|
+
assert_equal 'wtf', attachment_model.find(attachment.id).send(:current_data)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_no_reassign_attribute_data_on_nil
|
43
|
+
assert_created 1 do
|
44
|
+
attachment = upload_file :filename => '/files/rails.png'
|
45
|
+
assert_valid attachment
|
46
|
+
assert attachment.size > 0, "no data was set"
|
47
|
+
|
48
|
+
attachment.temp_data = nil
|
49
|
+
assert !attachment.save_attachment?
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_overwrite_old_contents_when_updating
|
54
|
+
attachment = upload_file :filename => '/files/rails.png'
|
55
|
+
assert_not_created do # no new db_file records
|
56
|
+
use_temp_file 'files/rails.png' do |file|
|
57
|
+
attachment.filename = 'rails2.png'
|
58
|
+
attachment.temp_path = File.join(fixture_path, file)
|
59
|
+
attachment.save!
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_save_without_updating_file
|
65
|
+
attachment = upload_file :filename => '/files/foo.txt'
|
66
|
+
assert_valid attachment
|
67
|
+
assert !attachment.save_attachment?
|
68
|
+
assert_nothing_raised { attachment.save! }
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_should_handle_nil_file_upload
|
72
|
+
attachment = attachment_model.create :uploaded_data => ''
|
73
|
+
assert_raise ActiveRecord::RecordInvalid do
|
74
|
+
attachment.save!
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/test/basic_test.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
|
2
|
+
|
3
|
+
class BasicTest < Test::Unit::TestCase
|
4
|
+
def test_should_set_default_min_size
|
5
|
+
assert_equal 1, Attachment.attachment_options[:min_size]
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_set_default_max_size
|
9
|
+
assert_equal 1.megabyte, Attachment.attachment_options[:max_size]
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_set_default_size
|
13
|
+
assert_equal (1..1.megabyte), Attachment.attachment_options[:size]
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_set_default_thumbnails_option
|
17
|
+
assert_equal Hash.new, Attachment.attachment_options[:thumbnails]
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_set_default_thumbnail_class
|
21
|
+
assert_equal Attachment, Attachment.attachment_options[:thumbnail_class]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_normalize_content_types_to_array
|
25
|
+
assert_equal %w(pdf), PdfAttachment.attachment_options[:content_type]
|
26
|
+
assert_equal %w(pdf doc txt), DocAttachment.attachment_options[:content_type]
|
27
|
+
assert_equal ['image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'image/x-png', 'image/jpg'], ImageAttachment.attachment_options[:content_type]
|
28
|
+
assert_equal ['pdf', 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'image/x-png', 'image/jpg'], ImageOrPdfAttachment.attachment_options[:content_type]
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_should_sanitize_content_type
|
32
|
+
@attachment = Attachment.new :content_type => ' foo '
|
33
|
+
assert_equal 'foo', @attachment.content_type
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_should_sanitize_filenames
|
37
|
+
@attachment = Attachment.new :filename => 'blah/foo.bar'
|
38
|
+
assert_equal 'foo.bar', @attachment.filename
|
39
|
+
|
40
|
+
@attachment.filename = 'blah\\foo.bar'
|
41
|
+
assert_equal 'foo.bar', @attachment.filename
|
42
|
+
|
43
|
+
@attachment.filename = 'f o!O-.bar'
|
44
|
+
assert_equal 'f_o_O-.bar', @attachment.filename
|
45
|
+
|
46
|
+
@attachment.filename = 'sheeps_says_bææ'
|
47
|
+
assert_equal 'sheeps_says_b__', @attachment.filename
|
48
|
+
|
49
|
+
@attachment.filename = nil
|
50
|
+
assert_nil @attachment.filename
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_convert_thumbnail_name
|
54
|
+
@attachment = FileAttachment.new :filename => 'foo.bar'
|
55
|
+
assert_equal 'foo.bar', @attachment.thumbnail_name_for(nil)
|
56
|
+
assert_equal 'foo.bar', @attachment.thumbnail_name_for('')
|
57
|
+
assert_equal 'foo_blah.bar', @attachment.thumbnail_name_for(:blah)
|
58
|
+
assert_equal 'foo_blah.blah.bar', @attachment.thumbnail_name_for('blah.blah')
|
59
|
+
|
60
|
+
@attachment.filename = 'foo.bar.baz'
|
61
|
+
assert_equal 'foo.bar_blah.baz', @attachment.thumbnail_name_for(:blah)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_require_valid_thumbnails_option
|
65
|
+
klass = Class.new(ActiveRecord::Base)
|
66
|
+
assert_raise ArgumentError do
|
67
|
+
klass.has_attachment :thumbnails => []
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/test/database.yml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
sqlite:
|
2
|
+
:adapter: sqlite
|
3
|
+
:dbfile: attachment_fu_plugin.sqlite.db
|
4
|
+
sqlite3:
|
5
|
+
:adapter: sqlite3
|
6
|
+
:dbfile: attachment_fu_plugin.sqlite3.db
|
7
|
+
postgresql:
|
8
|
+
:adapter: postgresql
|
9
|
+
:username: postgres
|
10
|
+
:password: postgres
|
11
|
+
:database: attachment_fu_plugin_test
|
12
|
+
:min_messages: ERROR
|
13
|
+
mysql:
|
14
|
+
:adapter: mysql
|
15
|
+
:host: localhost
|
16
|
+
:username: rails
|
17
|
+
:password:
|
18
|
+
:database: attachment_fu_plugin_test
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
|
2
|
+
|
3
|
+
class OrphanAttachmentTest < Test::Unit::TestCase
|
4
|
+
include BaseAttachmentTests
|
5
|
+
attachment_model OrphanAttachment
|
6
|
+
|
7
|
+
def test_should_create_image_from_uploaded_file
|
8
|
+
assert_created do
|
9
|
+
attachment = upload_file :filename => '/files/rails.png'
|
10
|
+
assert_valid attachment
|
11
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
12
|
+
assert attachment.image?
|
13
|
+
assert !attachment.size.zero?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_create_file_from_uploaded_file
|
18
|
+
assert_created do
|
19
|
+
attachment = upload_file :filename => '/files/foo.txt'
|
20
|
+
assert_valid attachment
|
21
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
22
|
+
assert attachment.image?
|
23
|
+
assert !attachment.size.zero?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_create_file_from_merb_temp_file
|
28
|
+
assert_created do
|
29
|
+
attachment = upload_merb_file :filename => '/files/foo.txt'
|
30
|
+
assert_valid attachment
|
31
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
32
|
+
assert attachment.image?
|
33
|
+
assert !attachment.size.zero?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_create_image_from_uploaded_file_with_custom_content_type
|
38
|
+
assert_created do
|
39
|
+
attachment = upload_file :content_type => 'foo/bar', :filename => '/files/rails.png'
|
40
|
+
assert_valid attachment
|
41
|
+
assert !attachment.image?
|
42
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
43
|
+
assert !attachment.size.zero?
|
44
|
+
#assert_equal 1784, attachment.size
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_should_create_thumbnail
|
49
|
+
attachment = upload_file :filename => '/files/rails.png'
|
50
|
+
|
51
|
+
assert_raise Technoweenie::AttachmentFu::ThumbnailError do
|
52
|
+
attachment.create_or_update_thumbnail(attachment.create_temp_file, 'thumb', 50, 50)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_create_thumbnail_with_geometry_string
|
57
|
+
attachment = upload_file :filename => '/files/rails.png'
|
58
|
+
|
59
|
+
assert_raise Technoweenie::AttachmentFu::ThumbnailError do
|
60
|
+
attachment.create_or_update_thumbnail(attachment.create_temp_file, 'thumb', 'x50')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class MinimalAttachmentTest < OrphanAttachmentTest
|
66
|
+
attachment_model MinimalAttachment
|
67
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
class Attachment < ActiveRecord::Base
|
2
|
+
@@saves = 0
|
3
|
+
cattr_accessor :saves
|
4
|
+
has_attachment :processor => :rmagick
|
5
|
+
validates_as_attachment
|
6
|
+
after_attachment_saved do |record|
|
7
|
+
self.saves += 1
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class SmallAttachment < Attachment
|
12
|
+
has_attachment :max_size => 1.kilobyte
|
13
|
+
end
|
14
|
+
|
15
|
+
class BigAttachment < Attachment
|
16
|
+
has_attachment :size => 1.megabyte..2.megabytes
|
17
|
+
end
|
18
|
+
|
19
|
+
class PdfAttachment < Attachment
|
20
|
+
has_attachment :content_type => 'pdf'
|
21
|
+
end
|
22
|
+
|
23
|
+
class DocAttachment < Attachment
|
24
|
+
has_attachment :content_type => %w(pdf doc txt)
|
25
|
+
end
|
26
|
+
|
27
|
+
class ImageAttachment < Attachment
|
28
|
+
has_attachment :content_type => :image, :resize_to => [50,50]
|
29
|
+
end
|
30
|
+
|
31
|
+
class ImageOrPdfAttachment < Attachment
|
32
|
+
has_attachment :content_type => ['pdf', :image], :resize_to => 'x50'
|
33
|
+
end
|
34
|
+
|
35
|
+
class ImageWithThumbsAttachment < Attachment
|
36
|
+
has_attachment :thumbnails => { :thumb => [50, 50], :geometry => 'x50' }, :resize_to => [55,55]
|
37
|
+
after_resize do |record, img|
|
38
|
+
record.aspect_ratio = img.columns.to_f / img.rows.to_f
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class FileAttachment < ActiveRecord::Base
|
43
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files', :processor => :rmagick
|
44
|
+
validates_as_attachment
|
45
|
+
end
|
46
|
+
|
47
|
+
class ImageFileAttachment < FileAttachment
|
48
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
49
|
+
:content_type => :image, :resize_to => [50,50]
|
50
|
+
end
|
51
|
+
|
52
|
+
class ImageWithThumbsFileAttachment < FileAttachment
|
53
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
54
|
+
:thumbnails => { :thumb => [50, 50], :geometry => 'x50' }, :resize_to => [55,55]
|
55
|
+
after_resize do |record, img|
|
56
|
+
record.aspect_ratio = img.columns.to_f / img.rows.to_f
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class ImageWithThumbsClassFileAttachment < FileAttachment
|
61
|
+
# use file_system_path to test backwards compatibility
|
62
|
+
has_attachment :file_system_path => 'vendor/plugins/attachment_fu/test/files',
|
63
|
+
:thumbnails => { :thumb => [50, 50] }, :resize_to => [55,55],
|
64
|
+
:thumbnail_class => 'ImageThumbnail'
|
65
|
+
end
|
66
|
+
|
67
|
+
class ImageThumbnail < FileAttachment
|
68
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files/thumbnails'
|
69
|
+
end
|
70
|
+
|
71
|
+
# no parent
|
72
|
+
class OrphanAttachment < ActiveRecord::Base
|
73
|
+
has_attachment :processor => :rmagick
|
74
|
+
validates_as_attachment
|
75
|
+
end
|
76
|
+
|
77
|
+
# no filename, no size, no content_type
|
78
|
+
class MinimalAttachment < ActiveRecord::Base
|
79
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files', :processor => :rmagick
|
80
|
+
validates_as_attachment
|
81
|
+
|
82
|
+
def filename
|
83
|
+
"#{id}.file"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
begin
|
88
|
+
class ImageScienceAttachment < ActiveRecord::Base
|
89
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
90
|
+
:processor => :image_science, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
91
|
+
end
|
92
|
+
rescue MissingSourceFile
|
93
|
+
puts $!.message
|
94
|
+
puts "no ImageScience"
|
95
|
+
end
|
96
|
+
|
97
|
+
begin
|
98
|
+
class CoreImageAttachment < ActiveRecord::Base
|
99
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
100
|
+
:processor => :core_image, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
101
|
+
end
|
102
|
+
rescue MissingSourceFile
|
103
|
+
puts $!.message
|
104
|
+
puts "no CoreImage"
|
105
|
+
end
|
106
|
+
|
107
|
+
begin
|
108
|
+
class MiniMagickAttachment < ActiveRecord::Base
|
109
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
110
|
+
:processor => :mini_magick, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
111
|
+
end
|
112
|
+
rescue MissingSourceFile
|
113
|
+
puts $!.message
|
114
|
+
puts "no Mini Magick"
|
115
|
+
end
|
116
|
+
|
117
|
+
begin
|
118
|
+
class GD2Attachment < ActiveRecord::Base
|
119
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
120
|
+
:processor => :gd2, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
121
|
+
end
|
122
|
+
rescue MissingSourceFile
|
123
|
+
puts $!.message
|
124
|
+
puts "no GD2"
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
begin
|
129
|
+
class MiniMagickAttachment < ActiveRecord::Base
|
130
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
131
|
+
:processor => :mini_magick, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
132
|
+
end
|
133
|
+
rescue MissingSourceFile
|
134
|
+
end
|
135
|
+
|
136
|
+
begin
|
137
|
+
class S3Attachment < ActiveRecord::Base
|
138
|
+
has_attachment :storage => :s3, :processor => :rmagick, :s3_config_path => File.join(File.dirname(__FILE__), '../amazon_s3.yml')
|
139
|
+
validates_as_attachment
|
140
|
+
end
|
141
|
+
|
142
|
+
class S3WithPathPrefixAttachment < S3Attachment
|
143
|
+
has_attachment :storage => :s3, :path_prefix => 'some/custom/path/prefix', :processor => :rmagick
|
144
|
+
validates_as_attachment
|
145
|
+
end
|
146
|
+
rescue
|
147
|
+
puts "S3 error: #{$!}"
|
148
|
+
end
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
foo
|
Binary file
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/geometry')) unless Object.const_defined?(:Geometry)
|
3
|
+
|
4
|
+
class GeometryTest < Test::Unit::TestCase
|
5
|
+
def test_should_resize
|
6
|
+
assert_geometry 50, 64,
|
7
|
+
"50x50" => [39, 50],
|
8
|
+
"60x60" => [47, 60],
|
9
|
+
"100x100" => [78, 100]
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_resize_no_width
|
13
|
+
assert_geometry 50, 64,
|
14
|
+
"x50" => [39, 50],
|
15
|
+
"x60" => [47, 60],
|
16
|
+
"x100" => [78, 100]
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_resize_no_height
|
20
|
+
assert_geometry 50, 64,
|
21
|
+
"50" => [50, 64],
|
22
|
+
"60" => [60, 77],
|
23
|
+
"100" => [100, 128]
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_resize_with_percent
|
27
|
+
assert_geometry 50, 64,
|
28
|
+
"50x50%" => [25, 32],
|
29
|
+
"60x60%" => [30, 38],
|
30
|
+
"120x112%" => [60, 72]
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_resize_with_percent_and_no_width
|
34
|
+
assert_geometry 50, 64,
|
35
|
+
"x50%" => [50, 32],
|
36
|
+
"x60%" => [50, 38],
|
37
|
+
"x112%" => [50, 72]
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_resize_with_percent_and_no_height
|
41
|
+
assert_geometry 50, 64,
|
42
|
+
"50%" => [25, 32],
|
43
|
+
"60%" => [30, 38],
|
44
|
+
"120%" => [60, 77]
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_resize_with_less
|
48
|
+
assert_geometry 50, 64,
|
49
|
+
"50x50<" => [50, 64],
|
50
|
+
"60x60<" => [50, 64],
|
51
|
+
"100x100<" => [78, 100],
|
52
|
+
"100x112<" => [88, 112],
|
53
|
+
"40x70<" => [50, 64]
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_resize_with_less_and_no_width
|
57
|
+
assert_geometry 50, 64,
|
58
|
+
"x50<" => [50, 64],
|
59
|
+
"x60<" => [50, 64],
|
60
|
+
"x100<" => [78, 100]
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_should_resize_with_less_and_no_height
|
64
|
+
assert_geometry 50, 64,
|
65
|
+
"50<" => [50, 64],
|
66
|
+
"60<" => [60, 77],
|
67
|
+
"100<" => [100, 128]
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_should_resize_with_greater
|
71
|
+
assert_geometry 50, 64,
|
72
|
+
"50x50>" => [39, 50],
|
73
|
+
"60x60>" => [47, 60],
|
74
|
+
"100x100>" => [50, 64],
|
75
|
+
"100x112>" => [50, 64],
|
76
|
+
"40x70>" => [40, 51]
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_should_resize_with_greater_and_no_width
|
80
|
+
assert_geometry 50, 64,
|
81
|
+
"x40>" => [31, 40],
|
82
|
+
"x60>" => [47, 60],
|
83
|
+
"x100>" => [50, 64]
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_resize_with_greater_and_no_height
|
87
|
+
assert_geometry 50, 64,
|
88
|
+
"40>" => [40, 51],
|
89
|
+
"60>" => [50, 64],
|
90
|
+
"100>" => [50, 64]
|
91
|
+
end
|
92
|
+
|
93
|
+
protected
|
94
|
+
def assert_geometry(width, height, values)
|
95
|
+
values.each do |geo, result|
|
96
|
+
# run twice to verify the Geometry string isn't modified after a run
|
97
|
+
geo = Geometry.from_s(geo)
|
98
|
+
2.times { assert_equal result, [width, height] / geo }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class CoreImageTest < Test::Unit::TestCase
|
4
|
+
attachment_model CoreImageAttachment
|
5
|
+
|
6
|
+
if Object.const_defined?(:OSX)
|
7
|
+
def test_should_resize_image
|
8
|
+
attachment = upload_file :filename => '/files/rails.png'
|
9
|
+
assert_valid attachment
|
10
|
+
assert attachment.image?
|
11
|
+
# test core image thumbnail
|
12
|
+
assert_equal 42, attachment.width
|
13
|
+
assert_equal 55, attachment.height
|
14
|
+
|
15
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
16
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
17
|
+
|
18
|
+
# test exact resize dimensions
|
19
|
+
assert_equal 50, thumb.width
|
20
|
+
assert_equal 51, thumb.height
|
21
|
+
|
22
|
+
# test geometry string
|
23
|
+
assert_equal 31, geo.width
|
24
|
+
assert_equal 41, geo.height
|
25
|
+
|
26
|
+
# This makes sure that we didn't overwrite the original file
|
27
|
+
# and will end up with a thumbnail instead of the original
|
28
|
+
assert_equal 42, attachment.width
|
29
|
+
assert_equal 55, attachment.height
|
30
|
+
|
31
|
+
end
|
32
|
+
else
|
33
|
+
def test_flunk
|
34
|
+
puts "CoreImage not loaded, tests not running"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class GD2Test < Test::Unit::TestCase
|
4
|
+
attachment_model GD2Attachment
|
5
|
+
|
6
|
+
if Object.const_defined?(:GD2)
|
7
|
+
def test_should_resize_image
|
8
|
+
attachment = upload_file :filename => '/files/rails.png'
|
9
|
+
assert_valid attachment
|
10
|
+
assert attachment.image?
|
11
|
+
# test gd2 thumbnail
|
12
|
+
assert_equal 43, attachment.width
|
13
|
+
assert_equal 55, attachment.height
|
14
|
+
|
15
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
16
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
17
|
+
|
18
|
+
# test exact resize dimensions
|
19
|
+
assert_equal 50, thumb.width
|
20
|
+
assert_equal 51, thumb.height
|
21
|
+
|
22
|
+
# test geometry string
|
23
|
+
assert_equal 31, geo.width
|
24
|
+
assert_equal 40, geo.height
|
25
|
+
end
|
26
|
+
else
|
27
|
+
def test_flunk
|
28
|
+
puts "GD2 not loaded, tests not running"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class ImageScienceTest < Test::Unit::TestCase
|
4
|
+
attachment_model ImageScienceAttachment
|
5
|
+
|
6
|
+
if Object.const_defined?(:ImageScience)
|
7
|
+
def test_should_resize_image
|
8
|
+
attachment = upload_file :filename => '/files/rails.png'
|
9
|
+
assert_valid attachment
|
10
|
+
assert attachment.image?
|
11
|
+
# test image science thumbnail
|
12
|
+
assert_equal 42, attachment.width
|
13
|
+
assert_equal 55, attachment.height
|
14
|
+
|
15
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
16
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
17
|
+
|
18
|
+
# test exact resize dimensions
|
19
|
+
assert_equal 50, thumb.width
|
20
|
+
assert_equal 51, thumb.height
|
21
|
+
|
22
|
+
# test geometry string
|
23
|
+
assert_equal 31, geo.width
|
24
|
+
assert_equal 41, geo.height
|
25
|
+
end
|
26
|
+
else
|
27
|
+
def test_flunk
|
28
|
+
puts "ImageScience not loaded, tests not running"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class MiniMagickTest < Test::Unit::TestCase
|
4
|
+
attachment_model MiniMagickAttachment
|
5
|
+
|
6
|
+
if Object.const_defined?(:MiniMagick)
|
7
|
+
def test_should_resize_image
|
8
|
+
attachment = upload_file :filename => '/files/rails.png'
|
9
|
+
assert_valid attachment
|
10
|
+
assert attachment.image?
|
11
|
+
# test MiniMagick thumbnail
|
12
|
+
assert_equal 43, attachment.width
|
13
|
+
assert_equal 55, attachment.height
|
14
|
+
|
15
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
16
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
17
|
+
|
18
|
+
# test exact resize dimensions
|
19
|
+
assert_equal 50, thumb.width
|
20
|
+
assert_equal 51, thumb.height
|
21
|
+
|
22
|
+
# test geometry string
|
23
|
+
assert_equal 31, geo.width
|
24
|
+
assert_equal 40, geo.height
|
25
|
+
end
|
26
|
+
else
|
27
|
+
def test_flunk
|
28
|
+
puts "MiniMagick not loaded, tests not running"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|