Stubber / mocker request.remote_ip

Pour faker une adresse IP d’appel, j’utilisais ça :
Seulement, Rubocop n’était pas content. Avec ça,
Rubocop est content, et c’est la manière la plus simple de le faire 😉

Overcommit, l’alternative facile aux git hooks

Plusieurs fois j’ai eu recours aux git hooks mais je ne trouve pas ça forcément pratique ou simple à écrire.

Premier exemple d’utilisation, ayant intégré rubocop dans le CI/CD, j’aimerais ne pas rater de livraison parce que j’ai oublié de lancer rubocop (ou rspec par exemple), avant de pousser le code.

Deuxième exemple, il m’arrive de bidouiller le code en local pour des tests par exemple (changer une adresse mail de destination, mettre des console log, des alert, etc).

Et évidemment, ce genre de chose ne doit pas se retrouver en prod. Ayant une mémoire de bébé poisson rouge, une fois sur deux, je push du code qui ne devrait pas aller en prod…

Continuer la lecture de « Overcommit, l’alternative facile aux git hooks »

Le Gemfile et bundler

Le Gemfile c’est bien et Bundler c’est formidable.

Gemfile

Avec le Gemfile, on peut (+/-) fixer (ou pas, au choix), les versions des gems utilisées.

Pour ça, plusieurs syntaxes sont possibles, un exemple étant bien plus parlant :

~> 2.0.3 équivaut à >= 2.0.3 et < 2.1.

~> 2.1 équivaut à >= 2.1 et < 3.0.

Bundle install

Petit rappel, lors d’un bundle install, bundler résout exlusivement les nouvelles versions de gems non résolues dans le Gemfile.lock.

Options dispos/utiles :
–clean Efface toutes les traces des gems non utilisées
–quiet pas de log durant l’installation
–without liste séparée par des espaces des gems à skip, combinable avec –with

Bundle update

Options dispos/utiles :
–group met à jour exclusivement les gems de ce group
–force redownload toutes les gems
–patch, –minor, –major met à jour s’il trouve une nouvelle patch, minor ou major

# Command Line Result
————————————————————
1 bundle update –patch ‘foo 1.4.5’, ‘bar 2.1.1’
2 bundle update –patch foo ‘foo 1.4.5’, ‘bar 2.1.1’
3 bundle update –minor ‘foo 1.5.1’, ‘bar 3.0.0’

Bundle exec

Toujours utiliser bundle exec, qui utilise exclusivement les gems du projet et pas celles du système.
Cela permet d’assurer une cohérence plus pointue entre les différents environnements, et d’être en corrélation avec le Gemfile.

Bundle add

Permet d’ajouter une gem dans le Gemfile tout en spécifiant sa version (la dernière publiée si pas spécifiée lors de la commande) ET de faire le bundle install
Top pour encore une fois garder de la cohérence et ne biaiser un bundle update malencontreux

Options dispos/utiles
–version, -v spécifie la version
–group, -g spécifie le/les groupes
–source, -s spécifie la source si différente de la source du Gemfile

Bundle clean

Permet de supprimer les gems non utilisées du dossier bundler (ATTENTION à où sont installées les gems, et qui/quoi les utilise !!)
–dry-run pour avoir une idée de ce qui va être supprimé

 

Avoir l’inspecteur web d’un smartphone sur son PC / Mac

  • Brancher le smartphone au pc avec un câble usb
  • Activer l’inspecteur web sur le device
    • Sur iOs :
      • Aller dans Réglages
      • Puis dans Safari
      • Puis dans Avancé
      • Et activer l’inspecteur web
    • Sur Android :
      • Aller dans Paramètres
      • Puis dans À propos du téléphone (tout en bas)
      • Cliquer plusieurs fois sur Numéro de build jusqu’à « être développeur »
      • Retour dans Paramètres
      • Dans Options développeurs
      • Activer le Débogage usb
  • Accéder à l’inspecteur
    • Pour iOs :
      • Ouvrir Safari
      • Dans l’onglet développement
      • Choisir le device et l’onglet concerné
    • Pour Android :
      • Ouvrir Chrome
      • Ouvrir l’inspecteur Web (Chrome DevTools)
      • Dans les options du Chrome DevTools
      • Cliquer sur More Tools
      • Remote devices
      • Choisir son device et accepter la demande d’autorisation sur le device
      • Cliquer sur le Inspect de l’onglet désiré

Crontab -l / -e / -r ? Cronjobs

Pour infos :

  • crontab -l : liste les cron
  • crontab -e : édition des cron
  • crontab -r : supprime la table de cron

Comme je n’ai pas volé ma réputation de « jeune fougueux », j’ai tapé trop vite « crontab -e » afin de glisser gentiment sur « crontab -r »… Ce qui fait que j’ai vidé la table des crons 🙂

Pour remédier à ça, il suffit de créer un fichier qu’on chargera dans le crontab et qui nous évitera ce genre de petites erreurs. Pour créer ce fichier, rien de plus simple :

Dirige la sortie de la commande « crontab – l » dans le fichier « cronjobs », créé automatiquement si il n’existe pas.

Ensuite il suffit de mettre à jour le fichier « cronjobs » à notre guise puis de le recharger dans le crontab pour mettre à jour le crontab, en faisant

Voilà.

Fixtures into fixtures

Lors de tests, on peut être amenés à jouer avec les associations has_many, belongs_to & co.

Si vous travaillez avec des associations, vous pouvez simplement définir une référence entre deux fixtures différents. Voici un exemple avec une association belongs_to / has_many :

# Dans fixtures/categories.yml
a-propos:
  nom: About
# Dans fixtures/articles.yml
one:
  title: Coucou monde !
  contenu: Hello world !
  categorie: a-propos

La clé « one » trouvé dans fixtures / articles.yml a une clé-valeur categorie => « a-propos ». Ceci indique à Rails de charger la catégorie « a-propos » dans « categorie » de l’article concerné.

 

Sources : http://api.rubyonrails.org/v5.1.1/classes/ActiveRecord/FixtureSet.html

Rails 5 : Comment récupérer les erreurs de validate d’un model enfant dans le model parent

Le cas : Un model Utilisateur peut avoir 0+ model Enfant (définit par un has_many). Enfant a un validate_presence_of sur le prénom. On veut savoir dans le modèle parent Utilisateur quand il y a une erreur de validation dans le modèle enfant Enfant.

Pour ce faire, il faut rajouter un hook au validate du modèle parent :

En clair, on ajoute les errors.full_messages des enfants dans le errors[:enfants] d’un utilisateur

Ensuite, pour les récupérer en front par exemple, il suffit de :