Rails : la gem did_you_mean pour vous servir !

Aujourd’hui un petit article pour vous présenter rapidement une Gem très sympathique : « Did you mean ». Il est fréquent pour un développeur de faire des fautes de frappes, on peut parfois se tromper d’un caractère s’en forcément s’en rendre compte et perdre du temps … ça se termine souvent par « pfff la loose, j’ai mal écrit ma méthode » ou autre (à remplacer par la phrase qui vous convient ^^).

C’est là que la Gem did_you_mean peut entrer en action :

Un petit bundle install et c’est tout ! Le résultat ? Voici un petit exemple (réalisé pour la démo, donc un peu gros je vous l’accorde) :

Cela me génère une erreur (car j’ai mal tapé ActiveRecord dans mon cas) et did_you_mean entre en jeu et me propose la bonne syntaxe :

screen_didyoumean

Et voilà, cela fonctionne dans beaucoup de cas je vous laisse découvrir plus en détails la Gem sur la page Github github.com/yuki24/did_you_mean.

DataTables : Utiliser un champ de recherche personnalisé

Petite astuce pour ceux qui utilisent DataTables : il peut s’avérer utile de personnaliser l’interface de notre tableau et des outils proposés par DataTables lorsque la présentation/template par défaut ne nous convient pas.

Dans ce cas on peut soit surcharger les classes CSS appelées par DataTables soit faire sa propre intégration habituelle et spécifier à DataTables d’utiliser tel ou tel élément du DOM pour effectuer telle ou telle action.

Exemple :
1 – On décide de ne pas afficher en CSS les filtres affichés par défaut par DataTables (ici on désactive directement l’affichage de tous les filtres mais si vous ne voulez masquez que le champ de recherche par exemple veuillez précisez son ID DOM directement au lieu de la classe filter).

Pour désactiver juste le champ de recherche vous pouvez aussi très bien le faire en javascript lors de la déclaration de votre datatables :

2 – On ajoute un input dans notre template fraichement intégré

3 – On précise en javascript à notre DataTables d’utiliser cet input en tant que champ de recherche

Wicked_pdf #5 : Un PDF en pièce jointe de votre mail

Lorsque l’on souhaite générer un PDF avec wicked_pdf dans un projet Rails il peut s’avérer utile et nécessaire de placer ce dernier en pièce jointe d’un email.

Dans un premier temps on va créer le PDF sans l’afficher en utilisant la méthode « render_to_string » puis appeler notre mailer en lui passant en paramètre le contenu de ce PDF.

L’exemple ci-dessous précise le template et le layout mais ces options sont facultatives (et il y a possibilité d’ajouter toutes les options de wicked_pdf présentées dans le billet précédent).

Ensuite dans le mailer, on récupère le contenu du PDF en paramètre et on spécifie un content_type à notre pièce jointe en y plaçant le contenu :

L’avantage de cette solution est que le fichier PDF est généré à la volée, il n’est pas stocké sur le serveur.

Lister tous les commits Git, saufs ou exclusivement ceux d’un utilisateur donné

Il est bien pratique de savoir coupler Git aux expressions régulières quand on veut filter la sortie de git log.

Lister tous les commits d’un ou plusieurs utilisateurs :

Lister tous les commits saufs ceux d’un ou plusieurs utilisateurs :

Cette dernière commande peut être utilisée avec le nom de tous les commiters du dépôt sauf un, ce qui reviendra à utiliser la première !

Faites du tri dans vos Gemsets RVM !

Que ce soit pour une question de place, de parasitage ou simplement de clarté, il peut devenir intéressant de supprimer vos anciens Gemsets trainant sur votre disque.

Pour lister vos Gemsets même si vous avez supprimé les dossiers/rvmrc :

La commande précédente vous indique où trouver vos Gemsets et la place qu’ils occupent. Mais pour les supprimer, mieux vaut utiliser la commande suivante :

Puis pour chaque Gemset :

Source

Piwik, où sont mes visiteurs uniques ?

Si vous utilisez Piwik, vous pouvez avoir du mal à trouver l’endroit où est inscrit le nombre de visiteurs uniques et même vous vous dites je suis sûr je l’ai vu quelque part un jour et maintenant je ne le vois plus.

