Archives (avril 2009)



EdgeRails : Nouveau routeur, protect_from_forgery et dépendances entre modules



Ecrit par Anthony Heukmes le 17 avril 2009 16:16

0 commentaire



Le chemin vers Rails 3 suit son cours et vous pouvez découvrir beaucoup de nouveautés sur GitHub ces derniers temps.

Première bonne nouvelle, Carl Lerche & Josh Peek collaborent sur un nouveau routeur (un middleware Rack, qui pourra donc être utilisé par d'autres frameworks que Rails). Selon Carl, les performances sont deux fois supérieures à celles du routeur de Merb (et donc 4x supérieures à Rails).

Plus d'informations sont disponibles sur le groupe Google de Rack.

Une autre bonne nouvelle, nous n'aurons plus besoin d'inclure un "authenticity token" dans nos requêtes Ajax écrites à la main!
Si vous chipottez avec Ajax, vous avez certainement eu le plaisir d'obtenir l'erreur "Invalid Authenticity Token" après avoir tentez d'envoyer une requête Ajax de type POST.
La solution est d'ajouter ce fameux token dans les paramètres et de votre requête ou de désactiver la vérification des attacks CSRF dans votre contrôleur en utilisant protect_from_forgery :except => :my_action.
Avec Rails 3, plus rien de cela ne sera nécessaire!

La méthode touch a également été ajoutée aux modèles ActiveRecord.
Une fois invoquée, elle sauvera l'enregistrement courant dans la base en mettant à jour l'attribut updated_at.

Cela peut également être utilisé en combinaison avec une association de type belongs_to.
Lorsque l'instance est sauvée/supprimée, le champs updated_at de l'enregistrement associé sera donc lui aussi "touched".


belongs_to :company, :touch => true


Si vous suivez l'évolution du code internet de Rails, vous avez probablement été surpris par des mots-clés tels que setup, depends_on ou encore use.
Vous pouvez voir un exemple dans ce commit.

Le code source peut être trouvé dans ActiveSupport (activesupport/lib/active_support/core_ext/module/setup.rb) :


class Module
attr_accessor :_setup_block
attr_accessor :_dependencies

def setup(&blk)
@_setup_block = blk
end

def use(mod)
return if self < mod

(mod._dependencies || []).each do |dep|
use dep
end
# raise "Circular dependencies" if self < mod
include mod
extend mod.const_get("ClassMethods") if mod.const_defined?("ClassMethods")
class_eval(&mod._setup_block) if mod._setup_block
end

def depends_on(mod)
return if self < mod
@_dependencies ||= []
@_dependencies << mod
end
end


Il s'agit d'une façon beaucoup plus propre de gérer l'inclusion et les dépendances des modules. Yehuda Katz a écrit un article à ce sujet.

Ajoutez des datagrids très facilement à vos applications Ruby on Rails



Ecrit par Anthony Heukmes le 13 avril 2009 14:53

89 commentaires



Insérer des datagrids dans une application Ruby on Rails en quelques lignes de code est désormais possible.

Testez la démo de mon nouveau plugin : 2dcJqgrid.

Les datagrids sont basés sur un plugin jQuery et supportent les fonctionnalités suivantes :

- Ajax
- Pagination
- Tri
- Recherche
- Sélections multiples
- Master-Details
- Manipulation des données (création, édition et suppression)
- Et plus encore ...

Ruby : se connecter à un serveur FTP via un proxy



Ecrit par Anthony Heukmes le 08 avril 2009 12:17

1 commentaire



La librairie Net::FTP de Ruby ne permet pas de se connecter directement à un serveur FTP en passant par un proxy.
Vous devez pour cela envoyer vous-même vos commandes au serveur :

@ftp = Net::FTP.new

@ftp.connect("adresse_proxy")
@ftp.sendcmd("USER identifiant_ftp@adresse_ftp identifiant_proxy")
@ftp.sendcmd("PASS password_ftp")
@ftp.sendcmd("ACCT password_proxy")
@ftp.passive = true


Prenez évidemment le temps de remplacer les valeurs par vos adresses et données d'identification.
Ce code considère que le proxy que vous utilisez est sécurisé par identifiant / mot de passe.