Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

Tag - ruby

Fil des billets

mercredi 2 décembre 2015

Utiliser la forme réduite de rescue

Hello,

Il existe une forme raccourci de begin rescue

Au lieu de faire

begin
mon_objet.bidule
rescue
nil
end

on peut utiliser :

(mon_objet.bidule rescue nil)

mercredi 19 août 2015

Comment connaitre les changements qu'il y a eu sur un objet ActiveRecord immédiatement après un save ?


Avant de faire un save il est possible de connaitre les changements/savoir si un objet ActiveRecord a changé en appelant .changes ou changed?
Mais après un save ces fonctions renvoient respectivement [] et false. Il existe néanmoins la méthode previous_changes qui va renvoyer un hash avec la liste des attributes changés ainsi que leurs valeurs précédentes et actuelles.

mercredi 17 juin 2015

Comment ne plus utiliser le default_scope ?

Le default_scope est un scope qui est appelé implicitement à chaque requête ActiveRecord sur le modèle en question.

Le problème c'est qu'on l'oublie vite celui-là... Vaut mieux l'utiliser quand on a de bonnes raisons (un order systèmatique)...

En cas de nécessité absolu de ne pas utiliser le default_scope (c'est là qu'on doit légitimement se poser des questions, hein), il existe une méthode : unscoped. Elle vire tous les scopes précédemment utilisés, donc attention à l'ordre dans lequel vous le chaînez.

Documentation officielle sur ces deux méthodes : http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Default/ClassMethods.html#method-i-default_scope

vendredi 5 juin 2015

Commentaire multiligne en Ruby

Je me souviens avoir cherché, il y a quelques temps sans jamais avoir trouvé une réponse qui fonctionne. Un peu la honte après 5-6 ans de Ruby... Heureusement que ça ne tue pas la honte ^^.

=begin

def une_methode_en_commentaire

  puts "Bidule"

end

=end

La petite subtilité que je n'avais peut-être pas saisi à l'époque est qu'il ne faut pas mettre d'espace avant les "=" sinon ça ne fonctionne pas !

mardi 14 avril 2015

Utiliser Meld sous linux pour voir un diff git sur un fichier local avec sa précédente version.

L'article d'origine est situé ici : https://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy

Je me permets ici juste d'écrire le bout de script en ruby au lieu de python (attention c'est d'une grande complexité ^^).

Donc pour résumer l'article, il faut écrire un script qui renvoie deux paramètres au lieu de sept.

nano /home/sylvain/diff.rb

Mettre les deux lignes ci-dessous dans le script (attention il s'agit d'anti-quote) :

#!/usr/bin/env ruby

`meld #{ARGV[0]} #{ARGV[1]}`

sudo chmod +x /home/sylvain/diff.rb

git config --global diff.external /home/sylvain/diff.rb

git diff monfichier.rb

Ça permet quand même d'avoir un diff plus visuel.

vendredi 30 janvier 2015

Sprockets::FileNotFound in Beautiful#dashboard : couldn't find file 'jquery.ui.all'

Pour corriger l'erreur Sprockets::FileNotFound in Beautiful#dashboard : couldn't find file 'jquery.ui.all' dans une application qui utilise beautiful_scaffold il faut remplacer (dans application-bs.js et application-bs.css) : 

= require jquery.ui.all 

Par  

= require jquery-ui

Bon code.

mercredi 28 janvier 2015

MiniMagick Composite : composition de deux images en préservant la transparence

J'ai joué un peu avec MiniMagick ces derniers temps. Je cherchais à faire une composition de deux images en préservant la transparence.

Après quelques heures de recherche et de test, je me suis mis à tester image magick en ligne de commande. J'avais vraiment un exemple minimaliste et en ligne de commande, ça fonctionnait : la transparence était conservée. 

Fatigué de la différence en mini_magick et image magick j'ai lu le code source de mini_magick et je suis tombé sur ça : 

https://github.com/minimagick/minimagick/blob/master/lib/mini_magick/image.rb#L427

Tiens mais on peut spécifier un format dans la méthode composite (après coup j'ai un peu honte c'était dans la doc : http://www.rubydoc.info/github/minimagick/minimagick/MiniMagick/Image) le fait de choisir png en format de sortie, minimagick va conserver la transparence.

Bref voici un exemple concret (vous noterez la qualité et la précision de mes peintures numériques ^^) :


require 'mini_magick'
# composite -compose Dst-Over -gravity Center fond.png pochoir.png test.png
image = MiniMagick::Image.open("pochoir.png")
image2 = MiniMagick::Image.open("fond.png")
result = image.composite(image2, 'png') do |c|
c.compose "dst-over"
c.gravity "Center"
end
result.write("result.png")

- page 2 de 16 -