Bah en fait, c’est normal. Par défaut Piwik ne vous donne vos visiteurs uniques que si la période est jour, semaine ou mois mais pas pour l’année ni une plage de dates personnalisées. Cette statistique se situe dans Visteurs -> Récapitulatifs.

Ok, mais comment je fais moi je le veux pour l’année. 2 solutions, la solution du pauvre tu compiles mois par mois, c’est bon il n’y en a que 12.

Pas cool ok, alors étudions déjà pourquoi Piwik a une telle configuration par défaut. D’après la doc officielle, c’est pour des raisons de performances car cette statistique provient des tables de logs qui peuvent être importante sur une année ou une plage de date et réalisée cette stat peut mettre beaucoup de temps. Ok, mais moi j’ai un petit site pas trop de visite donc je suis prêt à attendre pour avoir cette stat. Ok, donc toujours d’après la doc officielle il suffit d’aller dans votre fichier de configuration (dossier_root_de_piwik/config/config.ini.php) et ajoutez les lignes suivantes :


enable_processing_unique_visitors_day = 1
enable_processing_unique_visitors_week = 1
enable_processing_unique_visitors_month = 1
enable_processing_unique_visitors_year = 1
enable_processing_unique_visitors_range = 1

Et voilà,vous avez vos visiteurs uniques de calculés pour tous les types de périodes possibles accessibles dans Visiteurs -> Récapitulatifs.

Juste un petit point important faites bien attention à ne pas vider en automatique vos tables de logs trop rapidement au vue de vos besoin. C’est configurable dans Votre compte -> paramètres -> vie privée -> Supprimer les journaux et rapports des anciens visiteurs et les 2 configurations doivent être à non si vous souhaitez conserver tous l’historique et donc les visiteurs uniques.

Enjoy 😉

Ajouter un préfixe, un suffixe ou renommer chaque message de commit d’une branche Git

Aujourd’hui nous allons voir comment mettre à jour des commits pushés sur un serveur. Avant toute chose, sachez que la manipulation d’un historique Git partagé entre plusieurs utilisateurs est une pratique déconseillée, interdite dans la plupart des commandes Git puisqu’elle perd la cohérence du dépôt distant avec le clone local de chacun.

En premier lieu, placez votre répertoire de travail dans un état sans modification, c’est à dire où la branche locale reflète la branche distante.

Cas N°1 : la mise à jour manuelle d’un petit nombre de commits

Nous allons utiliser une commande qui permettra l’édition un à un des cinq commits concernés :

Ici, HEAD représente le commit de départ (cela peut être n’importe quel hash de commit), la tilde et le chiffre sélectionnent les cinq précédents.

Cette commande va ouvrir vi. Les actions disponibles sont commentées en bas du fichier (taper « G » pour descendre, « gg » pour remonter).

Remplacez tous les mots pick du fichier par reword :

Refermez le fichier avec :wq puis suivez la procédure expliquée en console qui ouvrira un à un chaque message de commit (source).

Cas N°2 : la mise à jour automatique de tous les commits d’une branche

Travailler sur des centaines de commits est plus délicat. Nous allons utiliser la commande Git filter-branch qui permet de réécrire l’historique d’une banche. Sa documentation alerte sur la possibilité de ne plus être en mesure de pousser les modifications réalisées sur le dépôt, il est donc fortement conseillé de faire une sauvegarde avant toute opération.

La commande filter-branch permet d’appliquer toutes sortes de filtres sur l’historique, de la modification des messages de commits à la suppression totale d’un fichier, ou au contraire l’ajout d’entêtes, etc.

Cette commande dispose d’une option msg-filter prenant en paramètre une commande système : l’entrée qui lui est passée est le message d’un commit et sa sortie est utilisée pour remplacer le message. Le choix de cette commande est libre : sed, awk, cat ou autre.

La commande sed permet d’appliquer des expressions régulières à des chaines de caractères, elle correspond à nos attentes. Exemple concret :

L’exemple retourne dans la console la concaténation des deux chaines, il ne reste plus qu’à l’insérer dans notre commande Git :

Autre exemple, le remplacement d’une chaine de caractères par une autre :

