attachment_saver 1.3.0 → 1.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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +18 -11
- data/MIT-LICENSE +1 -1
- data/README +6 -4
- data/attachment_saver.gemspec +1 -0
- data/lib/attachment_saver/version.rb +1 -1
- data/lib/processors/gdk_pixbuf.rb +106 -0
- data/lib/processors/image.rb +1 -1
- data/lib/processors/image_size.rb +42 -0
- data/samples.rb +57 -0
- data/test/fixtures/pd.png +0 -0
- data/test/gdk_pixbuf_processor_test.rb +20 -0
- data/test/image_operations.rb +4 -2
- data/test/image_size_processor_test.rb +24 -0
- data/test_all.sh +9 -0
- metadata +26 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ab301b6cb41a742a469e6570ee68098947546bf
|
4
|
+
data.tar.gz: b2b922db15fc14b957f9fe6c3ef3ad7493ab4f3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73d1c02e925c5855493f40c313cd5320d169cfc55da1a613cdf15c15484c74e1406db90c18fed8dcb9d728dd4e89b0938fbe2cf3da2e08b092001e383684366f
|
7
|
+
data.tar.gz: c7a870a119aca14f8fb6696841f13dc8fe6300eea0db95e317eb88cc6a0d226d5771d50d1ddd649b7198b9e8466dfeeaeb55e0aedf13cde0dd40cac9895b6e5f
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
attachment_saver (1.
|
4
|
+
attachment_saver (1.4.0)
|
5
5
|
activerecord
|
6
6
|
mimemagic
|
7
7
|
|
@@ -11,19 +11,23 @@ GEM
|
|
11
11
|
RubyInline (3.12.4)
|
12
12
|
ZenTest (~> 4.3)
|
13
13
|
ZenTest (4.11.1)
|
14
|
-
activemodel (5.
|
15
|
-
activesupport (= 5.
|
16
|
-
activerecord (5.
|
17
|
-
activemodel (= 5.
|
18
|
-
activesupport (= 5.
|
19
|
-
arel (
|
20
|
-
activesupport (5.
|
14
|
+
activemodel (5.2.0.beta2)
|
15
|
+
activesupport (= 5.2.0.beta2)
|
16
|
+
activerecord (5.2.0.beta2)
|
17
|
+
activemodel (= 5.2.0.beta2)
|
18
|
+
activesupport (= 5.2.0.beta2)
|
19
|
+
arel (>= 9.0)
|
20
|
+
activesupport (5.2.0.beta2)
|
21
21
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
22
22
|
i18n (~> 0.7)
|
23
23
|
minitest (~> 5.1)
|
24
24
|
tzinfo (~> 1.1)
|
25
|
-
arel (
|
25
|
+
arel (9.0.0)
|
26
26
|
concurrent-ruby (1.0.5)
|
27
|
+
gdk_pixbuf2 (2.2.5)
|
28
|
+
glib2 (= 2.2.5)
|
29
|
+
glib2 (2.2.5)
|
30
|
+
pkg-config
|
27
31
|
i18n (0.9.1)
|
28
32
|
concurrent-ruby (~> 1.0)
|
29
33
|
image_science (1.3.0)
|
@@ -32,9 +36,10 @@ GEM
|
|
32
36
|
metaclass (0.0.4)
|
33
37
|
mimemagic (0.3.2)
|
34
38
|
mini_magick (4.8.0)
|
35
|
-
minitest (5.
|
39
|
+
minitest (5.11.0)
|
36
40
|
mocha (1.3.0)
|
37
41
|
metaclass (~> 0.0.1)
|
42
|
+
pkg-config (1.2.8)
|
38
43
|
rake (12.3.0)
|
39
44
|
rmagick (2.16.0)
|
40
45
|
sqlite3 (1.3.13)
|
@@ -46,7 +51,9 @@ PLATFORMS
|
|
46
51
|
ruby
|
47
52
|
|
48
53
|
DEPENDENCIES
|
54
|
+
activerecord
|
49
55
|
attachment_saver!
|
56
|
+
gdk_pixbuf2
|
50
57
|
image_science
|
51
58
|
image_size
|
52
59
|
mini_magick
|
@@ -56,4 +63,4 @@ DEPENDENCIES
|
|
56
63
|
sqlite3
|
57
64
|
|
58
65
|
BUNDLED WITH
|
59
|
-
1.
|
66
|
+
1.16.1
|
data/MIT-LICENSE
CHANGED
data/README
CHANGED
@@ -8,14 +8,16 @@ provided, and the architecture simplifies clean implementation of other types
|
|
8
8
|
of processing. Errors are carefully handled to minimize the possibility of
|
9
9
|
broken uploads leaving incomplete or corrupt data.
|
10
10
|
|
11
|
-
RMagick, MiniMagick, and
|
11
|
+
RMagick, MiniMagick, ImageScience, and GdkPixbuf image processors are supported.
|
12
|
+
|
13
|
+
The pure-ruby ImageSize image processor is also supported (for inspecting images but not resizing them).
|
12
14
|
|
13
15
|
|
14
16
|
Compatibility
|
15
17
|
=============
|
16
18
|
|
17
|
-
Currently tested against Rails
|
18
|
-
Was also tested compatible with 2.3.14
|
19
|
+
Currently tested against Rails 5.2 (up to 5.2.0.beta2), 5.1 (up to 5.1.4), 5.0 (up to 5.0.6), and 4.2 (up to 4.2.10), on Ruby 2.3.6, 2.4.3, and 2.5.0.
|
20
|
+
Was also tested compatible with 2.3.14, 3.0.17, 3.1.8, 3.2.13, 4.2, and 5.0.
|
19
21
|
|
20
22
|
|
21
23
|
Examples
|
@@ -116,7 +118,7 @@ A custom image-processing format using your image-processor's features
|
|
116
118
|
----------------------------------------------------------------------
|
117
119
|
|
118
120
|
# in a file in your lib/ directory that's required in somewhere:
|
119
|
-
module AttachmentSaver::Processors::RMagick::Operations # or MiniMagick::Operations or ImageScience::Operations - see lib/processors
|
121
|
+
module AttachmentSaver::Processors::RMagick::Operations # or MiniMagick::Operations or ImageScience::Operations or GdkPixbuf::Operations - see lib/processors
|
120
122
|
# this module is mixed in to the actual image objects built by the processor, so you can call its' methods directly
|
121
123
|
def wavy_black_and_white(wave_height, wave_length, &block)
|
122
124
|
# RMagick returns the new object; MiniMagick acts on the same object (so you must dup); ImageScience yields; so, look at the existing lib/processors to see the appropriate pattern
|
data/attachment_saver.gemspec
CHANGED
@@ -33,6 +33,7 @@ EOF
|
|
33
33
|
gem.add_development_dependency "rmagick"
|
34
34
|
gem.add_development_dependency "mini_magick"
|
35
35
|
gem.add_development_dependency "image_size"
|
36
|
+
gem.add_development_dependency "gdk_pixbuf2"
|
36
37
|
gem.add_development_dependency "sqlite3"
|
37
38
|
gem.add_development_dependency "mocha"
|
38
39
|
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'gdk_pixbuf2'
|
2
|
+
require 'misc/extended_tempfile'
|
3
|
+
require 'processors/image'
|
4
|
+
|
5
|
+
class GdkPixbufProcessorError < ImageProcessorError; end
|
6
|
+
|
7
|
+
module AttachmentSaver
|
8
|
+
module Processors
|
9
|
+
module GdkPixbuf
|
10
|
+
include Image
|
11
|
+
|
12
|
+
def with_image(filename, &block)
|
13
|
+
# we use Gdk::PixbufLoader rather than Gdk::Pixbuf.new(filename) so that we can learn the format of the
|
14
|
+
# image, which process_image wants to know so that it can save the derived images in the same format.
|
15
|
+
loader = Gdk::PixbufLoader.new
|
16
|
+
File.open(filename, "rb") do |file|
|
17
|
+
while buf = file.read(65536)
|
18
|
+
loader.write(buf)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
loader.close
|
22
|
+
image = loader.pixbuf
|
23
|
+
image.extend(Operations)
|
24
|
+
image.format = loader.format.name
|
25
|
+
block.call(image)
|
26
|
+
end
|
27
|
+
|
28
|
+
def examine_image
|
29
|
+
fileinfo, width, height = Gdk::Pixbuf.get_file_info(uploaded_file_path)
|
30
|
+
raise GdkPixbufProcessorError, "Not an image" if fileinfo.nil?
|
31
|
+
|
32
|
+
self.width = width if respond_to?(:width)
|
33
|
+
self.height = height if respond_to?(:height)
|
34
|
+
self.content_type = fileinfo.mime_types.first unless self.class.attachment_options[:keep_content_type] || fileinfo.mime_types.empty?
|
35
|
+
self.file_extension = normalize_extension(fileinfo.extensions.first) unless self.class.attachment_options[:keep_file_extension] || fileinfo.extensions.empty?
|
36
|
+
rescue AttachmentSaverError
|
37
|
+
raise
|
38
|
+
rescue Exception => ex
|
39
|
+
raise GdkPixbufProcessorError, "#{ex.class}: #{ex.message}", ex.backtrace
|
40
|
+
end
|
41
|
+
|
42
|
+
def normalize_extension(extension)
|
43
|
+
case extension
|
44
|
+
when 'jpeg' then 'jpg'
|
45
|
+
else extension
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def process_image(original_image, derived_format_name, resize_format)
|
50
|
+
resize_format = Image.from_geometry_string(resize_format) if resize_format.is_a?(String)
|
51
|
+
|
52
|
+
result = original_image.send(*resize_format) do |derived_image|
|
53
|
+
return nil unless want_format?(derived_format_name, derived_image.width, derived_image.height)
|
54
|
+
|
55
|
+
# both original_filename and content_type must be defined for parents when using image processing
|
56
|
+
# - but apps can just define them using attr_accessor if they don't want them persisted to db
|
57
|
+
derived_content_type = content_type
|
58
|
+
derived_extension = derived_image.file_type_extension
|
59
|
+
|
60
|
+
# we leverage tempfiles as discussed in the uploaded_file method
|
61
|
+
temp = ExtendedTempfile.new("asgtemp", tempfile_directory, derived_extension)
|
62
|
+
temp.binmode
|
63
|
+
temp.close
|
64
|
+
derived_image.save(temp.path, original_image.format)
|
65
|
+
temp.open # we close & reopen so we see the file the processor wrote to, even if it created a new file rather than writing into our tempfile
|
66
|
+
|
67
|
+
{ :format_name => derived_format_name.to_s,
|
68
|
+
:width => derived_image.width,
|
69
|
+
:height => derived_image.height,
|
70
|
+
:content_type => derived_content_type,
|
71
|
+
:file_extension => derived_extension,
|
72
|
+
:uploaded_data => temp }
|
73
|
+
end
|
74
|
+
|
75
|
+
result
|
76
|
+
end
|
77
|
+
|
78
|
+
module Operations
|
79
|
+
include AttachmentSaver::Processors::Image::Operations
|
80
|
+
|
81
|
+
attr_accessor :format
|
82
|
+
|
83
|
+
def file_type_extension
|
84
|
+
case format
|
85
|
+
when 'jpeg' then 'jpg'
|
86
|
+
else format.downcase
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def resize_to(new_width, new_height, &block)
|
91
|
+
image = scale(new_width, new_height)
|
92
|
+
image.extend Operations
|
93
|
+
image.format = format
|
94
|
+
block.call(image)
|
95
|
+
end
|
96
|
+
|
97
|
+
def crop_to(new_width, new_height, &block) # crops to the center
|
98
|
+
image = Gdk::Pixbuf.new(self, (width - new_width)/2, (height - new_height)/2, new_width, new_height)
|
99
|
+
image.extend Operations
|
100
|
+
image.format = format
|
101
|
+
block.call(image)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/lib/processors/image.rb
CHANGED
@@ -132,7 +132,7 @@ module AttachmentSaver
|
|
132
132
|
module Operations
|
133
133
|
# if they choose to use this module to implement the resize operations, the processor
|
134
134
|
# module just needs to implement width, height, resize_to(new_width, new_height, &block),
|
135
|
-
# and crop_to(new_width, new_height, &block)
|
135
|
+
# and crop_to(new_width, new_height, &block). they also need with_image for process_attachment.
|
136
136
|
|
137
137
|
# squishes the image to the given width and height, without preserving the aspect ratio.
|
138
138
|
# yields this image itself if it is already the given size.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'image_size'
|
2
|
+
require 'misc/extended_tempfile'
|
3
|
+
require 'processors/image'
|
4
|
+
|
5
|
+
class ImageSizeProcessorError < ImageProcessorError; end
|
6
|
+
|
7
|
+
module AttachmentSaver
|
8
|
+
module Processors
|
9
|
+
module ImageSize
|
10
|
+
include Image
|
11
|
+
|
12
|
+
def examine_image
|
13
|
+
image_size = ::ImageSize.path(uploaded_file_path)
|
14
|
+
raise ImageSizeProcessorError, "Not an image" if image_size.format.nil?
|
15
|
+
|
16
|
+
self.width = image_size.width if respond_to?(:width)
|
17
|
+
self.height = image_size.height if respond_to?(:height)
|
18
|
+
self.file_extension = extension_for_image_format(image_size.format) unless self.class.attachment_options[:keep_file_extension]
|
19
|
+
self.content_type = mime_type_for_image_format(image_size.format) unless self.class.attachment_options[:keep_content_type]
|
20
|
+
rescue AttachmentSaverError
|
21
|
+
raise
|
22
|
+
rescue Exception => ex
|
23
|
+
raise ImageSizeProcessorError, "#{ex.class}: #{ex.message}", ex.backtrace
|
24
|
+
end
|
25
|
+
|
26
|
+
def extension_for_image_format(format)
|
27
|
+
case format
|
28
|
+
when :jpeg then 'jpg'
|
29
|
+
else format.to_s
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def mime_type_for_image_format(format)
|
34
|
+
"image/#{format}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def with_image(*args)
|
38
|
+
raise NotImplementedError, "the image_size processor can only be used to check image types and dimensions, not produce resized images"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/samples.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'fileutils'
|
3
|
+
require 'active_record'
|
4
|
+
require 'active_support/inflector'
|
5
|
+
require 'attachment_saver'
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test', 'image_operations'))
|
7
|
+
|
8
|
+
sample_dir = File.expand_path(File.join(File.dirname(__FILE__), 'samples'))
|
9
|
+
FileUtils.rm_r(sample_dir)
|
10
|
+
FileUtils.mkdir(sample_dir)
|
11
|
+
|
12
|
+
original_filenames = %w(test/fixtures/test.jpg test/fixtures/pd.png)
|
13
|
+
|
14
|
+
processors = %w(ImageScience RMagick MiniMagick GdkPixbuf).each.with_object({}) do |processor, results|
|
15
|
+
require "processors/#{processor.underscore}"
|
16
|
+
|
17
|
+
instance = Object.new
|
18
|
+
instance.class_eval { attr_accessor :content_type }
|
19
|
+
instance.extend(AttachmentSaver::InstanceMethods)
|
20
|
+
instance.extend(AttachmentSaver::Processors.const_get(processor))
|
21
|
+
|
22
|
+
results[processor] = instance
|
23
|
+
end
|
24
|
+
|
25
|
+
File.open("samples.html", "w") do |html|
|
26
|
+
html.write "<html><body>"
|
27
|
+
|
28
|
+
original_filenames.each do |original_filename|
|
29
|
+
html.write "<h1>#{original_filename}</h1><table border='2'><tr><th></th>"
|
30
|
+
processors.each do |processor, instance|
|
31
|
+
html.write "<th>#{processor}</th>"
|
32
|
+
end
|
33
|
+
html.write "</tr>"
|
34
|
+
|
35
|
+
ImageOperations.resize_operations.each do |derived_format_name, format_definition|
|
36
|
+
html.write "<tr><th>#{derived_format_name}<br/><pre>#{format_definition.inspect}</pre></th>"
|
37
|
+
processors.each do |processor, instance|
|
38
|
+
instance.with_image(original_filename) do |original_image|
|
39
|
+
result = instance.process_image(original_image, derived_format_name, format_definition)
|
40
|
+
|
41
|
+
filename = "#{sample_dir}/#{processor.underscore}-#{File.basename original_filename}-#{result[:format_name]}.#{result[:file_extension]}"
|
42
|
+
File.open(filename, "wb") do |f|
|
43
|
+
result[:uploaded_data].rewind
|
44
|
+
IO.copy_stream(result[:uploaded_data], f)
|
45
|
+
end
|
46
|
+
size = result[:uploaded_data].size < 1024 ? "#{result[:uploaded_data].size} bytes" : "%0.1fkb" % (result[:uploaded_data].size/1024.0)
|
47
|
+
html.write "<td><img src='#{filename}' width='#{result[:width]}' height='#{result[:height]}'><br/>#{size}</td>"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
html.write "</tr>"
|
51
|
+
end
|
52
|
+
|
53
|
+
html.write "</table>"
|
54
|
+
end
|
55
|
+
|
56
|
+
html.write "</html></body>"
|
57
|
+
end
|
Binary file
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'image_processor_test_common'))
|
2
|
+
require 'processors/gdk_pixbuf'
|
3
|
+
|
4
|
+
class GdkPixbufProcessorTest < ActiveSupport::TestCase
|
5
|
+
class GdkPixbufTestModel
|
6
|
+
include AttachmentSaver::InstanceMethods
|
7
|
+
include AttachmentSaver::Processors::GdkPixbuf
|
8
|
+
include ImageProcessorTestModel
|
9
|
+
end
|
10
|
+
|
11
|
+
def processor_model
|
12
|
+
GdkPixbufTestModel
|
13
|
+
end
|
14
|
+
|
15
|
+
def processor_exception
|
16
|
+
GdkPixbufProcessorError
|
17
|
+
end
|
18
|
+
|
19
|
+
include ImageProcessorTests
|
20
|
+
end
|
data/test/image_operations.rb
CHANGED
@@ -40,7 +40,8 @@ class ImageOperations
|
|
40
40
|
:scaletocover2 => [:scale_to_cover, 720, 900],
|
41
41
|
|
42
42
|
:coverandcrop1 => [:cover_and_crop, 200, 300],
|
43
|
-
:coverandcrop2 => [:cover_and_crop,
|
43
|
+
:coverandcrop2 => [:cover_and_crop, 300, 200],
|
44
|
+
:coverandcrop3 => [:cover_and_crop, 720, 900],
|
44
45
|
}
|
45
46
|
end
|
46
47
|
|
@@ -75,7 +76,8 @@ class ImageOperations
|
|
75
76
|
:scaletocover2 => [720, 720*600/448],
|
76
77
|
|
77
78
|
:coverandcrop1 => [200, 300],
|
78
|
-
:coverandcrop2 => [
|
79
|
+
:coverandcrop2 => [300, 200],
|
80
|
+
:coverandcrop3 => [720, 900],
|
79
81
|
}
|
80
82
|
end
|
81
83
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'image_processor_test_common'))
|
2
|
+
require 'processors/image_size'
|
3
|
+
|
4
|
+
class ImageSizeProcessorTest < ActiveSupport::TestCase
|
5
|
+
class ImageSizeTestModel
|
6
|
+
include AttachmentSaver::InstanceMethods
|
7
|
+
include AttachmentSaver::Processors::ImageSize
|
8
|
+
include ImageProcessorTestModel
|
9
|
+
end
|
10
|
+
|
11
|
+
def processor_model
|
12
|
+
ImageSizeTestModel
|
13
|
+
end
|
14
|
+
|
15
|
+
def processor_exception
|
16
|
+
ImageSizeProcessorError
|
17
|
+
end
|
18
|
+
|
19
|
+
include ImageProcessorTests
|
20
|
+
|
21
|
+
def processes_images?
|
22
|
+
false
|
23
|
+
end
|
24
|
+
end
|
data/test_all.sh
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attachment_saver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Bryant
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: gdk_pixbuf2
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
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
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: sqlite3
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -166,25 +180,31 @@ files:
|
|
166
180
|
- lib/misc/extended_tempfile.rb
|
167
181
|
- lib/misc/image_science_extensions.rb
|
168
182
|
- lib/misc/mini_magick_extensions.rb
|
183
|
+
- lib/processors/gdk_pixbuf.rb
|
169
184
|
- lib/processors/image.rb
|
170
185
|
- lib/processors/image_science.rb
|
186
|
+
- lib/processors/image_size.rb
|
171
187
|
- lib/processors/mini_magick.rb
|
172
188
|
- lib/processors/r_magick.rb
|
189
|
+
- samples.rb
|
173
190
|
- test/attachment_saver_test.rb
|
174
191
|
- test/database.yml
|
175
192
|
- test/file_system_datastore_test.rb
|
176
193
|
- test/fixtures/broken.jpg
|
177
194
|
- test/fixtures/emptyextension.
|
178
195
|
- test/fixtures/noextension
|
196
|
+
- test/fixtures/pd.png
|
179
197
|
- test/fixtures/ssrf.png
|
180
198
|
- test/fixtures/test.jpg
|
181
199
|
- test/fixtures/test.js
|
182
200
|
- test/fixtures/wrongextension.png
|
201
|
+
- test/gdk_pixbuf_processor_test.rb
|
183
202
|
- test/image_fixtures.rb
|
184
203
|
- test/image_operations.rb
|
185
204
|
- test/image_processor_test.rb
|
186
205
|
- test/image_processor_test_common.rb
|
187
206
|
- test/image_science_processor_test.rb
|
207
|
+
- test/image_size_processor_test.rb
|
188
208
|
- test/in_column_datastore_test.rb
|
189
209
|
- test/mini_magick_processor_test.rb
|
190
210
|
- test/model_test.rb
|
@@ -192,6 +212,7 @@ files:
|
|
192
212
|
- test/rmagick_processor_test.rb
|
193
213
|
- test/schema.rb
|
194
214
|
- test/test_helper.rb
|
215
|
+
- test_all.sh
|
195
216
|
homepage: http://github.com/willbryant/attachment_saver
|
196
217
|
licenses:
|
197
218
|
- MIT
|
@@ -223,15 +244,18 @@ test_files:
|
|
223
244
|
- test/fixtures/broken.jpg
|
224
245
|
- test/fixtures/emptyextension.
|
225
246
|
- test/fixtures/noextension
|
247
|
+
- test/fixtures/pd.png
|
226
248
|
- test/fixtures/ssrf.png
|
227
249
|
- test/fixtures/test.jpg
|
228
250
|
- test/fixtures/test.js
|
229
251
|
- test/fixtures/wrongextension.png
|
252
|
+
- test/gdk_pixbuf_processor_test.rb
|
230
253
|
- test/image_fixtures.rb
|
231
254
|
- test/image_operations.rb
|
232
255
|
- test/image_processor_test.rb
|
233
256
|
- test/image_processor_test_common.rb
|
234
257
|
- test/image_science_processor_test.rb
|
258
|
+
- test/image_size_processor_test.rb
|
235
259
|
- test/in_column_datastore_test.rb
|
236
260
|
- test/mini_magick_processor_test.rb
|
237
261
|
- test/model_test.rb
|