Sha256: 4d048b642d5c151c598a1bb8788f23088b91fca20d8da63bc9a3bb7ea8133d68

Contents?: true

Size: 1.78 KB

Versions: 3

Compression:

Stored size: 1.78 KB

Contents

#encoding: utf-8
require 'shellwords'

module Coalla
  class ImageUploader < CarrierWave::Uploader::Base
    include CarrierWave::RMagick

    storage :file

    def store_dir
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end

    # You can call this method in your model
    # For example
    # before_save if: :image_changed? do
    #   image.set_image_properties
    # end
    def set_image_properties
      return if !model || !file

      model.send(setter(:file_name), file.filename) if model.respond_to?(setter(:file_name))
      model.send(setter(:size), file.size) if model.respond_to?(setter(:size))
      model.send(setter(:content_type), file.content_type) if model.respond_to?(setter(:content_type))
      if model.respond_to?(setter(:width)) && model.respond_to?(setter(:height))
        w, h = `identify -format "%wx %h" #{file.path.shellescape}`.split(/x/).map { |dim| dim.to_i }
        model.send(setter(:width), w)
        model.send(setter(:height), h)
      end
    end

    # You can call this method with process in your uploader
    def watermark
      return if !model || !model.respond_to?(getter(:watermarked?)) || !model.send(getter(:watermarked?))

      manipulate! do |img|
        logo = Magick::Image.read(Rails.root.join('app/assets/images/watermark.png')).first
        img.composite(logo, Magick::SouthEastGravity, 0, 0, Magick::OverCompositeOp)
      end
    end

    private

    def setter(name)
      opt = model.class.uploader_options[mounted_as] || {}
      if opt[:prefixed]
        "#{mounted_as}_#{name}="
      else
        "#{name}="
      end
    end

    def getter(name)
      opt = model.class.uploader_options[mounted_as] || {}
      if opt[:prefixed]
        "#{mounted_as}_#{name}"
      else
        "#{name}"
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
coalla-cms-0.7.0.0 lib/coalla/uploaders/image_uploader.rb
coalla-cms-0.6.1.1 lib/coalla/uploaders/image_uploader.rb
coalla-cms-0.6.0.9 lib/coalla/uploaders/image_uploader.rb