Développeur Web RoR

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

Tag - ruby1.9

Fil des billets

vendredi 26 août 2011

Backports : le gem qui fait ce qu'il dit : utiliser les fonctions de ruby 1.9 avec ruby 1.8

Votre application n'est pas encore prête à passer à ruby 1.9, mais ça vous arrangerez bien d'avoir des nouvelles fonctions de ruby 1.9 pas de problème il existe le gem backports

Voici le lien des sources et de la doc : https://github.com/marcandre/backports

mardi 12 juillet 2011

Varargs en ruby pour gérer les OR sql dans un ActiveRelation

J'ai eu besoin récemment de faire des "ou" (or) avec ActiveRecord, pas moyen de faire des ActiveRelation car à chaque méthode where() appelée, ActiveRecord fait un "et" (and). Le nombre de conditions doit également être variable.

Car dans cet exemple : je veux remonter les contacts qui veulent bien être contacté par sms OU BIEN par email  OU BIEN par courrier.

Si j'avais fait ceci dans le but de remonter les contacts qui veulent être contacté par courrier :

armailing.where(' "contacts"."by_email" = ? OR "contacts"."by_sms" = ? OR "contacts"."by_letter" = ? ', false, false, true)

Cela m'aurait aussi remonté les contacts ne désirant pas être contacté par email ainsi que les contacts ne désirant pas être contacté par sms en plus des contacts souhaitant être contacté pas courrier !

donc voici ce que je devrais faire :

armailing.where(' "contacts"."by_letter" = ? ', true)

Et maintenant si je veux pouvoir remonter les contacts souhaitant être contacté par sms ou courrier et que je fais :

armailing.where(' "contacts"."by_email" = ? OR "contacts"."by_sms" = ? OR "contacts"."by_letter" = ? ', false, true, true)

Même problème que tout à l'heure ici ActiveRecord va également remonter les contacts ne désirant pas être contacté par email, voici comment faire :

armailing.where(' "contacts"."by_sms" = ? OR "contacts"."by_letter" = ? ', true, true)

Donc pour finir voici la solution pour tous les cas :

array_of_conditions = []
condsms    = true #ou false
if condsms then
  array_of_conditions << '"contacts"."by_sms" = ?'
end
condemail  = false #ou true
if condemail then
  array_of_conditions << '"contacts"."by_email" = ?'
end
condletter = true #ou false
if condletter then
  array_of_conditions << '"contacts"."by_value" = ?'
end
if not array_of_conditions.empty? then
  armailing = armailing.where("(" + array_of_conditions.join(" OR ") + ")", *Array.new(array_of_conditions.length, true))
end

De ce fait ici je dois passer à ActiveRecord un tableau de taille variable à la méthode where(). Et un tableau est différent d'une liste d'argument :

  armailing = armailing.where(".... ? ..... ? ....? ", [true, true, true])

Différent de :

  armailing = armailing.where(".... ? ..... ? ....? ", true, true, true)

La parade c'est d'utiliser les varargs avec le signe *.

  armailing = armailing.where(".... ? ..... ? ....? ", *[true, true, true])

Pareil que :

  armailing = armailing.where(".... ? ..... ? ....? ", true, true, true)

Bon coding !

mercredi 26 janvier 2011

Exemples d'utilisation de la class net::http de ruby

Voici de simples exemples de cas d'utilisation de la class net::http de ruby; tout est sur github à cette adresse :

https://github.com/augustl/net-http-cheat-sheet

- Post de form

- Upload de fichier

- Get sur une url

- Personnalisation du user-agent

Franchement sympa, je vous conseille de lire ces petits scripts.

Source : http://sordyl.info/2011/01/26/ruby-net-http-cheat-sheet-github/

vendredi 3 septembre 2010

De Ruby 1.8.7 à Ruby 1.9.2, changement et différence

ruby

Un joli slideshow sur les différences entre ruby 1.8 et ruby 1.9. C'est ici que ça se passe (flèche droite pour aller à la "diapo" suivante)

http://slideshow.rubyforge.org/ruby19.html#11

Bonne lecture (et arrachage de cheveux)

jeudi 2 septembre 2010

Installer rubyonrails 3.0.0 et ruby 1.9.2 avec rvm sur ubuntu 10.04

Je suppose que vous avez déjà un ruby (1.8.7) qui fonctionne.
Il faut installer curl et git, si vous ne les avez pas :
sudo aptitude install curl git-core

Installation de RVM (ruby version manager)

bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
Ensuite il faut suivre ce qui est dit à l'écran :
Vérifer qu'il n'y a pas de return dans le fichier /home/votrecompte/.bashrc
Si il n'y en a pas on mets la ligne cité :
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
à la fin du fichier sinon on encapsule le contenu du fichier par
if [[ -n "$PS1" ]] ; then
et
fi
Mais normalement tout est expliqué !
Ensuite fermer la console, et en réouvrir une (pour le fichier bashrc soit rechargé)

Installation de ruby 1.9.2

rvm install 1.9.2
Une fois installé il faut l'utiliser :
rvm 1.9.2
Vérifier quelle version est dans le PATH :
ruby -v
1.9.2 ? Bon ben c'est bon ! La suite...

Installation de rubygems avec ruby 1.9.2

rvm 1.9.2 --rubygems

Installation de rails 3.0.0 (sans la doc parce que l'on a pas le temps :-) )

gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
gem install rails --no-ri --no-rdoc
C'est fini ! Vous pouvez maintenant créer une nouvelle application :
rails new myapp
Installation des gems demandés par l'application (à peu près pareil que le feu "rake gems:install") (les gems à utiliser se trouvent dans myapp/Gemfile)
bundle install
Et on démarre le serveur
cd myapp && rails server
Si vous remarquez des erreurs signalez-les moi ! J'espère que c'est clair...