L’opération peut prendre un certain temps, selon l’âge de votre branche. Un « git log » montre bien que tous les messages ont été modifiés.

Pour exécuter une seconde fois git filter-branch, ajoutez ensuite le paramètre -f pour forcer.

Pour déployer cette modification sur le serveur, en toute connaissance de cause, utilisez la commande git push --force.

À la suite de cette opération, vous et vos collaborateurs devront re-cloner le dépôt (source).

Edit Julien : Vous pouvez aussi renommer de vieux commit à la main, en utilisant cette technique de la doc github.

Wicked_pdf #4 : Un beau header, des marges et des numéros

De retour sur notre « wicked_pdf’s road-trip » avec la personnalisation du header et du footer, la numérotation de nos pages, un petit mode « debug » et des marges sur mesures !

1 – Un header et un footer

Le header et le footer se gèrent de la même manière, cependant il existe plusieurs techniques pour les afficher. Soit c’est un simple texte et on peut le faire dans le controller, soit on souhaite apporter du style et des images et là il faut passer par un template spécifique. Nous allons voir comment ajouter un footer mais c’est exactement la même chose pour le header.

On spécifie un fichier pour notre header dans lequel nous allons pouvoir insérer le contenu que l’on souhaite. Ce fichier est placé dans app/views/mon_objet/pdf_header.pdf.erb.

2 – Des numéros pour nos pages

Très souvent utile sur les documents avec plusieurs pages : la possibilité d’indiquer le numéro. Plusieurs méthodes existent, une manière très simple de le faire depuis le controller :

Les termes [page] et [topage] sont à utiliser, libre à vous de formater le rendu final comme vous le voulez (dans notre exemple cela donne en bas de page : Page 2 / 4 par ex). Possibilité également de le centrer (:center) ou de le mettre à gauche ou à droite (:left, :right).

3 – Un mode debug ?

Concevoir un PDF via du code HTML c’est très pratique, mais quand on remarque une anomalie sur un PDF on ne peut pas « inspecter l’élément » comme sur nos pages web. Petite astuce, toujours dans votre controller :

Pour l’utiliser il suffit, dans votre url, de rajouter  » ?debug=true  » à la fin de cette manière http://localhost:3000/mon_objet/show.pdf?debug=true

Attention toutefois ce mode debug passe en mode html et n’affiche pas exactement la même chose que le rendu PDF (mais trouve son utilité dans certains cas).

4 – La gestion des marges

Wicked_pdf gère les marges par défaut (à 10) mais vous pouvez les personnaliser dans le controller :

Attention toutefois à bien différencier l’impression (Fichier > Imprimer) depuis le navigateur de l’impression du fichier PDF enregistré sur votre ordinateur, au niveau des marges ça n’a rien à voir.

La liste complète des options est disponible ici même, nous essaierons d’en aborder d’autre. La prochaine fois on se penchera du côté des PDFs en pièces jointes dans les mails et de la génération de PDF à la volée !

Wicked_pdf #3 : Le saut de page et son inverse

Continuons à parcourir wicked_pdf et ses fonctionnalités. Après l’installation et la mise en place de style, place à deux options CSS très utiles pour apprendre à forcer le saut de page ou à l’inverse empêcher un saut de page au milieu d’un élément.

1 – Sauter une page

Il peut être utile de forcer le document à changer de page (connu aussi sous le terme  « saut de page » sur traitement de texte). C’est possible avec wicked_pdf grâce à cette astuce :

On créé une classe CSS « page-break » que l’on appelle dans notre vue partout où l’on souhaite ajouter un saut de page !

2 – Empêcher un saut de page sur un élément

Difficile de gérer les « orphelins » sur wicked_pdf (pour reprendre certaines fonctionnalités utiles d’un traitement de texte). Cependant on peut spécifier qu’un élément de notre page ne peut se « casser » et se trouver sur deux pages différentes.
tuto_wicked_pdf
Pour régler ce problème il suffit de créer une classe CSS que l’on appelle depuis l’élément souhaité :

Et voilà le tour est joué ! On se retrouve dans quelques jours pour voir comment personnaliser encore un peu plus un PDF avec les notions de marges, de numéros de pages, de header & footer etc.