Wednesday, August 30, 2023

Create new repo from terminal in macOS

In Windows, we are used to right click into our folder and open With GitBash. Let’s do something similar in macOs


Go to Finder (it’s in the Dock), open Documents, create new folder, let’s say “MyRepos”, Ctrol+Click the folder and New terminal at Folder.

In the terminal, continue doing what you already know…


git init

git add …

git commit …

Blah blah

Install and Config GIT on MAC


The best option to install GIT in Mac is thru Homebrew. So, you should install it first


Open launchpad, search by “terminal”

Run this command:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


(Visit the official website to get the news: https://brew.sh)


All you need to do is to wait and read the console. The console will ask you to do something (copy a command, past it and run it)


Now you are ready to install GIT thru this command:

brew install git (Visit the official website to get the news: https://git-scm.com/download/mac)


Run git —version to confirm you already have git installed


Unlike Windows, you will not get a new terminal


Now you have GIT, next step is to configure GIT


In the same terminal, run this:


git config —global user.name “your-username”

git config —global user.email “your-email”


You can see your configuration running this:

git config —list


Voila

Friday, November 4, 2022

Pattern for a route without slash at the end (regex)

 Hi guys! I want to share with you a regex to use as a patter for entering a route:

valid:

/something123

/something/somethingelse/thiselse

not valid:

/*-*-*-*-

/something/*=*-=

/something123/

The regex is:

/^(?:\/(?:[a-zA-Z0-9])+)+$/

Happy coding!

Monday, October 18, 2021

Using MySQL regular expressions in Rails ActiveRecord

Sometimes you want to filter the rows that not follow a given format.

For example, it was my case. I didn't get the rows that follow this format: [0-9]-wordhere

So, I did this:

my_result = MyModel.where("id = 1 AND (my_column NOT REGEXP ? AND my_column NOT REGEXP ?)", "[0-9]-wordone", "[0-9]-wordtwo")

This line will be transleted to:

SELECT * FROM my_table WHERE (id = 1 AND (my_column NOT REGEXP '[0-9]-wordone' AND my_column NOT REGEXP '[0-9]-wordtwo'))

Easy, right?

Happy coding :)


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.