Archive for the ‘rails’ Category

Cours du soir JRuby

Jeudi, octobre 30th, 2008

Ce Mardi 28 Octobre, dans le cadre des cours du soir de Valtech, j’ai présenté une démonstration de la librairie open source JRuby, implémentation 100% Java de Ruby.
A l’aide de travaux pratiques, avec les 7 participants présents, nous avons pu :

  • faire un bref rappel du langage Ruby (pendant 1H20 : définition de classe, héritage, module, mixin)
  • découvrir Jirb, shell permettant de découvrir les classes Ruby et Java (dans un jar)
  • utiliser des classes Java avec du code Ruby
  • découvrir Netbeans 6.1, notamment ses facultés “Ruby”
  • en 30 minutes, créer un projet Ruby On Rails, avec 2 modèles, création en scaffold des triplets MVC
  • déployer cette application Ruby on Rails, (grâce aux taches rake de Netbeans qui permettent de créer un war à partir d’un projet RoR) sur un conteneur de servlets, Tomcat en l’occurence

Vous pouvez télécharger, à condition de respecter la licence ci dessous, les tps zippés ainsi que la présentation, au format OpenDocument (à lire avec OpenOffice), ou pdf; vous pouvez aussi choisir de juste consulter la présentation avec l’applet flash ci dessous.



Prochain rendez vous Ruby/Rails à Paris On Rails !

Creative Commons License
Cours du soir JRuby by Anthony Dahanne est mis à disposition selon les termes de la licence Creative Commons Paternité-Pas d’Utilisation Commerciale-Partage des Conditions Initiales à l’Identique 2.0 France.
Basé(e) sur une oeuvre à
Les autorisations au-delà du champ de cette licence peuvent être obtenues à http://blog.dahanne.net.

Retour sur le bar camp Rails du 17 Mai , à la Cantine (Paris)

Mercredi, mai 21st, 2008

Intéressé depuis quelque temps par le monde de Ruby et Ruby on Rails, j’ai décidé de m’inscrire au BarCamp Rails ce Samedi 17 Mai à Paris
A partir de 10h, les organisateurs ont mettent en place un tableau où les pesonnes désirant exposer leur travail ou découverte s’inscrivent.
(il y a 5 espaces disponibles à La Cantine, apparemment il faisait chaud à l’étage!; et les créneaux horaires durent de 1 à 2 heures)
Ensuite, après avoir présenté brièvement Silicon Sentier et d’autres sponsors, les organisateurs ont passé le micro à chacun des participants (une centaine quand même !) afin qu’ils se présentent : prénom + tags (j’ai choisi les tags développeur Java J2EE, d’autres tags comme “fille” ou “windows” étaient plus originaux !)
Les personnes s’étant inscrites sur le tableau démarrèrent dès 10h30.
Il y en avait pour tout le monde : débutant comme expérimenté ! (présentation ruby on rails, ruby en entreprise, facebook on rails !, etc…)
Voici mon choix pour la journée :

10:30 : présentation de l’intégration google maps dans rails avec geokit; par Sébastien Gruhier

Apres une présentation du projet, nous avons procédé à la génération d’une api key chez google maps, afin de pouvoir utiliser l’API (je crois que l’on a droit à 10000 requêtes par jour, à vérifier).
Nous avons ensuite créé un site rails, en ayant pris soin auparavant d’installer les gems de geokit et d’un module d’authentification.
Ensuite nous avons testé l’API par une console Rails, et enfin nous avons codé nos premiers fcihiers Rails avec des cartes.
L’API geokit permet de faire des travaux de geolocalisation (par IP) et de récupération de coordonnées, mais elle ne permet pas de générer des cartes gogole maps (en fait lors de la session nousa vons du coder du javascript pour cécupérer des cartes…)
Pour ceux qui craignent le Javascript, passez votre chemin donc, et dirigez vous plutôt vers un wrapper (comme YM4R sur rubyforge wrapper javascript)

14:30 : présentation jruby par Nicolas Mérouze

nous avons installé jruby bin (.zip ou tar gz).
A l’attaque, en lançant le script bat jruby.bat (ou jruby.sh)on peut d’ores et déjà installer des gems avec
jruby -S gem install un_gem_ruby
Plus généralement,
jruby -S "commande ruby"
Nicolas nous a montré beaucoup d’exemples sur Ruby qui utilise Java (normal il travaille sur un projet qui utilise des librairies java), peu dans l’inverse (dommage); sur le web, j’ai pu remarquer cet article qui permet de découvrir Jruby pour intégrer du Ruby dans Java

