Sha256: 3bb23c9baf50c93f3811d718376e079c23b6d6bcabda1d09ed69f6ab34f651ba

Contents?: true

Size: 1.31 KB

Versions: 6

Compression:

Stored size: 1.31 KB

Contents

# encoding: UTF-8
module MongoMapper
  module Plugins
    module Associations
      class BelongsToAssociation < SingleAssociation
        def type_key_name
          "#{as}_type"
        end

        def embeddable?
          false
        end

        def proxy_class
          @proxy_class ||= polymorphic? ? BelongsToPolymorphicProxy : BelongsToProxy
        end

        def setup(model)
          model.key foreign_key, ObjectId unless model.key?(foreign_key)
          model.key type_key_name, String unless model.key?(type_key_name) if polymorphic?
          super
          add_touch_callbacks if touch?
        end

        def autosave?
          options.fetch(:autosave, false)
        end

        def add_touch_callbacks
          name        = self.name
          method_name = "belongs_to_touch_after_save_or_destroy_for_#{name}"
          touch       = options.fetch(:touch)

          @model.send(:define_method, method_name) do
            record = send(name)

            unless record.nil?
              if touch == true
                record.touch
              else
                record.touch(touch)
              end
            end
          end

          @model.after_save(method_name)
          @model.after_touch(method_name)
          @model.after_destroy(method_name)

        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
mongo_mapper-0.13.0 lib/mongo_mapper/plugins/associations/belongs_to_association.rb
mongo_mapper-0.13.0.beta2 lib/mongo_mapper/plugins/associations/belongs_to_association.rb
mongo_mapper-0.13.0.beta1 lib/mongo_mapper/plugins/associations/belongs_to_association.rb
mongo_mapper-0.12.0 lib/mongo_mapper/plugins/associations/belongs_to_association.rb
lookout-mongo_mapper-0.11.3 lib/mongo_mapper/plugins/associations/belongs_to_association.rb
mongo_mapper-0.11.2 lib/mongo_mapper/plugins/associations/belongs_to_association.rb