module TopModel::Association::ClassMethods

Public Instance Methods

belongs_to(to_model, options = {}) click to toggle source
# File lib/topmodel/association.rb, line 6
      def belongs_to(to_model, options = {})
        to_model    = to_model.to_s
        class_name  = options[:class_name]  || to_model.classify
        foreign_key = options[:foreign_key] || "#{to_model}_id"
        primary_key = options[:primary_key] || "id"
        
        attributes foreign_key
        self.belongs_assoc[to_model] = {:class_name => class_name, :foreign_key => foreign_key, :primary_key => primary_key, :name => to_model}

        class_eval(<<-EOS, __FILE__, __LINE__ + 1)
          def #{to_model}                                             # def user
            #{foreign_key} && #{class_name}.find(#{foreign_key})      #   user_id && User.find(user_id)
          end                                                         # end
                                                                      # 
          def #{to_model}?                                            # def user?
            #{foreign_key} && #{class_name}.exists?(#{foreign_key})   #   user_id && User.exists?(user_id)
          end                                                         # end
                                                                      # 
          def #{to_model}=(object)                                    # def user=(model)
            self.#{foreign_key} = (object && object.#{primary_key})   #   self.user_id = (model && model.id)
          end                                                         # end
        EOS
      end
has_many(to_model, options = {}) click to toggle source
# File lib/topmodel/association.rb, line 30
      def has_many(to_model, options = {})
        to_model    = to_model.to_s
        class_name  = options[:class_name]  || to_model.classify
        foreign_key = options[:foreign_key] || "#{model_name.singular}_id"
        primary_key = options[:primary_key] || "id"
        self.has_many_assoc[to_model] = {:class_name => class_name, :foreign_key => foreign_key, :primary_key => primary_key, :name => to_model}

        class_eval(<<-EOS, __FILE__, __LINE__ + 1)
          def #{to_model}                                             # def user
            #{class_name}.find_all_by_attribute(                      #   User.find_all_by_attribute(
              :#{foreign_key},                                        #    :task_id,
              #{primary_key}                                          #    id
            )                                                         #   )
          end                                                         # end
        EOS
      end