16:30 présentation faille sécurité ruby/ecommerce par Webpulser

Pendant cette session les participants ont pu échanger sur leurx expériences Ruby, ensuite l’équipe technique de Webpulser ont fait un petit tour des failles de sécurité en Ruby :
*Injection SQL : en donnant un ‘ à la fin d’une requete GET ,des attaquants pourraient terminer une clause SQL, ==> on utilise le ? à la printf de C pour échapper les caracteres spéciaux
*XSS en donnant du javascript dans l’url; on évite çà avec <%h= %> qui échappe le html
etc…

Sans parler de l’organisation qui était vraiment pro, un accueil chaleureux, bref, ce BarCampRails parisien vallait vraiment le détour !

Port of an J2EE application (with Hibernate) to Ruby on Rails (1.2.3)

Mardi, avril 22nd, 2008

Last week, I ported a J2EE application, using Hibernate for persistence and Capestry for the MVC part of the application to Ruby.
I logically choosed Ruby on Rails as it is the main Web framework for Ruby.
In this post, I describe how I did to perform such a port…
!Important! the application I first wrote this application in Franch, I tried to refactor the code in English, but… I haven(t finished at this time, … sorry folks !

Introducing the bank on line application

This application is composed of 3 models : Client, Compte (account) and Operation
A client has n Comptes (through reference_client) and a Compte has n Operations (through compte_id) :
Bank on line
The application allow the user to :
*login
*see a list of his accounts (after being logged in)
*see the details of one of his account (actually a list of the operations on an account)
*order a transfer between 2 accounts provided that the balance is positive (and the accounts exist)
Quite simple from a user point of view…

Creating the application with Ruby on Rails 1.2.3

The best way to port this new application to RoR, was to create a new RoR project
rails bankonline -d sqlite3
(by the way, I was using the sqlite3 database, to allow an easy installation of the application, the J2EE application was using HSQLDB)
cd bankonline
I was using for this Rad Rails visual editor on a windows platform (no comment…)
The first step to port this application was to create the 3 models.
ruby script/generate model Client
ruby script/generate model Compte
ruby script/generate model Operation
Then I put the contraints on each of these models (the has_many and belongs_to relationships to stick to my diagram), editing their definition files in app/models and also the database definition files, in db/migrate
Once this is done, I can run
rake db:migrate
to load all my db/migrate scripts. (in case I want to revert the changes, I can use rake db:migrate VERSION=0, or VERSION=1 if only want to reverse the migration after the script)

To fill the database with data, I add another migration script :
ruby script/generate migration add_data
I edit it to add some lines in the database and then I migrate :
rake db:migrate

Then the 3 corresponding controllers :
ruby script/generate controller login
ruby script/generate controller gestion

Implementing the login system (session based)

For this, I took example on the depot application login system, from the pragmatic programmers’ book “Agile Web Development with Rails”, but I chose to use not encrypted passwords.
I also chose to use database based sessions, so I edited the config/environment.rb file, line 31, to allow :
config.action_controller.session_store = :active_record_store
Then, I add to create a new table to hold the session data :
rake db:sessions:create

Of course, you need a little bit of code in your app/controllers/login_controller.rb, you have to implement the login and logout methods (or actions, to speak rails); you may also notice the apparition of a “before_filter” call.
The authorize filter is defined in the app/controllers/application.rb file, it will be loaded for every controller, and will check tha t a valid client is in session, or else, it will redirect to the login action, in the login controller.
Finally, you will have to define the views, both in app/views/login, they’re called login.rhtml and logout.rhtml
One last thing : you also need to modify the layout, in app/views/layouts/login.rhtml to display the flash notice before the yield (which includes the display of the view)

<%= flash[:notice] %>

Implementing the account listings and the transfer functionality

We have to code the controller, GestionController, located in gestion_controller.rb
You’ll notice that I’ve replaced the service class in Hibernate by methods inside the controller in Rails, I didn’t want to put it in the model, since the model can’t know how to transfer money.(I think we can discuss that point, but as long as the helpers are dedicated to the view…)
I’ve also used exceptions to raise errors (if the origin account balance is smaller than the transfer amount)
You also have to include the flash notice in the layout, app/views/layouts/gestion.rhtml

That’s it !
launch your rails app
ruby script/server
and try it out in your web browser at : http://localhost:3000/login/login

In a few days I’ll complete this article with the tests and fitnesse fixtures …
To continue …

First version of Bank online RoR to download