Quelle est la façon la plus propre à remplacer ActiveRecord de trouver pour les deux modèles et collections?

J'ai bibliothèque de code qui remplace Ar la méthode find. J'ai également inclure ce module pour toutes les classes d'Association, donc les deux Monmodèle.trouver et @parent.my_models.trouver du travail et d'appliquer la bonne portée.

J'ai basé mon code de will_paginate:

a = ActiveRecord::Associations
returning([ a::AssociationCollection ]) { |classes|
  # detect http://dev.rubyonrails.org/changeset/9230
  unless a::HasManyThroughAssociation.superclass == a::HasManyAssociation
    classes << a::HasManyThroughAssociation
  end
}.each do |klass|
  klass.send :include, Finder::ClassMethods
  klass.class_eval { alias_method_chain :method_missing, :paginate }
end

Mon problème est que je ne veux remplacer les inventeurs pour certains modèles. Actuellement j'ai besoin de prolonger l'association des classes de collection qui sont partagées par tous les modèles. Je sais que je peux étendre les associations par le modèle par le passage d'un module:

has_many :things, :extend => SomeCustomMethods

Mais ma bibliothèque est fondamentalement suis ActiveRecord plug-in, donc je voudrais un propre convention pour plugable finder extensions qui s'appliquent à la fois le modèle et l'étendue des collections sans affecter tous les modèles de la demande.

OriginalL'auteur ismaSan | 2008-11-24