Mantener un código elegante y sin clones de código mientras se construye una gran aplicación Rails puede ser una prueba importante, incluso para un desarrollador consumado. Afortunadamente, existe una gema que simplifica la refactorización del código. Para mucha gente, el código muerto/desperdiciado se desarrollará después de algún tiempo. Otros se encontrarán en una situación de este tipo cuando se hacen cargo de proyectos heredados. En la remota posibilidad de que usted necesita para mantener su código mantenible y optimizado, echa un vistazo a una gema que han estado haciendo el trabajo para mí.
Flay examina el código en busca de similitudes estructurales. Las diferencias en valores literales, variables, clases, nombres de métodos, espacios en blanco, estilo de programación, llaves frente a do/end, props frente a do/end, etc. son todas pasadas por alto, lo que lo hace absolutamente genial. Es apto para reconocer tanto las coincidencias correctas como las aproximadas, y descubre con certeza algunos puntos en Active Record donde se repiten los patrones. En su estado actual, la salida de Flay es muy primitiva: una lista de nodos de código repetidos, junto con un peso para clasificarlos y los números de línea y nombres de archivo donde aparece el código repetido. El código que Flay reporta como comparativo es una herramienta de posibilidad decente para la refactorización.
Comando de instalación
sudo gem install flay
Comando para ver la salida
Cd "Ruta a la carpeta del proyecto"
flay "ruta de la carpeta"
Ej : flay ./app/controllers - Identifica la duplicación de código en todos los controladores.
flay ./app - Identifica la duplicación de código en todo el proyecto
flay ./app/controllers/example_controler.rb - Identifica la duplicación de código en el controlador especificado.
Ejemplo de salida
Se genera una salida de las áreas de código duplicado como esta:
sridevi@carmatec-MS-7788$ flay ./app/models/*.rb
Puntuación total (cuanto más baja, mejor) = 1666
1) Código similar encontrado en :call (masa = 170)
./app/models/ejemplo.rb:8
./app/models/ejemplo.rb:9
./app/models/ejemplo.rb:10
./app/modelos/ejemplo.rb:11
./app/modelos/ejemplo.rb:15
./app/modelos/ejemplo.rb:17
./app/modelos/ejemplo.rb:19
./app/modelos/ejemplo.rb:20
./app/modelos/ejemplo.rb:22
./app/modelos/ejemplo.rb:23
2) Código similar encontrado en :defs (masa = 154)
./app/models/ejemplo.rb:260
./app/models/result.rb:195
3) Código similar encontrado en :defs (masa = 138)
./app/models/feedback.rb:62
./app/models/ejemplo.rb:54
./app/models/result.rb:51
4) Código similar encontrado en :call (masa = 136)
./app/models/ejemplo.rb:12
./app/models/ejemplo.rb:13
./app/models/ejemplo.rb:14
./app/modelos/ejemplo.rb:16
./app/modelos/ejemplo.rb:18
./app/modelos/ejemplo.rb:21
./app/modelos/ejemplo.rb:24
./app/modelos/ejemplo.rb:25
5) Código IDÉNTICO encontrado en :defn (masa*2 = 128)
./app/models/result.rb:7
./app/models/informe_resumen.rb:7
6) Código IDÉNTICO encontrado en :defn (masa*2 = 120)
./app/models/ejemplo.rb:17
./app/models/ejemplo.rb:23
La puntuación total de la aplicación de 1666 (el consejo de "cuanto más bajo, mejor" es válido) se puede ver en sus componentes individuales, mostrando las áreas que proporcionan la mayor rentabilidad. Para los desarrolladores experimentados que trabajan por su cuenta o en un equipo pequeño, Flay puede ser innecesario. Sin embargo, en proyectos de mayor envergadura (como el mío) o con programadores principiantes o intermedios, puede ayudar a mejorar la capacidad de mantenimiento del código base.
A continuación se muestra la representación pictórica de cómo refactorizar el código en la aplicación rails. Por ejemplo, si el mismo código duplicado en muchos controladores de mantenerlo en ApplicationController y llamar al método mediante el uso de filtros.