Au moment où je stocke chaque option dans son propre attribut de classe, mais cela conduit à un code difficile à lire lorsque j'ai besoin d'accéder aux options passées à partir des méthodes d'instance.Comment accéder aux options passées à un plugin acts_as (décorateur ActiveRecord) à partir de méthodes d'instance?
Par exemple, si je transmets un nom de colonne en tant qu'option, je dois utiliser self.send(self.class.path_finder_column)
pour obtenir la valeur de la colonne à partir d'une méthode d'instance.
Remarque J'ai préfixé l'attribut class avec le nom de mon plugin pour éviter les conflits de noms.
Voici un exemple de code simple d'un plugin auquel est passée une option, column
, à laquelle on accède à partir de la méthode d'instance set_path
. Les getters/setters peuvent-ils être simplifiés pour être plus lisibles?
# usage: path_find :column => 'path'
module PathFinder
def path_finder(options = {})
send :include, InstanceMethods
# Create class attributes for options
self.cattr_accessor :path_finder_column
self.path_finder_column = options[:column]
module InstanceMethods
def set_path
# setter
self.send(self.class.path_finder_column + '=', 'some value')
# getter
self.send(self.class.path_finder_column)
end
end
end
end
ActiveRecord::Base.send :extend, PathFinder
-1: Le code affiché dans la question fait déjà usage de cattr_accessor. – EmFi