Module: Dragonfly::ActiveModelExtensions::ClassMethods

Defined in:
lib/dragonfly/active_model_extensions/class_methods.rb

Instance Method Summary collapse

Instance Method Details

#dragonfly_apps_for_attributesObject



36
37
38
39
40
41
# File 'lib/dragonfly/active_model_extensions/class_methods.rb', line 36

def dragonfly_apps_for_attributes
  @dragonfly_apps_for_attributes ||= begin
    parent_class = ancestors.select{|a| a.is_a?(Class) }[1]
    parent_class.respond_to?(:dragonfly_apps_for_attributes) ? parent_class.dragonfly_apps_for_attributes.dup : {}
  end
end

#register_dragonfly_app(macro_name, app) ⇒ Object



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
# File 'lib/dragonfly/active_model_extensions/class_methods.rb', line 7

def register_dragonfly_app(macro_name, app)
  (class << self; self; end).class_eval do
    
    # Defines e.g. 'image_accessor' for any activerecord class body
    define_method macro_name do |attribute|

      # Prior to activerecord 3, adding before callbacks more than once does add it more than once
      before_save :save_attachments unless respond_to?(:before_save_callback_chain) && before_save_callback_chain.find(:save_attachments)
      before_destroy :destroy_attachments unless respond_to?(:before_destroy_callback_chain) && before_destroy_callback_chain.find(:destroy_attachments)

      # Register the new attribute
      dragonfly_apps_for_attributes[attribute] = app
      
      # Define the setter for the attribute
      define_method "#{attribute}=" do |value|
        attachments[attribute].assign(value)
      end

      # Define the getter for the attribute
      define_method attribute do
        attachments[attribute].to_value
      end

    end
    
  end
  app
end