Garder un code élégant et sans clones de code lors de la construction d'une vaste application Rails peut être une épreuve importante, même pour un développeur accompli. Heureusement, il existe une gemme qui rend ce refactoring de code beaucoup plus simple. Pour un grand nombre de personnes, le code mort/gaspillé se développe après un certain temps. Si vous avez besoin de maintenir votre code à jour et de l'optimiser, jetez un coup d'oeil à une gem qui a fait le travail pour moi.
Flay examine le code à la recherche de similitudes structurelles. Les différences dans les valeurs littérales, les noms de variables, de classes, de méthodes, les espaces blancs, le style de programmation, les accolades vs do/end, les props vs do/end, et ainsi de suite sont tous ignorés, ce qui rend ce logiciel absolument génial. Il est capable de reconnaître à la fois les correspondances correctes et les correspondances proches, et découvre avec certitude quelques endroits dans Active Record où les motifs se répètent. Dans son état actuel, le résultat de Flay est très primitif : une liste de nœuds de code répétés, avec un poids pour les classer et les numéros de ligne et les noms de fichiers où le code répété apparaît. Le code que Flay rapporte comme étant comparatif est une possibilité décente d'outil de refactorisation.
Commande d'installation
sudo gem install flay
Commande pour voir les résultats
Cd "Chemin d'accès au dossier de votre projet"
flay "chemin du dossier"
Ex : flay ./app/controllers - Identifie la duplication de code dans tous les contrôleurs.
flay ./app - Identifie la duplication du code dans l'ensemble du projet
flay ./app/controllers/example_controler.rb - Identifie la duplication du code dans le contrôleur spécifié.
Exemple de sortie
Une sortie est générée pour les zones de code dupliquées comme ceci :
sridevi@carmatec-MS-7788$ flay ./app/models/*.rb
Score total (le plus bas est le meilleur) = 1666
1) Code similaire trouvé dans :call (masse = 170)
./app/models/example.rb:8
./app/models/exemple.rb:9
./app/models/example.rb:10
./app/models/example.rb:11
./app/models/example.rb:15
./app/models/example.rb:17
./app/models/example.rb:19
./app/models/example.rb:20
./app/models/example.rb:22
./app/models/example.rb:23
2) Code similaire trouvé dans :defs (mass = 154)
./app/models/example.rb:260
./app/models/result.rb:195
3) Code similaire trouvé dans :defs (mass = 138)
./app/models/feedback.rb:62
./app/models/example.rb:54
./app/models/result.rb:51
4) Code similaire trouvé dans :call (masse = 136)
./app/models/example.rb:12
./app/models/example.rb:13
./app/models/example.rb:14
./app/models/example.rb:16
./app/models/example.rb:18
./app/models/example.rb:21
./app/models/example.rb:24
./app/models/example.rb:25
5) Code IDENTIQUE trouvé dans :defn (mass*2 = 128)
./app/models/result.rb:7
./app/models/summary_report.rb:7
6) Code IDENTIQUE trouvé dans :defn (mass*2 = 120)
./app/models/example.rb:17
./app/models/example.rb:23
Le score total de l'application de 1666 (le conseil "plus c'est bas, mieux c'est" se vérifie) peut être visualisé dans ses composants individuels, montrant les domaines qui offrent le meilleur rapport qualité-prix. Pour les développeurs expérimentés travaillant seuls ou au sein d'une petite équipe, Flay peut s'avérer inutile. Cependant, pour les projets plus importants (comme celui sur lequel je l'ai exécuté) ou ceux avec des programmeurs débutants ou intermédiaires, il peut aider à augmenter la maintenabilité de votre base de code.
Ci-dessous se trouve la représentation imagée de la manière de refactoriser le code dans une application Rails. Par exemple, si le même code est dupliqué dans plusieurs contrôleurs, gardez-le dans ApplicationController et appelez la méthode en utilisant des filtres.