11
votes

Où mettre des fonctions d'assistant pour les tâches de râteau et les fichiers de test de Ruby sur rails?

dans mes rails Application J'ai un fichier sample_data.rb code> INDIEMENT / lib / tâches code> ainsi qu'un tas de fichiers de test dans mon / spec Code> Répertoire.

Tous ces fichiers partagent souvent des fonctionnalités communes telles que: P>

def random_address
  [Faker::Address.street_address, Faker::Address.city].join("\n")
end


1 commentaires

Qu'est-ce que cela a à voir avec le râteau? Tout ce que je vois sont des fichiers .rb. Ceci est un titre trompeur.


3 Réponses :


9
votes

Vous pouvez créer une classe statique, avec des fonctions statiques. Cela ressemblerait à ceci comme suit: xxx

puis, tout ce que vous auriez besoin de faire est:

  1. Inclure votre classe d'assistance dans le fichier que vous souhaitez utiliser
  2. l'exécuter comme: XXX

    Lorsque vous le faites, assurez-vous d'inclure des dépendances dans votre HelperFunctions Classe.


3 commentaires

Merci pour ton aide! Dans quel répertoire mettriez-vous cette classe?


C'est à vous. Je l'aurais probablement placé dans le répertoire du contrôleur.


NOOOOO pas le répertoire du contrôleur. C'est exactement pourquoi il y a un dossier lib . Le dossier app / contrôleurs ne doit contenir que des contrôleurs.



7
votes

Si vous êtes sûr que cela ne soit sûr que spécifique, vous pouvez également ajouter directement dans rails_root / rakefile (ce n'est probablement pas le cas pour l'exemple que vous utilisez).

J'utilise ceci pour Simplifiez la syntaxe d'invocation de Rake's's Invoke: xxx

de cette façon, je peux utiliser invoquer "my_namespace: my_tak" dans les tâches de rake au lieu de rake :: Tâche ["my_namespace: my_task"] .invoke .


1 commentaires

Exactement pourquoi j'ai fini ici! Voulait savoir où mettre un wrapper pour rake :: Tâche ['Espace de noms: tâche']. Renable; RAKE :: Tâche ['Espace de noms: tâche']. Invoquer .



1
votes

Vous partagez des méthodes dans un module et vous placez un tel module dans le dossier lib code>.

quelque chose comme lib / faux_data.rb code> contenant p> contenant p> xxx pré>

et à l'intérieur de votre tâche de râteau nécessite juste le module et appelez feedata.random_address code>. p>

Mais, si c'est comme une graine Besoin de faire chaque fois que vous exécutez vos tests, vous devriez envisager d'ajouter ceci à votre avant tout code>. p>

spec_helper code> ressemble à ceci: p> xxx pré>

et le module setupsupport code> est défini dans SPEC / SUPPORT / SETUP_SUPPORT .rb code> et ressemble à ce qui suit: p>

module SetupSupport

  def load_db_seed
    load(File.join(Rails.root, 'db', 'seeds.rb'))
  end

end


1 commentaires

Afin de rendre votre code d'exemple Fakeata Code de code, il apparaîtrait que l'instruction Module_Function doit être insérée avant Définition du Random_address fonction, plutôt que après .