Sto usando Ruby on Rails 3.2.2. Sto implementando un modulo e includendolo in una classe utilizzando la funzione RoR ActiveSupport::Concern. Rende disponibile il codice di blocco included do ... end
dichiarato all'interno di quello da eseguire nel contesto di classe della classe in cui è incluso il modulo.Cosa non dovrei includere nel blocco `include do ... end`?
mio dubbio è: Cosa non dovrei includere nel blocco included do ... end
? Questo è, ad esempio, una pratica "comune"/"buona" per fare quanto segue?
module MyModule
extend ActiveSupport::Concern
class MyModuleClass
attr_accessor :attr1, :attr2, :attr3
def initialize(attrs)
@attr1 = attrs[:attr1]
@attr2 = attrs[:attr2]
@attr3 = attrs[:attr3]
end
end
included do
@my_module_class = MyModuleClass.new(some_attrs)
end
end
Più, sarà la variabile @my_module_class
disponibile come attributo nella classe compresa di MyModule
(proposito: Vorrei rendere il @my_module_class
di essere "visibile" solo internamente MyModule
dal è destinato ad essere usato solo in quel modulo)? Ci sono alcuni esempi "avanzati" o tutorial su come gestire situazioni come quelle che sto tentando di istanziare nel blocco included do ... end
del codice sopra? Che cosa consigli?
Grazie, ma la domanda "principale" è relativa a "Cosa dovrei * non * includere nel blocco' include do ... end'? " relativo, * ad esempio *, al mio caso. Il resto è un "di più", anche se per me è molto importante. Tuttavia, io * non * voglio rendere tutte le istanze di 'MyModuleClass' un'istanza di' MyModule', ma renderle disponibili solo internamente a 'MyModule'; inoltre, l'istruzione 'include MyModule' all'interno della definizione della classe è implicita/ovvia, dal momento che il modulo è destinato ad essere incluso in una classe. – user12882
La domanda "cosa non dovrei fare" è troppo vaga per me per rispondere veramente, ma per favore vedi il mio "Edit 1" sopra dove cerco di risolvere il problema che stai chiedendo. –