Thursday, April 1, 2021

Concerns, Interactors y Helpers en Ruby on Rails

 Cuando nos referimos a estos 3 conceptos en Ruby on Rails, podemos decir que son los que vienen a resolver problemas de duplicación/repetición de código (Don'tRepeatYourself) o de mantener a nuestras clases con una única responsabilidad (Single Responsability).

Empecemos por los Helpers.

son métodos que pueden ser usados por los VIEWS, entonces, pedazos de códigos reutilizables entre las views de tu proyecto. Cuando tienes código de vista que implementa cierta lógica y que además otras vistas también van a utilizar, puede ser buen candidato de extraerlo a un helper. Así no repites código en tu vista y además lo mantienes más limpio y legible.

Vamos por los Concerns.

Son módulos que guardan código común reutilizable entre múltiples clases. Para que lleguen a ser concerns, se debe extender de ActiveSupport::Concern y la clase que quiera usar dicho concern debe hacer un Include NombreConcern

Viven dentro de /app/models/concerns y /app/controllers/concerns

Interactors

Los interactors puede ser una forma más de refactorizar el código de nuestros controllers, esos controllers llamados FAT controllers. Se dice que son FAT porque no están cumpliendo el principio de Single Responsability y están haciendo cosas que no deben hacer. Entonces todo ese código por demás lo extraemos y llevamos a un interactor. 

Un interactor para que sea interactor debe hacer un include Interactor, que viene de una gema interactor-rails y también debe tener un método de instancia público llamado call.

El controlador que quiera usar dicho interactor, deberá poner NombreInteractor.call(enviar los parámetros correspondientes)

Sì, demasiado básico. Hay mucho más envuelto en estos 3 conceptos. Solo es una introducción genérica. Consulta la documentación de RoR para más detalles.


Monday, August 3, 2020

Friday, July 31, 2020

Link target _blank - Security Issue

La etiqueta html "a" tiene un atributo "target" y enter sus valores que puede recibir está "_blank" que es el que nos permitirá abrir la página html en una nueva ventana de tu browser. Eso seguramente ya lo sabías así como yo. Pero hoy, trabajando en un enhacemente que reportó mi equipo de QA, aprendí algo nuevo.

Que cuando estás ocupando el "_blank", por temas de seguridad necesitas poner rel="noopener noreferrer"

<a href="www.tupaginaaqui.com" target="_blankrel="noopener noreferrer">

rel="noopener " impide que la nueva página pueda acceder a la propiedad window.opener y asegura que se ejecuta en un proceso separado. Sin esto, la página de destino puede potencialmente redirigir su página a una URL maliciosa. 

rel="noreferrer" tiene el mismo efecto, pero también evita que el encabezado del Referido sea enviado a la nueva página. Eliminar el encabezado de referencia afectará al análisis.

Wednesday, July 8, 2020

Cómo ver las base de datos de mongo que se crean automáticamente

Si estás buscando poder ver las base de datos de MongoDB que se van creando automáticamente en los proyectos que estás trabajando sin tener que crear las conexiones manualmente, lo que tienes que hacer es crear una conexión a la base de datos ADMIN. Deberás crear el usuario administrador.

* Creando el usuario administrador

Después de iniciar *mongod* y *mongo*, escribe lo siguiente en el shell:

(los valores de user y pwd los escoges tú)
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123*",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Luego, reinicias el servicio y en la GUI que estés utilizando, deberás crear la conexión con las credenciales que acabamos de crear, en mi caso yo uso Robo 3T. 
Como ves en la siguiente imagen, en el tab de Connection deberás agregarle un nombre y el address. Luego en el tab de Authentication, deberás ingresar las credenciales que acabamos de crear para la base de datos, digamos la principal, que se llama *admin*

 
 
Luego te conectas, y verás dentro de ella todas las base de datos que se crearon. Y voilà!

Tuesday, June 2, 2020

Node JS use import instead of require - Babel

SyntaxError: Cannot use import statement outside a module

Si te has topado con este error es porque seguramente en tu aplicación nodeJS estabas cambiando de algo como esto... a esto... Mira:



El error se debe a que tu versión de NodeJS no soporta ES6 por eso es que debes instalar Babel para compilar y hacer que entienda el require, o sea, que transforme tu código.

Y no solo require, ya que Babel funciona en base a plugins en el que le podemos decir qué cosas es que queremos que transforme.

Instala Babel así:

npm install --save-dev @babel/core @babel/node @babel/preset-env

Configura Babel así:

Y deberás crear un archivo llamado .babelrc y con la siguiente data adentro (pueden haber otras cosas):


Ejecuta tu aplicación así:

Instala nodemon

npm install nodemon --save-dev

Crea el siguiente script dentro de tu package.json

"start""nodemon --exec babel-node index.js"


Y voilà. 

Happy coding :)