lib/cloudinary/carrier_wave/process.rb in cloudinary-1.0.78 vs lib/cloudinary/carrier_wave/process.rb in cloudinary-1.0.79

- old
+ new

@@ -1,121 +1,129 @@ module Cloudinary::CarrierWave module ClassMethods def make_private self.storage_type = :private end - + def process_all_versions(*args) @all_versions ||= Class.new(self) @all_versions.process *args end - + def eager process :eager => true end - + def convert(format) process :convert => format end - + def resize_to_limit(width, height) process :resize_to_limit => [width, height] end - + def resize_to_fit(width, height) process :resize_to_fit => [width, height] end - + def resize_to_fill(width, height, gravity="Center") process :resize_to_fill => [width, height, gravity] end - + def resize_and_pad(width, height, background=:transparent, gravity="Center") process :resize_and_pad => [width, height, background, gravity] - end - + end + def scale(width, height) process :scale => [width, height] - end - + end + def crop(width, height, gravity="Center") process :crop => [width, height, gravity] end - + def cloudinary_transformation(options) process :cloudinary_transformation => options end - + def tags(*tags) process :tags=>tags end end def set_or_yell(hash, attr, value) raise CloudinaryException, "conflicting transformation on #{attr} #{value}!=#{hash[attr]}" if hash[attr] && hash[attr] != value hash[attr] = value end - + def transformation return @transformation if @transformation @transformation = {} - self.all_processors.each do - |name, args| + self.all_processors.each do |name, args, condition| + + if(condition) + if condition.respond_to?(:call) + next unless condition.call(self, :args => args) + else + next unless self.send(condition) + end + end + case name when :convert # Do nothing. This is handled by format - when :resize_to_limit - set_or_yell(@transformation, :width, args[0]) + when :resize_to_limit + set_or_yell(@transformation, :width, args[0]) set_or_yell(@transformation, :height, args[1]) set_or_yell(@transformation, :crop, :limit) - when :resize_to_fit - set_or_yell(@transformation, :width, args[0]) + when :resize_to_fit + set_or_yell(@transformation, :width, args[0]) set_or_yell(@transformation, :height, args[1]) set_or_yell(@transformation, :crop, :fit) when :resize_to_fill - set_or_yell(@transformation, :width, args[0]) + set_or_yell(@transformation, :width, args[0]) set_or_yell(@transformation, :height, args[1]) set_or_yell(@transformation, :gravity, args[2].to_s.downcase) set_or_yell(@transformation, :crop, :fill) when :resize_and_pad - set_or_yell(@transformation, :width, args[0]) + set_or_yell(@transformation, :width, args[0]) set_or_yell(@transformation, :height, args[1]) set_or_yell(@transformation, :background, args[2].to_s.downcase) set_or_yell(@transformation, :gravity, args[3].to_s.downcase) set_or_yell(@transformation, :crop, :pad) - when :scale - set_or_yell(@transformation, :width, args[0]) + when :scale + set_or_yell(@transformation, :width, args[0]) set_or_yell(@transformation, :height, args[1]) set_or_yell(@transformation, :crop, :scale) when :crop set_or_yell(@transformation, :width, args[0]) set_or_yell(@transformation, :height, args[1]) set_or_yell(@transformation, :gravity, args[2].to_s.downcase) set_or_yell(@transformation, :crop, :crop) when :cloudinary_transformation args.each do - |attr, value| + |attr, value| set_or_yell(@transformation, attr, value) end else if args.blank? send(name).each do - |attr, value| + |attr, value| set_or_yell(@transformation, attr, value) end end end end - @transformation + @transformation end def all_versions_processors all_versions = self.class.instance_variable_get('@all_versions') - + all_versions ? all_versions.processors : [] end - def all_processors + def all_processors (self.is_main_uploader? ? [] : all_versions_processors) + self.class.processors end def eager @eager ||= self.all_processors.any?{|processor| processor[0] == :eager} @@ -124,25 +132,25 @@ def tags @tags ||= self.all_processors.select{|processor| processor[0] == :tags}.map(&:second).first raise CloudinaryException, "tags cannot be used in versions." if @tags.present? && self.version_name.present? @tags end - + def format format_processor = self.all_processors.find{|processor| processor[0] == :convert} - if format_processor + if format_processor # Explicit format is given - format = Array(format_processor[1]).first + format = Array(format_processor[1]).first elsif self.transformation.include?(:format) format = self.transformation[:format] - elsif self.version_name.present? + elsif self.version_name.present? # No local format. The reset should be handled by main uploader uploader = self.model.send(self.mounted_as) format = uploader.format else # Try to auto-detect format format = Cloudinary::PreloadedFile.split_format(original_filename || "").last - format ||= "png" # TODO Default format? + format ||= "png" # TODO Default format? end format = format.to_s.downcase Cloudinary::FORMAT_ALIASES[format] || format end end