Sha256: bb08a950f1c2150218266fededcf5234828ba242ce1a13b302f90881f5bdb95b

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

module PushType
  class Asset < ActiveRecord::Base

    include PushType::Trashable

    dragonfly_accessor :file

    belongs_to :uploader, class_name: 'PushType::User'

    validates :file, presence: true

    default_scope { order(created_at: :desc) }

    before_create :set_mime_type
    after_destroy :destroy_file!

    def kind
      return nil unless file_stored?
      case mime_type
        when /\Aaudio\/.*\z/ then :audio
        when /\Aimage\/.*\z/ then :image
        when /\Avideo\/.*\z/ then :video
        else :document
      end
    end

    [:audio, :image, :video].each do |k|
      define_method("#{k}?".to_sym) { kind == k }
    end

    def description_or_file_name
      description? ? description : file_name
    end

    def media(style = nil)
      if image? && !style.blank? && style.to_sym != :original
        size = PushType.config.media_styles[style.to_sym] || style
      end
      size ? file.thumb(size) : file
    end

    def preview_thumb_url(size = '300x300#')
      return nil unless file_stored?
      if image?
        media(size).url
      else
        "push_type/icon-file-#{ kind }.png"
      end
    end

    def as_json(options = nil)
      options = { only: [:id, :file_name, :file_size, :mime_type, :created_at], methods: [:new_record?, :image?, :description_or_file_name, :preview_thumb_url] } if options.empty?
      super(options)
    end

    private

    def set_mime_type
      self.file_ext   = file.ext
      self.mime_type  = file.mime_type
    end

    def destroy_file!
      self.file.destroy!
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
push_type_core-0.1.1 app/models/push_type/asset.rb