Développement Web Ruby
par Sylvain CLAUDEL

Derniers posts

Mettre des headers personnalisés dans les requêtes des tests fonctionnels et d'intégration de rubyonrails

Date d'édition 2011-07-05 à 16:32

Il peut être intéressant de spécifier des headers personnalisés pour les requêtes des tests fonctionnels (functional test) et des tests d'intégration (integration test). J'ai cherché assez longtemps.

Voilà comment procéder pour les tests d'intégration :


post(:create, {:user => {:name => "Jack"}}, {"CUSTOM_HEADER" => "bar"})

Et comme ceci pour les tests fonctionnels :


@request.env["CUSTOM_HEADER"] = "bar"
post(:create, {:user => {:name => "Jack"}})

Sources : https://twobitlabs.com/2010/09/setting-request-headers-in-rails-functional-tests/ , https://guides.rubyonrails.org/testing.html#instance-variables-available

Conversion de base en ruby

Date d'édition 2011-07-01 à 17:03

Pour le puzzle 5 de Google Chromebook, j'ai eu besoin de changer de base pour faire des tests. (je n'ai pas trouvé l'énigme)

La fonction to_s de ruby permet donc de convertir l'integer Y en chaine Z de base X spécifiée

Y.to_s(X)

=> Z

A l'inverse, la fonction to_i de ruby permet donc de convertir la chaine Z (qui symbolise un entier en base X) en integer de base 10 :

Z.to_i(X)

=> Y

Voici quelques exemples tirés de la console

En binaire base 2

irb(main):001:0> 50.to_s(2)
=> "110010"
irb(main):002:0> 3.to_s(2)
=> "11"
irb(main):003:0> 35.to_s(2)
=> "100011"
irb(main):004:0> 35.to_s(2).to_i(2)
=> 35
irb(main):005:0> "100011".to_i(2)
=> 35
irb(main):006:0> "100A011".to_i(2)
=> 4
irb(main):007:0> "100".to_i(2)
=> 4

Exemple en hexa base 16

ruby-1.9.2-p0 > "1A".to_i(16)
 => 26 
ruby-1.9.2-p0 > "A".to_i(16)
 => 10 
ruby-1.9.2-p0 > "B".to_i(16)
 => 11 

Et comme vous avez pu le voir, ça fonctionne avec Ruby 1.8 et Ruby 1.9.

Convertir fichier flash swf en html5 javascript svg css

Date d'édition 2011-06-29 à 08:51

Que de nouveauté aujourd'hui ! Après le Google +, voici Google Swiffy qui permet de convertir les fichiers flash swf en html5 svg css js. Je n'ai pas testé personnellement mais les démos sont pas mal. Reste à voir ce que ça donne pour l'utilisation du micro et de la webcam, sachant que les spec html5 ne sont pas encore opérationnelles/implémentées.

Voici le lien https://swiffy.googlelabs.com/ et pour les démos : https://swiffy.googlelabs.com/gallery.html

Google fait des tests d'ergonomie

Date d'édition 2011-06-28 à 10:37

Avant hier j'ai eu des nouvelles couleurs sur la page de recherche Google ainsi que le formulaire de recherche voir la capture :


Aujourd'hui c'est la barre commune sur les sites de Google qui change de couleur voir cette deuxième capture :


Google serait-il en train de remplacer les vert et bleu mythique des SERPS par du rouge et du gris ?

RubyOnRails 3 ActiveRecord un cas d'utilisation d'has_many/belongs_to

Date d'édition 2011-06-22 à 13:40

Bon voici un bon cas bien complexe de relation à gérer avec rubyonrails 3 et ActiveRecord :

Le but est de représenter les relations familiales (family_relationship) de personne (contact).

 - Table contacts (qui représente un être humain avec ses coordonnées).

 - Table family_relationships (qui représente une relation entre deux êtres humains, lien de père, mère, frère, soeur), avec deux clés étrangères qui pointent vers contacts : master_id et slave_id et un champ type (integer : 1 : fils, 2 : fille, 3 : père, 4 : mère).

On lit la relation comme suit : Master a pour {père|mère|fils|fille} slave.

Nous voulons pouvoir faire :

contact.fathers 

=> [#<Contact id: 7.....>]

contact.mothers 

=> [#<Contact id: 9.....>]

contact.daughters 

=> [#<Contact id: 11.....>,  #<Contact id: 8......> ]

contact.sons 

=> [#<Contact id: 12.....>,  #<Contact id: 13......> ]

Ici on ne s'occupera pas de gérer la contrainte UN SEUL père et UNE SEULE mère.

Voici comment définir nos models :

Ici le model Contact

class Contact < ActiveRecord::Base
  has_many :family_relationship_as_masters, :foreign_key => "master_id", :class_name => "FamilyRelationship"
  has_many :family_relationship_as_slaves,  :foreign_key => "slave_id", :class_name => "FamilyRelationship"
  has_many :sons,      :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',1]
  has_many :daughters, :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',2]
  has_many :fathers,   :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',3]
  has_many :mothers,   :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',4]
end

Et là le model FamilyRelationship

class FamilyRelationship < ActiveRecord::Base
  belongs_to :master, :foreign_key => "master_id", :class_name => "Contact"
  belongs_to :slave, :foreign_key => "slave_id", :class_name => "Contact"
end

Je crois qu'il s'agit de la relation la plus compliquée que j'ai faite dans une application RubyOnRails (enfin qui utilise de plus d'options aux méthodes de jointure has_many et belongs_to en tout cas)

Développement ruby et geekeries - rivsc