module Papercrop::ModelExtension::ClassMethods
Public Instance Methods
crop_attached_file(attachment_name, opts = {})
click to toggle source
Initializes attachment cropping in your model
crop_attached_file :avatar
You can also define an initial aspect ratio for the crop and preview box through opts
crop_attached_file :avatar, :aspect => "4:3"
Or unlock it
crop_attached_file :avatar, :aspect => false
@param attachment_name [Symbol] Name of the desired attachment to crop @param opts [Hash] @option opts [Range, String, FlaseClass] :aspect
# File lib/papercrop/model_extension.rb, line 21 def crop_attached_file(attachment_name, opts = {}) opts = opts.dup [:crop_x, :crop_y, :crop_w, :crop_h, :original_w, :original_h, :box_w, :aspect, :cropped_geometries].each do |a| attr_accessor :"#{attachment_name}_#{a}" end aspect = normalize_aspect opts[:aspect] send :define_method, :"#{attachment_name}_aspect" do aspect.first.to_f / aspect.last.to_f if aspect end if respond_to? :attachment_definitions # for Paperclip <= 3.4 definitions = attachment_definitions else # for Paperclip >= 3.5 definitions = Paperclip::Tasks::Attachments.instance.definitions_for(self) end processors = definitions[attachment_name][:processors] ||= [] unless processors.include? :papercrop processors << :papercrop end after_update :"reprocess_to_crop_#{attachment_name}_attachment" end
normalize_aspect(aspect)
click to toggle source
Returns a valid and normalized value for aspect ratio It will return 1.. if aspect is nil or a invalid string @param aspect [Range, String, FalseClass]
@return [Range]
# File lib/papercrop/model_extension.rb, line 56 def normalize_aspect(aspect) if aspect.kind_of?(String) && aspect =~ Papercrop::RegExp::ASPECT Range.new *aspect.split(':').map(&:to_i) elsif aspect.kind_of?(Range) return aspect.first.to_i..aspect.last.to_i elsif aspect == false return aspect else 1..1 end end