Module: CarrierWaveDirect::Mount

Included in:
ActiveRecord
Defined in:
lib/carrierwave_direct/mount.rb

Instance Method Summary collapse

Instance Method Details

#mount_uploader(column, uploader = nil, options = {}, &block) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/carrierwave_direct/mount.rb', line 6

def mount_uploader(column, uploader=nil, options={}, &block)
  super

  # Don't go further unless the class included CarrierWaveDirect::Uploader
  return unless uploader.ancestors.include?(CarrierWaveDirect::Uploader)

  unless uploader.instance_methods.include?(column)
    uploader.class_eval <<-RUBY, __FILE__, __LINE__+1
       def #{column}; self; end
    RUBY
  end

  self.instance_eval <<-RUBY, __FILE__, __LINE__+1
    attr_accessor :remote_#{column}_net_url
  RUBY

  mod = Module.new
  include mod
  mod.class_eval <<-RUBY, __FILE__, __LINE__+1

    def #{column}_key
      send(:#{column}).key
    end

    def #{column}_key=(k)
      send(:#{column}).key = k
    end

    def has_#{column}_upload?
      send(:#{column}).has_key?
    end

    def has_remote_#{column}_net_url?
      send(:remote_#{column}_net_url).present?
    end
  RUBY
end