Développeur Web RoR

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

mardi 31 janvier 2012

Text : le gem qui contient un liste d'algorithme de chaine (distance de levenshtein, Soundex, Metaphone,...)

Le gem ruby text rend disponible certains algorithmes pour les chaines de caractères (Soundex, levenshtein, Metaphone). Ce rubygem peut-être pratique pour connaitre les similitudes entre deux chaines (levenshtein). A retenir !

Pour info : 

Soundex : est un algorithme phonétique d'indexation de noms par leur prononciation en anglais britannique (http://fr.wikipedia.org/wiki/Soundex)

Levenshtein : mesure la similarité entre deux chaînes de caractères. (http://fr.wikipedia.org/wiki/Distance_de_Levenshtein)

Metaphone : est un algorithme phonétique, algorithme pour indexer les mots selon leur sonorité lorsque prononcé en anglais. (http://fr.wikipedia.org/wiki/Metaphone)

mercredi 25 janvier 2012

Créer une application rubyonrails avec une version spécifique de rails

Comment faire pour utiliser une version spécifique de rails ? Ce n'est pas très compliqué : rails _VERSION_.

Exemples 

rails _3.0.7_ new myapp

rails _3.1.3_ new myapp

rails _3.2.0_ new myapp

Pour connaitre les versions de rails installées sur le système il suffit de faire :

gem list rails

Le but était pour moi de vérifier les différences entre des squelettes d'appli rails sous différentes versions. N'oubliez pas : "meld" pour faire des diff de fichiers sous linux c'est top.

mardi 20 décembre 2011

Vos sessions sont trop grosses ! (Erreur : TypeError (can't dump File))

Voici l'erreur que j'ai obtenu sur du vieux code :

TypeError (can't dump File):

  activerecord (3.X.X) lib/active_record/session_store.rb:54:in `dump'

Cela viendrait de la taille des sessions (ça peut également des données non-sérialisables). A la fin de la méthode :
session[:qqch] = nil
Résoud le problème, il ne reste plus qu'à refactoriser votre code pour ne plus stocker des objets ruby mais plutôt des identifiants vers ces objets.

Voici l'article à lire : http://www.freezzo.com/2008/06/18/rails-typeerror-cant-dump-file/

mercredi 14 décembre 2011

Timecop : le gem qui permet de voyager dans le temps et le stopper comme Hiro Nakamura

Timecop est donc un gem qui permet de voyager dans le temps et le stopper. De la même manière que FakeWeb, j'ai découvert Timecop sur http://railscasts.com/episodes/276-testing-time-web-requests?view=asciicast

Page de doc et source : https://github.com/jtrupiano/timecop

Très pratique pour les tests, mais également pour effectuer des simulations utilisant le temps.

Article à lire sur les mocks (http://fr.wikipedia.org/wiki/Mock_(programmation_orient%C3%A9e_objet)).

Bon code.

mardi 13 décembre 2011

Puts ne vous suffit plus, pretty print pp est là

Quand on n'utilise pas de débuggeur, Puts est très pratique. Il peut également être intéressant de pretty_printer dans un fichier :

require 'pp'

# Pour afficher en console (ou dans le log du serveur en dev)

pp la_variable

# De cette manière vous pouvez écrire dans le fichier "un_fichier.txt" (pratique pour comparer des fichiers avec meld après...)

# 100 représente la longueur des lignes dans le fichier texte en nombre de caractères.

PP.pp(la_variable, File.open("un_fichier.txt","w"),100)

C'était l'astuce Ruby du mardi matin !

lundi 12 décembre 2011

Générer et parser des flux RSS avec Ruby 1.9.3 sans Gem !

Ruby 1.9.3 inclu de base (stdlib) un générateur et parser de flux RSS et ATOM : 

Je vous laisse visiter ce lien : http://www.ruby-doc.org/stdlib-1.9.3/libdoc/rss/rdoc/RSS.html

Les exemples y sont très clair sur cette page.

mercredi 2 novembre 2011

Rails i18n - Mettre un texte de remplacement si la traduction n'existe pas

Après lecture du code source du module i18n de rails j'ai trouvé. Donc pour mettre un texte de remplacement si une traduction n'existe pas (translation missing), il faut utiliser l'option default pour la méthode t (translate).

Exemple avec une traduction présente :

t(:hello)

#=> "hello"

Exemple avec une traduction absente :

t(:test)

#=> "<span class=\"translation_missing\" title=\"translation missing: en.test\">Test</span>"

Donc si vous faites ceci vous n'avez plus d'erreur :

t(:test, :default => "texte par défaut")

#=> "texte par défaut"

Pour tester en console il faut créé une instance ActionView et précéder la fonction t de cette instance, comme suit : 

av = ActionView::Base.new

av.t(:hello)

Sinon sur le net, un développeur propose une super idée : personnaliser l'exception levé  et faire appel à l'API de Google traduction

Voici le code pour cette 2ème solution (enfin vue que l'API va devenir payante) :


module I18n
  class << self
    def raise_custom_exception(exception, locale, key, options)
      if MissingTranslationData === exception
        # do something with the missing translation
        return translation
      else
        raise exception
      end
    end
  end
end
I18n.exception_handler = :raise_custom_exception
Url de la discussion : http://www.ruby-forum.com/topic/220355

- page 1 de 10