has_image 0.3.0 → 0.4.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/Changelog.md +100 -0
- data/MIT-LICENSE +15 -17
- data/README.md +159 -0
- data/Rakefile +6 -38
- data/lib/has_image.rb +31 -12
- data/lib/has_image/processor.rb +17 -18
- data/lib/has_image/railtie.rb +7 -0
- data/lib/has_image/storage.rb +31 -31
- data/lib/has_image/version.rb +3 -0
- data/lib/has_image/view_helpers.rb +3 -6
- data/{test_rails → test}/complex_pic_test.rb +10 -5
- data/{test_rails → test}/fixtures/bad_image.jpg +0 -0
- data/{test_rails → test}/fixtures/image.jpg +0 -0
- data/{test_rails → test}/fixtures/image.png +0 -0
- data/{test_rails → test}/pic_test.rb +4 -3
- data/test/processor_test.rb +9 -10
- data/test/storage_test.rb +28 -29
- data/test/test_helper.rb +47 -0
- metadata +92 -35
- data/CHANGELOG +0 -72
- data/FAQ +0 -25
- data/README.textile +0 -193
- data/init.rb +0 -1
- data/test_rails/database.yml +0 -3
- data/test_rails/schema.rb +0 -15
- data/test_rails/test_helper.rb +0 -52
data/test/storage_test.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
require 'test_helper.rb'
|
2
2
|
|
3
3
|
class StorageTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
def setup
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def teardown
|
9
9
|
FileUtils.rm_rf(File.dirname(__FILE__) + '/../tmp')
|
10
10
|
@temp_file.close! if @temp_file && !@temp_file.closed?
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def default_options
|
14
14
|
mock_class = "test"
|
15
15
|
mock_class.stubs(:table_name).returns('tests')
|
@@ -17,19 +17,19 @@ class StorageTest < Test::Unit::TestCase
|
|
17
17
|
:base_path => File.join(File.dirname(__FILE__), '..', 'tmp')
|
18
18
|
)
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def test_partitioned_path
|
22
22
|
assert_equal(["0001", "2345"], HasImage::Storage.partitioned_path("12345"))
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def test_partitioned_path_doesnt_collide_with_high_ids
|
26
26
|
assert_not_equal HasImage::Storage.partitioned_path(867792732),
|
27
27
|
HasImage::Storage.partitioned_path(867792731)
|
28
28
|
# FIXME: collisions when IDs have more than 8 digits
|
29
29
|
# assert_not_equal HasImage::Storage.partitioned_path(967792731),
|
30
|
-
# HasImage::Storage.partitioned_path(967792731)
|
30
|
+
# HasImage::Storage.partitioned_path(967792731)
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def test_id_from_partitioned_path
|
34
34
|
assert_equal 123, HasImage::Storage.id_from_partitioned_path(HasImage::Storage.partitioned_path(123))
|
35
35
|
assert_equal 56, HasImage::Storage.id_from_partitioned_path(HasImage::Storage.partitioned_path(56))
|
@@ -37,44 +37,44 @@ class StorageTest < Test::Unit::TestCase
|
|
37
37
|
# FIXME: for IDs with more than 8 digits partitioned path is destructive
|
38
38
|
# assert_equal 867792731, HasImage::Storage.id_from_partitioned_path(HasImage::Storage.partitioned_path(867792731))
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def test_id_from_path_accepts_array
|
42
42
|
assert_equal 123, HasImage::Storage.id_from_path(['0000','0123','image_something.jpg'])
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def test_id_from_path_accepts_path
|
46
46
|
assert_equal 12345, HasImage::Storage.id_from_path('0001/2345/0123/image_something.jpg')
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
def test_generated_file_name
|
50
50
|
assert_equal("1", HasImage::Storage.generated_file_name(stub(:to_param => 1)))
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def test_path_for
|
54
54
|
@storage = HasImage::Storage.new(default_options)
|
55
55
|
assert_match(/\/tmp\/tests\/0000\/0001/, @storage.send(:path_for, 1))
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def test_public_path_for
|
59
59
|
@storage = HasImage::Storage.new(default_options.merge(:base_path => '/public'))
|
60
60
|
pic = stub(:has_image_file => "mypic", :has_image_id => 1)
|
61
61
|
assert_equal "/tests/0000/0001/mypic_square.jpg", @storage.public_path_for(pic, :square)
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
def test_public_path_for_image_with_html_special_symbols_in_name
|
65
65
|
@storage = HasImage::Storage.new(default_options.merge(:base_path => '/public'))
|
66
66
|
pic = stub(:has_image_file => "my+pic", :has_image_id => 1)
|
67
67
|
assert_equal "/tests/0000/0001/my%2Bpic_square.jpg", @storage.public_path_for(pic, :square)
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def test_name_generation_takes_into_account_thumbnail_separator_constant
|
71
71
|
old_separator = HasImage::Storage.thumbnail_separator
|
72
|
-
|
72
|
+
|
73
73
|
@storage = HasImage::Storage.new(default_options.merge(:thumbnails => {:schick => '22x22'}, :base_path => '/public'))
|
74
74
|
HasImage::Storage.thumbnail_separator = '.'
|
75
75
|
pic = stub(:has_image_file => "pic", :has_image_id => 1)
|
76
76
|
assert_equal "/tests/0000/0001/pic.schick.jpg", @storage.public_path_for(pic, :schick)
|
77
|
-
|
77
|
+
|
78
78
|
HasImage::Storage.thumbnail_separator = old_separator
|
79
79
|
end
|
80
80
|
|
@@ -89,7 +89,7 @@ class StorageTest < Test::Unit::TestCase
|
|
89
89
|
real = @storage.escape_file_name_for_http("/tests/00+00/0001/mypic+square?something.jpg")
|
90
90
|
assert_equal "/tests/00+00/0001/mypic%2Bsquare%3Fsomething.jpg", real
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
def test_filename_for
|
94
94
|
@storage = HasImage::Storage.new(default_options)
|
95
95
|
assert_equal "test.jpg", @storage.send(:file_name_for, "test")
|
@@ -97,19 +97,19 @@ class StorageTest < Test::Unit::TestCase
|
|
97
97
|
|
98
98
|
def test_set_data_from_file
|
99
99
|
@storage = HasImage::Storage.new(default_options)
|
100
|
-
@file = File.new(File.
|
100
|
+
@file = File.new(File.expand_path("../fixtures/image.jpg", __FILE__), "r")
|
101
101
|
@storage.image_data = @file
|
102
102
|
assert @storage.temp_file.size > 0
|
103
103
|
assert_equal Zlib.crc32(@file.read), Zlib.crc32(@storage.temp_file.read)
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
def test_set_data_from_tempfile
|
107
107
|
@storage = HasImage::Storage.new(default_options)
|
108
108
|
@storage.image_data = temp_file("image.jpg")
|
109
109
|
assert @storage.temp_file.size > 0
|
110
110
|
assert_equal Zlib.crc32(@storage.temp_file.read), Zlib.crc32(@temp_file.read)
|
111
111
|
end
|
112
|
-
|
112
|
+
|
113
113
|
def test_install_and_remove_images
|
114
114
|
@storage = HasImage::Storage.new(default_options.merge(:thumbnails => {
|
115
115
|
:one => "100x100", :two => "200x200"}))
|
@@ -117,7 +117,7 @@ class StorageTest < Test::Unit::TestCase
|
|
117
117
|
@name = @storage.install_images(stub(:has_image_id => 1))
|
118
118
|
assert @storage.remove_images(stub(:has_image_id => 1), @name)
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
def test_install_images_doesnt_automatically_generate_thumbnails_if_that_option_is_set
|
122
122
|
@storage = HasImage::Storage.new(default_options.merge(
|
123
123
|
:thumbnails => {:two => "200x200"},
|
@@ -133,32 +133,31 @@ class StorageTest < Test::Unit::TestCase
|
|
133
133
|
@storage.image_data = temp_file("image.jpg")
|
134
134
|
assert !@storage.image_too_small?
|
135
135
|
end
|
136
|
-
|
136
|
+
|
137
137
|
def test_image_too_small
|
138
138
|
@storage = HasImage::Storage.new(default_options.merge(:min_size => 1.gigabyte))
|
139
139
|
@storage.image_data = temp_file("image.jpg")
|
140
140
|
assert @storage.image_too_small?
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
def test_image_too_big
|
144
144
|
@storage = HasImage::Storage.new(default_options.merge(:max_size => 1.kilobyte))
|
145
|
-
@storage.image_data = temp_file("image.jpg")
|
145
|
+
@storage.image_data = temp_file("image.jpg")
|
146
146
|
assert @storage.image_too_big?
|
147
147
|
end
|
148
148
|
|
149
149
|
def test_image_not_too_big
|
150
150
|
@storage = HasImage::Storage.new(default_options.merge(:max_size => 1.gigabyte))
|
151
|
-
@storage.image_data = temp_file("image.jpg")
|
151
|
+
@storage.image_data = temp_file("image.jpg")
|
152
152
|
assert !@storage.image_too_big?
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
private
|
156
|
-
|
156
|
+
|
157
157
|
def temp_file(fixture)
|
158
|
-
file = File.new(File.
|
158
|
+
file = File.new(File.expand_path("../fixtures/#{fixture}", __FILE__), "r")
|
159
159
|
@temp_file = Tempfile.new("test")
|
160
160
|
@temp_file.write(file.read)
|
161
161
|
return @temp_file
|
162
162
|
end
|
163
|
-
|
164
163
|
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require "active_support/core_ext/kernel/reporting"
|
4
|
+
require "active_support/core_ext/class/attribute_accessors"
|
5
|
+
require 'test/unit'
|
6
|
+
require 'mocha'
|
7
|
+
require "active_record"
|
8
|
+
require "logger"
|
9
|
+
require "rack/test"
|
10
|
+
|
11
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
12
|
+
require "has_image"
|
13
|
+
|
14
|
+
RAILS_ROOT = File.join(File.dirname(__FILE__), '..', 'tmp')
|
15
|
+
|
16
|
+
ActiveRecord::Base.logger = Logger.new($stdout) if ENV["LOG"]
|
17
|
+
ActiveRecord::Migration.verbose = false
|
18
|
+
|
19
|
+
# Change the connection args as you see fit to test against different adapters.
|
20
|
+
ActiveRecord::Base.establish_connection(
|
21
|
+
:adapter => "sqlite3",
|
22
|
+
:database => ":memory:"
|
23
|
+
)
|
24
|
+
|
25
|
+
module ActionView
|
26
|
+
class Base
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
ActiveRecord::Migration.create_table :pics do |t|
|
31
|
+
t.string :has_image_file
|
32
|
+
t.timestamps
|
33
|
+
end
|
34
|
+
|
35
|
+
ActiveRecord::Migration.create_table :complex_pics do |t|
|
36
|
+
t.string :filename
|
37
|
+
t.integer :width, :height
|
38
|
+
t.string :image_size
|
39
|
+
t.timestamps
|
40
|
+
end
|
41
|
+
|
42
|
+
HasImage.enable
|
43
|
+
|
44
|
+
def fixture_file_upload(path, mime_type)
|
45
|
+
path = File.expand_path("../fixtures/#{path}", __FILE__)
|
46
|
+
Rack::Test::UploadedFile.new(path, mime_type)
|
47
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_image
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Norman Clarke
|
13
|
+
- "Adri\xC3\xA1n Mugnolo"
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2010-09-29 00:00:00 -03:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: mini_magick
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 2
|
31
|
+
- 1
|
32
|
+
version: "2.1"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: activesupport
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 2
|
45
|
+
- 1
|
46
|
+
version: "2.1"
|
17
47
|
type: :runtime
|
18
|
-
|
19
|
-
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: activerecord
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
20
54
|
requirements:
|
21
55
|
- - ">="
|
22
56
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
57
|
+
segments:
|
58
|
+
- 2
|
59
|
+
- 1
|
60
|
+
version: "2.1"
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: mocha
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ~>
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
- 9
|
74
|
+
version: "0.9"
|
75
|
+
type: :development
|
76
|
+
version_requirements: *id004
|
77
|
+
description: Has_image is a Ruby on Rails gem/plugin that allows you to attach images to Active Record models.
|
78
|
+
email:
|
79
|
+
- norman@njclarke.com
|
80
|
+
- adrian@mugnolo.com
|
27
81
|
executables: []
|
28
82
|
|
29
83
|
extensions: []
|
@@ -31,52 +85,55 @@ extensions: []
|
|
31
85
|
extra_rdoc_files: []
|
32
86
|
|
33
87
|
files:
|
34
|
-
- CHANGELOG
|
35
|
-
- FAQ
|
36
|
-
- MIT-LICENSE
|
37
|
-
- README.textile
|
38
|
-
- init.rb
|
39
|
-
- lib/has_image.rb
|
40
88
|
- lib/has_image/processor.rb
|
89
|
+
- lib/has_image/railtie.rb
|
41
90
|
- lib/has_image/storage.rb
|
91
|
+
- lib/has_image/version.rb
|
42
92
|
- lib/has_image/view_helpers.rb
|
93
|
+
- lib/has_image.rb
|
94
|
+
- Changelog.md
|
95
|
+
- README.md
|
96
|
+
- MIT-LICENSE
|
43
97
|
- Rakefile
|
98
|
+
- test/complex_pic_test.rb
|
99
|
+
- test/fixtures/bad_image.jpg
|
100
|
+
- test/fixtures/image.jpg
|
101
|
+
- test/fixtures/image.png
|
102
|
+
- test/pic_test.rb
|
103
|
+
- test/processor_test.rb
|
104
|
+
- test/storage_test.rb
|
105
|
+
- test/test_helper.rb
|
44
106
|
has_rdoc: true
|
45
|
-
homepage: http://
|
107
|
+
homepage: http://github.com/norman/has_image
|
108
|
+
licenses: []
|
109
|
+
|
46
110
|
post_install_message:
|
47
|
-
rdoc_options:
|
48
|
-
|
49
|
-
- --inline-source
|
50
|
-
- --line-numbers
|
111
|
+
rdoc_options: []
|
112
|
+
|
51
113
|
require_paths:
|
52
114
|
- lib
|
53
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
54
117
|
requirements:
|
55
118
|
- - ">="
|
56
119
|
- !ruby/object:Gem::Version
|
120
|
+
segments:
|
121
|
+
- 0
|
57
122
|
version: "0"
|
58
|
-
version:
|
59
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
60
125
|
requirements:
|
61
126
|
- - ">="
|
62
127
|
- !ruby/object:Gem::Version
|
128
|
+
segments:
|
129
|
+
- 0
|
63
130
|
version: "0"
|
64
|
-
version:
|
65
131
|
requirements: []
|
66
132
|
|
67
133
|
rubyforge_project: has-image
|
68
|
-
rubygems_version: 1.
|
134
|
+
rubygems_version: 1.3.7
|
69
135
|
signing_key:
|
70
|
-
specification_version:
|
71
|
-
summary: Lets you attach images with thumbnails to
|
72
|
-
test_files:
|
73
|
-
|
74
|
-
- test_rails/fixtures/bad_image.jpg
|
75
|
-
- test_rails/fixtures/image.jpg
|
76
|
-
- test_rails/fixtures/image.png
|
77
|
-
- test_rails/pic_test.rb
|
78
|
-
- test_rails/complex_pic_test.rb
|
79
|
-
- test_rails/schema.rb
|
80
|
-
- test_rails/test_helper.rb
|
81
|
-
- test/processor_test.rb
|
82
|
-
- test/storage_test.rb
|
136
|
+
specification_version: 3
|
137
|
+
summary: Lets you attach images with thumbnails to Active Record models.
|
138
|
+
test_files: []
|
139
|
+
|
data/CHANGELOG
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
2008-10-22 Gerrit Keiser and Tricycle Developments
|
2
|
-
* Added option to not delete images on destroy
|
3
|
-
* Made thumbnail name separator configurable
|
4
|
-
* Added height/width methods to storage
|
5
|
-
* Allowed regenerating only one thumbnail size
|
6
|
-
* Made has_image column configurable
|
7
|
-
* Added some compatibility with attachment_fu
|
8
|
-
* General refactorings and overall code improvement
|
9
|
-
|
10
|
-
2008-10-22 Norman Clarke <norman@randomba.org>
|
11
|
-
* Documentation improvements and minor code cleanups.
|
12
|
-
|
13
|
-
2008-10-09 Dima Sabanin <sdmitry@gmail.com>
|
14
|
-
* Fixed display of images with special symbols in the name,
|
15
|
-
like '2777-nipple-+-apple-napple.jpg'. + is reserved by HTTP.
|
16
|
-
Now escaping filenames before giving them back in #public_path()
|
17
|
-
|
18
|
-
2008-09-10 Norman Clarke <norman@randomba.org>
|
19
|
-
* Fixed images not being converted to target format.
|
20
|
-
|
21
|
-
2008-08-29 Norman Clarke <norman@randomba.org>
|
22
|
-
* Fixed bad call to has_image_file
|
23
|
-
|
24
|
-
2008-08-28 Norman Clarke <norman@randomba.org>
|
25
|
-
* Added ability to regenerate a model's thumbnails.
|
26
|
-
* Changed a few methods in storage to accept the model rather than the id.
|
27
|
-
This makes storage more hackable as regards generating paths and file names.
|
28
|
-
* Added "has_image_id" method to model instance methods to facilitate
|
29
|
-
grouping the images under a directory structure based on a related model's
|
30
|
-
ids.
|
31
|
-
* Made the generated file name simply by the image object's id - this
|
32
|
-
is better adherance to the principle of least surprise.
|
33
|
-
|
34
|
-
2008-08-25 Norman Clarke <norman@randomba.org>
|
35
|
-
* Fixed bad call to resize_to in view helper.
|
36
|
-
|
37
|
-
2008-08-19 Norman Clarke <norman@randomba.org>
|
38
|
-
* Made storage work more correctly with tempfiles.
|
39
|
-
|
40
|
-
2008-08-18 Norman Clarke <norman@randomba.org>
|
41
|
-
* Fixed ability to set the path for storing image files.
|
42
|
-
|
43
|
-
2008-08-1 Adrian Mugnolo <adrian@randomba.org>
|
44
|
-
* Improved partitioned path handling to avoid collisions when the id is
|
45
|
-
very high, which can happen if you use db:fixtures:load.
|
46
|
-
|
47
|
-
2008-08-1 Norman Clarke <norman@randomba.org>
|
48
|
-
* Fixed a bug where overwriting a previous image triggered callbacks more
|
49
|
-
than once, causing errors.
|
50
|
-
|
51
|
-
2008-07-29 Norman Clarke <norman@randomba.org>
|
52
|
-
|
53
|
-
* Downcased generated file names to avoid potential issues on
|
54
|
-
case-insensitive filesystems.
|
55
|
-
* Added "absolute path" method to model instances.
|
56
|
-
* Made image deletion nullify the "has_image_file" field.
|
57
|
-
* Added "has_image?" method to model instances.
|
58
|
-
* Fixed ENONENT error with record update when there are no images yet.
|
59
|
-
* Reverted thumbnail sorting feature - it's fast but makes terrible quality
|
60
|
-
thumbnails. It's just not worth it.
|
61
|
-
|
62
|
-
2008-07-28 Norman Clarke <norman@randomba.org>
|
63
|
-
|
64
|
-
* Added sorted thumbnail processing. This improves thumbnail generation
|
65
|
-
speed by about 25% for 4.5 meg jpegs with 5 thumbnails.
|
66
|
-
* Fixed broken resize for non-fixed-width thumbnails.
|
67
|
-
* Added check for bad geometry strings.
|
68
|
-
* Added dependencies and Rubyforge project to gemspec, updated docs.
|
69
|
-
|
70
|
-
2008-07-25 Norman Clarke <norman@randomba.org>
|
71
|
-
|
72
|
-
* First public release.
|