diff --git a/.travis.yml b/.travis.yml index 0d7ba0e5..d57b2a77 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ language: ruby rvm: - - 1.9.3 \ No newline at end of file + - 1.9.3 + - 2.4.1 diff --git a/lib/technoweenie/attachment_fu/backends/file_system_backend.rb b/lib/technoweenie/attachment_fu/backends/file_system_backend.rb index 985fae1c..7d035a65 100644 --- a/lib/technoweenie/attachment_fu/backends/file_system_backend.rb +++ b/lib/technoweenie/attachment_fu/backends/file_system_backend.rb @@ -96,9 +96,9 @@ def destroy_file # Renames the given file before saving def rename_file return unless @old_filename && @old_filename != full_filename - if save_attachment? && File.exists?(@old_filename) + if save_attachment? && File.exist?(@old_filename) FileUtils.rm @old_filename - elsif File.exists?(@old_filename) + elsif File.exist?(@old_filename) FileUtils.mv @old_filename, full_filename end @old_filename = nil diff --git a/lib/technoweenie/attachment_fu/processors/core_image_processor.rb b/lib/technoweenie/attachment_fu/processors/core_image_processor.rb index d78e8d08..1479482a 100644 --- a/lib/technoweenie/attachment_fu/processors/core_image_processor.rb +++ b/lib/technoweenie/attachment_fu/processors/core_image_processor.rb @@ -8,13 +8,13 @@ def self.included(base) base.send :extend, ClassMethods base.alias_method_chain :process_attachment, :processing end - + module ClassMethods def with_image(file, &block) block.call OSX::CIImage.from(file) end end - + protected def process_attachment_with_processing return unless process_attachment_without_processing @@ -30,8 +30,8 @@ def process_attachment_with_processing def resize_image(img, size) processor = ::RedArtisan::CoreImage::Processor.new(img) size = size.first if size.is_a?(Array) && size.length == 1 - if size.is_a?(Fixnum) || (size.is_a?(Array) && size.first.is_a?(Fixnum)) - if size.is_a?(Fixnum) + if size.is_a?(Integer) || (size.is_a?(Array) && size.first.is_a?(Integer)) + if size.is_a?(Integer) processor.fit(size) else processor.resize(size[0], size[1]) @@ -40,7 +40,7 @@ def resize_image(img, size) new_size = [img.extent.size.width, img.extent.size.height] / size.to_s processor.resize(new_size[0], new_size[1]) end - + processor.render do |result| self.width = result.extent.size.width if respond_to?(:width) self.height = result.extent.size.height if respond_to?(:height) @@ -52,12 +52,12 @@ def resize_image(img, size) quality = get_jpeg_quality properties = { OSX::NSImageCompressionFactor => quality / 100.0 } if quality result.save(self.temp_path, OSX::NSJPEGFileType, properties) - # + # # puts "#{self.temp_path} @ #{quality.inspect} -> #{%x(identify -format '%Q' "#{self.temp_path}")}" - # + # self.size = File.size(self.temp_path) end - end + end end end end diff --git a/lib/technoweenie/attachment_fu/processors/gd2_processor.rb b/lib/technoweenie/attachment_fu/processors/gd2_processor.rb index ea007133..2730b872 100644 --- a/lib/technoweenie/attachment_fu/processors/gd2_processor.rb +++ b/lib/technoweenie/attachment_fu/processors/gd2_processor.rb @@ -8,7 +8,7 @@ def self.included(base) base.send :extend, ClassMethods base.alias_method_chain :process_attachment, :processing end - + module ClassMethods # Yields a block containing a GD2 Image for the given binary data. def with_image(file, &block) @@ -31,14 +31,14 @@ def process_attachment_with_processing # Performs the actual resizing operation for a thumbnail def resize_image(img, size) size = size.first if size.is_a?(Array) && size.length == 1 - if size.is_a?(Fixnum) || (size.is_a?(Array) && size.first.is_a?(Fixnum)) - if size.is_a?(Fixnum) - # Borrowed from image science's #thumbnail method and adapted + if size.is_a?(Integer) || (size.is_a?(Array) && size.first.is_a?(Integer)) + if size.is_a?(Integer) + # Borrowed from image science's #thumbnail method and adapted # for this. scale = size.to_f / (img.width > img.height ? img.width.to_f : img.height.to_f) img.resize!((img.width * scale).round(1), (img.height * scale).round(1), false) else - img.resize!(size.first, size.last, false) + img.resize!(size.first, size.last, false) end else w, h = [img.width, img.height] / size.to_s @@ -56,4 +56,4 @@ def resize_image(img, size) end end end -end \ No newline at end of file +end diff --git a/lib/technoweenie/attachment_fu/processors/image_science_processor.rb b/lib/technoweenie/attachment_fu/processors/image_science_processor.rb index 44da9dd0..92ab4627 100644 --- a/lib/technoweenie/attachment_fu/processors/image_science_processor.rb +++ b/lib/technoweenie/attachment_fu/processors/image_science_processor.rb @@ -52,8 +52,8 @@ def resize_image(img, size) end size = size.first if size.is_a?(Array) && size.length == 1 - if size.is_a?(Fixnum) || (size.is_a?(Array) && size.first.is_a?(Fixnum)) - if size.is_a?(Fixnum) + if size.is_a?(Integer) || (size.is_a?(Array) && size.first.is_a?(Integer)) + if size.is_a?(Integer) img.thumbnail(size, &grab_dimensions) else img.resize(size[0], size[1], &grab_dimensions) @@ -77,4 +77,4 @@ def resize_image(img, size) end end end -end \ No newline at end of file +end diff --git a/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb b/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb index 2a37b3ad..67259c7c 100644 --- a/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb +++ b/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb @@ -7,7 +7,7 @@ def self.included(base) base.send :extend, ClassMethods base.alias_method_chain :process_attachment, :processing end - + module ClassMethods # Yields a block containing an MiniMagick Image for the given binary data. def with_image(file, &block) @@ -23,7 +23,7 @@ def with_image(file, &block) !binary_data.nil? end end - + protected def process_attachment_with_processing return unless process_attachment_without_processing @@ -34,7 +34,7 @@ def process_attachment_with_processing callback_with_args :after_resize, img end if image? end - + # Performs the actual resizing operation for a thumbnail def resize_image(img, size) size = size.first if size.is_a?(Array) && size.length == 1 @@ -46,9 +46,9 @@ def resize_image(img, size) if format == 'GIF' img.format('PNG') end - - if size.is_a?(Fixnum) || (size.is_a?(Array) && size.first.is_a?(Fixnum)) - if size.is_a?(Fixnum) + + if size.is_a?(Integer) || (size.is_a?(Array) && size.first.is_a?(Integer)) + if size.is_a?(Integer) size = [size, size] commands.resize(size.join('x')) else @@ -64,16 +64,16 @@ def resize_image(img, size) # crop thumbnail, the smart way elsif size.is_a?(String) and size =~ /c$/ size = size.gsub(/c/, '') - + # calculate sizes and aspect ratio thumb_width, thumb_height = size.split("x") thumb_width = thumb_width.to_f thumb_height = thumb_height.to_f - + thumb_aspect = thumb_width.to_f / thumb_height.to_f image_width, image_height = img[:width].to_f, img[:height].to_f image_aspect = image_width / image_height - + # only crop if image is not smaller in both dimensions unless image_width < thumb_width and image_height < thumb_height command = calculate_offset(image_width,image_height,image_aspect,thumb_width,thumb_height,thumb_aspect) @@ -83,7 +83,7 @@ def resize_image(img, size) end # don not resize if image is not as height or width then thumbnail - if image_width < thumb_width or image_height < thumb_height + if image_width < thumb_width or image_height < thumb_height commands.background('#ffffff') commands.gravity('center') commands.extent(size) @@ -120,7 +120,7 @@ def calculate_offset(image_width,image_height,image_aspect,thumb_width,thumb_hei command = "#{thumb_width}x#{image_height}+#{offset}+0" # normal thumbnail generation - # calculate height and offset y, width is fixed + # calculate height and offset y, width is fixed elsif (image_aspect <= thumb_aspect or image_width < thumb_width) and image_height > thumb_height height = image_width / thumb_aspect offset = (image_height / 2) - (height / 2) @@ -139,4 +139,4 @@ def calculate_offset(image_width,image_height,image_aspect,thumb_width,thumb_hei end end end -end \ No newline at end of file +end diff --git a/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb b/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb index faa71dd9..91c5cfdc 100644 --- a/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb +++ b/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb @@ -47,9 +47,9 @@ def process_attachment_with_processing # Performs the actual resizing operation for a thumbnail def resize_image(img, size) - size = size.first if size.is_a?(Array) && size.length == 1 && !size.first.is_a?(Fixnum) - if size.is_a?(Fixnum) || (size.is_a?(Array) && size.first.is_a?(Fixnum)) - size = [size, size] if size.is_a?(Fixnum) + size = size.first if size.is_a?(Array) && size.length == 1 && !size.first.is_a?(Integer) + if size.is_a?(Integer) || (size.is_a?(Array) && size.first.is_a?(Integer)) + size = [size, size] if size.is_a?(Integer) img.thumbnail!(*size) elsif size.is_a?(String) && size =~ /^c.*$/ # Image cropping - example geometry string: c75x75 dimensions = size[1..size.size].split("x") diff --git a/test/backends/file_system_test.rb b/test/backends/file_system_test.rb index 88964777..5518e5f7 100644 --- a/test/backends/file_system_test.rb +++ b/test/backends/file_system_test.rb @@ -39,7 +39,7 @@ def test_should_store_file_attachment_in_filesystem(klass = FileAttachment) assert_created do attachment = upload_file :filename => '/files/rails.png' assert_valid attachment - assert File.exists?(attachment.full_filename), "#{attachment.full_filename} does not exist" + assert File.exist?(attachment.full_filename), "#{attachment.full_filename} does not exist" end attachment end @@ -55,8 +55,8 @@ def test_should_delete_old_file_when_updating(klass = FileAttachment) attachment.filename = 'rails2.png' attachment.temp_paths.unshift File.join(FIXTURE_PATH, file) attachment.save! - assert File.exists?(attachment.full_filename), "#{attachment.full_filename} does not exist" - assert !File.exists?(old_filename), "#{old_filename} still exists" + assert File.exist?(attachment.full_filename), "#{attachment.full_filename} does not exist" + assert !File.exist?(old_filename), "#{old_filename} still exists" end end end @@ -70,8 +70,8 @@ def test_should_delete_old_file_when_renaming(klass = FileAttachment) assert_not_created do attachment.filename = 'rails2.png' attachment.save - assert File.exists?(attachment.full_filename), "#{attachment.full_filename} does not exist" - assert !File.exists?(old_filename), "#{old_filename} still exists" + assert File.exist?(attachment.full_filename), "#{attachment.full_filename} does not exist" + assert !File.exist?(old_filename), "#{old_filename} still exists" assert !attachment.reload.size.zero? assert_equal 'rails2.png', attachment.filename end diff --git a/test/processors/rmagick_test.rb b/test/processors/rmagick_test.rb index 5d85076a..141a5e1e 100644 --- a/test/processors/rmagick_test.rb +++ b/test/processors/rmagick_test.rb @@ -16,7 +16,7 @@ def test_should_create_image_from_uploaded_file assert_equal '50x64', attachment.image_size end end - + def test_should_create_image_from_uploaded_file_with_custom_content_type assert_created do attachment = upload_file :content_type => 'foo/bar', :filename => '/files/rails.png' @@ -30,10 +30,10 @@ def test_should_create_image_from_uploaded_file_with_custom_content_type assert_equal [], attachment.thumbnails end end - + def test_should_create_thumbnail attachment = upload_file :filename => '/files/rails.png' - + assert_created do basename, ext = attachment.filename.split '.' thumbnail = attachment.create_or_update_thumbnail(attachment.create_temp_file, 'thumb', 50, 50) @@ -47,10 +47,10 @@ def test_should_create_thumbnail assert_equal "#{basename}_thumb.#{ext}", thumbnail.filename end end - + def test_should_create_thumbnail_with_geometry_strings attachment = upload_file :filename => '/files/rails.png' - + assert_created do basename, ext = attachment.filename.split '.' { 'x50' => [39, 50], '25x25!' => [25, 25] }.each do |geo, (w, h)| @@ -65,7 +65,7 @@ def test_should_create_thumbnail_with_geometry_strings end end end - + def test_should_resize_image(klass = ImageAttachment) attachment_model klass assert_equal [50, 50], attachment_model.attachment_options[:resize_to] @@ -78,9 +78,9 @@ def test_should_resize_image(klass = ImageAttachment) assert_equal 50, attachment.width assert_equal 50, attachment.height end - + test_against_subclass :test_should_resize_image, ImageAttachment - + def test_should_resize_image_with_geometry(klass = ImageOrPdfAttachment) attachment_model klass assert_equal 'x50', attachment_model.attachment_options[:resize_to] @@ -93,26 +93,26 @@ def test_should_resize_image_with_geometry(klass = ImageOrPdfAttachment) assert_equal 39, attachment.width assert_equal 50, attachment.height end - + test_against_subclass :test_should_resize_image_with_geometry, ImageOrPdfAttachment - + def test_should_give_correct_thumbnail_filenames(klass = ImageWithThumbsFileAttachment) attachment_model klass assert_created 3 do attachment = upload_file :filename => '/files/rails.png' thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ } geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ } - + [attachment, thumb, geo].each { |record| assert_valid record } - + assert_match /rails\.png$/, attachment.full_filename assert_match /rails_geometry\.png$/, attachment.full_filename(:geometry) assert_match /rails_thumb\.png$/, attachment.full_filename(:thumb) end end - + test_against_subclass :test_should_give_correct_thumbnail_filenames, ImageWithThumbsFileAttachment - + def test_should_automatically_create_thumbnails(klass = ImageWithThumbsAttachment) attachment_model klass assert_created 3 do @@ -124,7 +124,7 @@ def test_should_automatically_create_thumbnails(klass = ImageWithThumbsAttachmen assert_equal 55, attachment.height assert_equal 2, attachment.thumbnails.length # assert_equal 1.0, attachment.aspect_ratio - + thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ } assert !thumb.new_record?, thumb.errors.full_messages.join("\n") assert !thumb.size.zero? @@ -132,7 +132,7 @@ def test_should_automatically_create_thumbnails(klass = ImageWithThumbsAttachmen assert_equal 50, thumb.width assert_equal 50, thumb.height # assert_equal 1.0, thumb.aspect_ratio - + geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ } assert !geo.new_record?, geo.errors.full_messages.join("\n") assert !geo.size.zero? @@ -142,12 +142,12 @@ def test_should_automatically_create_thumbnails(klass = ImageWithThumbsAttachmen # assert_equal 1.0, geo.aspect_ratio end end - + test_against_subclass :test_should_automatically_create_thumbnails, ImageWithThumbsAttachment - + # same as above method, but test it on a file model test_against_class :test_should_automatically_create_thumbnails, ImageWithThumbsFileAttachment - + def test_should_use_thumbnail_subclass(klass = ImageWithThumbsClassFileAttachment) attachment_model klass attachment = nil @@ -165,16 +165,16 @@ def test_should_use_thumbnail_subclass(klass = ImageWithThumbsClassFileAttachmen "#full_filename does not use thumbnail class' path." assert_equal attachment.destroy, attachment end - + test_against_subclass :test_should_use_thumbnail_subclass, ImageWithThumbsClassFileAttachment - + def test_should_remove_old_thumbnail_files_when_updating(klass = ImageWithThumbsFileAttachment) attachment_model klass attachment = nil assert_created 3 do attachment = upload_file :filename => '/files/rails.png' end - + old_filenames = [attachment.full_filename] + attachment.thumbnails.collect(&:full_filename) use_temp_file 'files/rails.jpg' do |file| @@ -183,31 +183,31 @@ def test_should_remove_old_thumbnail_files_when_updating(klass = ImageWithThumbs end new_filenames = [attachment.reload.full_filename] + attachment.thumbnails.collect { |t| t.reload.full_filename } - new_filenames.each { |f| assert File.exists?(f), "#{f} does not exist" } - old_filenames.each { |f| assert !File.exists?(f), "#{f} still exists" } + new_filenames.each { |f| assert File.exist?(f), "#{f} does not exist" } + old_filenames.each { |f| assert !File.exist?(f), "#{f} still exists" } end - + test_against_subclass :test_should_remove_old_thumbnail_files_when_updating, ImageWithThumbsFileAttachment - + def test_should_delete_file_when_in_file_system_when_attachment_record_destroyed(klass = ImageWithThumbsFileAttachment) attachment_model klass attachment = upload_file :filename => '/files/rails.png' filenames = [attachment.full_filename] + attachment.thumbnails.collect(&:full_filename) - filenames.each { |f| assert File.exists?(f), "#{f} never existed to delete on destroy" } + filenames.each { |f| assert File.exist?(f), "#{f} never existed to delete on destroy" } attachment.destroy - filenames.each { |f| assert !File.exists?(f), "#{f} still exists" } + filenames.each { |f| assert !File.exist?(f), "#{f} still exists" } end - + test_against_subclass :test_should_delete_file_when_in_file_system_when_attachment_record_destroyed, ImageWithThumbsFileAttachment - + def test_should_have_full_filename_method(klass = FileAttachment) attachment_model klass attachment = upload_file :filename => '/files/rails.png' assert_respond_to attachment, :full_filename end - + test_against_subclass :test_should_have_full_filename_method, FileAttachment - + def test_should_overwrite_old_thumbnail_records_when_updating(klass = ImageWithThumbsAttachment) attachment_model klass attachment = nil @@ -217,7 +217,7 @@ def test_should_overwrite_old_thumbnail_records_when_updating(klass = ImageWithT assert_not_created do # no new db_file records use_temp_file "files/rails.png" do |file| attachment.filename = 'rails2.png' - # The above test (#test_should_have_full_filename_method) to pass before be can set the temp_path below -- + # The above test (#test_should_have_full_filename_method) to pass before be can set the temp_path below -- # #temp_path calls #full_filename, which is not getting mixed into the attachment. Maybe we don't need to # set temp_path at all? # @@ -226,9 +226,9 @@ def test_should_overwrite_old_thumbnail_records_when_updating(klass = ImageWithT end end end - + test_against_subclass :test_should_overwrite_old_thumbnail_records_when_updating, ImageWithThumbsAttachment - + def test_should_overwrite_old_thumbnail_records_when_renaming(klass = ImageWithThumbsAttachment) attachment_model klass attachment = nil @@ -242,7 +242,7 @@ def test_should_overwrite_old_thumbnail_records_when_renaming(klass = ImageWithT assert_equal 'rails2.png', attachment.filename end end - + test_against_subclass :test_should_overwrite_old_thumbnail_records_when_renaming, ImageWithThumbsAttachment def test_should_handle_jpeg_quality diff --git a/vendor/red_artisan/core_image/processor.rb b/vendor/red_artisan/core_image/processor.rb index 965e70cc..750f3ffa 100644 --- a/vendor/red_artisan/core_image/processor.rb +++ b/vendor/red_artisan/core_image/processor.rb @@ -58,7 +58,7 @@ module RedArtisan module CoreImage class Processor - + def initialize(original) if original.respond_to? :to_str @original = OSX::CIImage.from(original.to_str) @@ -66,23 +66,23 @@ def initialize(original) @original = original end end - + def render(&block) raise "unprocessed image: #{@original}" unless @target block.call @target end - + include Filters::Scale, Filters::Color, Filters::Watermark, Filters::Quality, Filters::Perspective, Filters::Effects - + private - + def create_core_image_context(width, height) output = OSX::NSBitmapImageRep.alloc.initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bytesPerRow_bitsPerPixel(nil, width, height, 8, 4, true, false, OSX::NSDeviceRGBColorSpace, 0, 0) context = OSX::NSGraphicsContext.graphicsContextWithBitmapImageRep(output) OSX::NSGraphicsContext.setCurrentContext(context) @ci_context = context.CIContext end - + def vector(x, y, w, h) OSX::CIVector.vectorWithX_Y_Z_W(x, y, w, h) end @@ -93,29 +93,29 @@ def vector(x, y, w, h) module OSX class CIImage include OCObjWrapper - + def method_missing_with_filter_processing(sym, *args, &block) f = OSX::CIFilter.filterWithName("CI#{sym.to_s.camelize}") return method_missing_without_filter_processing(sym, *args, &block) unless f - + f.setDefaults if f.respond_to? :setDefaults f.setValue_forKey(self, 'inputImage') options = args.last.is_a?(Hash) ? args.last : {} options.each { |k, v| f.setValue_forKey(v, k.to_s) } - + block.call f.valueForKey('outputImage') end - + alias_method_chain :method_missing, :filter_processing - + def save(target, format = OSX::NSJPEGFileType, properties = nil) bitmapRep = OSX::NSBitmapImageRep.alloc.initWithCIImage(self) blob = bitmapRep.representationUsingType_properties(format, properties) blob.writeToFile_atomically(target, false) end - + def self.from(filepath) - raise Errno::ENOENT, "No such file or directory - #{filepath}" unless File.exists?(filepath) + raise Errno::ENOENT, "No such file or directory - #{filepath}" unless File.exist?(filepath) OSX::CIImage.imageWithContentsOfURL(OSX::NSURL.fileURLWithPath(filepath)) end end