Sha256: 02f00a3c911520ac49592d2833d014f8df672174550c083531eceef61ae2511c

Contents?: true

Size: 1.06 KB

Versions: 4

Compression:

Stored size: 1.06 KB

Contents

# encoding: utf-8

require 'dm-core'

module CarrierWave
  module DataMapper

    include CarrierWave::Mount

    ##
    # See +CarrierWave::Mount#mount_uploader+ for documentation
    #
    def mount_uploader(column, uploader, options={}, &block)
      super

      alias_method :read_uploader, :attribute_get
      alias_method :write_uploader, :attribute_set
      after :save, "store_#{column}!".to_sym
      pre_hook = ::DataMapper.const_defined?(:Validate) ? :valid? : :save
      before pre_hook, "write_#{column}_identifier".to_sym
      after :destroy, "remove_#{column}!".to_sym

      # FIXME: Hack to work around Datamapper not triggering callbacks
      # for objects that are not dirty. By explicitly calling
      # attribute_set we are marking the record as dirty.
      class_eval <<-RUBY
        def remove_#{column}=(value)
          _mounter(:#{column}).remove = value
          attribute_set(:#{column}, '') if _mounter(:#{column}).remove?
        end
      RUBY
    end

  end # DataMapper
end # CarrierWave

DataMapper::Model.send(:include, CarrierWave::DataMapper)

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
carrierwave-0.5.4 lib/carrierwave/orm/datamapper.rb
carrierwave-datamapper-0.1.0 lib/carrierwave/datamapper.rb
carrierwave-0.5.3 lib/carrierwave/orm/datamapper.rb
carrierwave-0.5.2 lib/carrierwave/orm/datamapper.rb