J'ai un certain nombre d'analyseurs avec des râteaux dans un projet que je travaille. Lorsque vous utilisez un nom de méthode qui existe déjà dans un autre rake, et parce qu'ils utilisent tous les deux le même environnement, je reçois un conflit.
existe-t-il un moyen de limiter la portée des fichiers Rake dans leur espace de noms? Je pensais que c'était tout le point de l'espace de noms? P>
Exemple: p> Dans ce cas, lors de l'exécution est-ce juste un mal nécessaire? P> merci! P> p> p> Test de râteau: Test_task Code> Je vais recevoir une erreur d'arguments non valide. D'autre part, si je définis la méthode dans la tâche elle-même, je dois conserver la méthode en haut du fichier Rake dans l'ordre. Cela obtient une sorte de déroutant et moche. P>
3 Réponses :
Je vois les espaces de noms pour les tâches de râteau comme servant le même objectif que les répertoires dans un système de fichiers: ils sont sur l'organisation plutôt que l'encapsulation. C'est pourquoi les tâches de base de données sont dans Les espaces de noms Rake ne sont pas des cours, vous devez donc vous demander quelle classe vous ajoutez La meilleure solution consiste à rendre vos tâches de râteau très minces (juste comme des contrôleurs) et de mettre toutes les méthodes de support (telles que Résumé exécutif: Mettez tout le travail réel et soulevez lourd quelque part dans vos fichiers de la bibliothèque et apportez vos tâches de ratisser les wrappers minces pour vos bibliothèques. Cela devrait faire disparaître votre problème grâce à une organisation de code appropriée. P> dB: code>, les tâches de rails dans
rails: code>, etc. p>
test_method code> à lorsque vous le définissez dans un espace de noms de rake. La réponse est un objet. Donc, lorsque vous avez touché votre deuxième tâche, l'objet a déjà une méthode
test_method code> qui prend un paramètre et Ruby se plaint à juste titre. P>
test_method code>) dans un fichier de bibliothèque quelque part raisonnable. Une tâche de râteau doit généralement simplement effectuer un peu de configuration, puis appeler une méthode de la bibliothèque pour effectuer le travail réel (c'est-à-dire la même disposition générale en tant que contrôleur). P>
Question de suivi: Stackoverflow.com/questions/6183367/...
Avez-vous eu la chance de jeter un coup d'oeil?
module Anonymous namespace :test do # brabra end end self.class.send(:remove_const, :Anonymous) module Anonymous namespace :another_test do # brabra end end self.class.send(:remove_const, :Anonymous) Module.new do end block needs you self:: before any definition. To avoid this, you need to name the module and remove it.
J'ai trouvé un moyen de nommer les méthodes dans les tâches de râteau afin que les méthodes identiques nommées ne soient pas entrées en collision.
étendue râteau :: DSL code> li>
- Modifiez vos méthodes en méthodes de classe (avec
auto. code>). Li>
ol> J'ai testé cela, et il permet toujours à une tâche de Rake d'invoquer ou de dépendre d'une autre tâche de râteau qui se trouve dans un module différent. P>
Exemple: P>
module Test
extend Rake::DSL
namespace :test do
task :test_task => :environment do
...
end
def self.test_method(argument)
...
end
end
end
module OtherTest
extend Rake::DSL
namespace :other_test do
task :test_task => :environment do
...
end
def self.test_method(argument, argument2)
...
end
end
end