Mootools On Rails

0 commentairescommentaires

07/ 02/ 2008

Voilà mon plugin Rails Mootools Helper s’appelle dorénavant Mootools On Rails ou MoR pour les intimes.

Le plugin a été écrit sur la même base que le plugin YUI On Rails de PJ Hyett.

Comment l’installer ?

C’est très simple il suffit de l’installer tout d’abord à l’aide de la commande suivante :

$ ./script/plugin install http://mootools-on-rails.googlecode.com/svn/trunk
renommer le dossier trunk en mootools_on_rails :
$ cd vendor/plugins
$ mv trunk mootools_on_rails

Une fois le plugin installé, il est important de lancer la commande rake permettant de copier le fichier mootools.js dans le dossier public/javascripts de votre application à l’aide de cette commande :

$ rake mootools_on_rails:install

Vous êtes maintenant prêt à utiliser mootools dans votre application !

Comment ça fonctionne ?

C’est très simple, certaines choses ne changeront pas. C’est transparent pour vous. Prenons par exemple le layout suivant, comme layout de votre application par défaut : la ligne suivante :

générait auparavant les lignes suivantes :

Alors qu’après l’installation du plugin MootoolsOnRails les lignes suivantes seront générées :

Le plugin est toujours en développement ! Il n’y a pas encore de doc pour ce plugin malheureusement mais ça devrait venir rapidement. Pour l’instant ce plugin est plutôt destiné aux curieux qui pourront dèjà s’amuser avec certains helpers déjà présent.

Bonne nouvelle également, l’équipe s’agrandit : Didier Lafforgue m’a rejoint récemment dans l’aventure. Nous allons essayer de créer un site spécialement pour ce plugin dans un futur proche.

Si vous aussi vous avez envie de participer à ce plugin, n’hésitez pas à m’envoyer un mail à mfosse[at]kawooa[dot]org.

Et pour le reste Stay tuned !

Posté par pointcom

Créer une application Rails à partir de la version edge

06/ 12/ 2006

Attention, billet en cours de rédaction.

Il peut être intéressant de développer une application à partir de la version edge de rails afin de, par exemple, tester les nouveautés à venir dans la future version stable de Rails.

Pour celà, vous pouver lancer les commandes suivantes :

Sous Unix/Unix-like :

$ mkdir -p monprojet/vendor
$ svn co http://dev.rubyonrails.com/svn/rails/trunk monprojet/vendor/rails
$ cd monprojet
$ ruby vendor/rails/railties/bin/rails .

Sous Windows :

C:\rails> mkdir monprojet/vendor
C:\rails> svn co http://dev.rubyonrails.com/svn/rails/trunk monprojet/vendor/rails
C:\rails> cd monprojet
C:\rails> ruby vendor/rails/railties/bin/rails .

Via : Un article de Tim Lucas sur Sitepoint.com

Posté par pointcom

Différences entre String et Symbol

28/ 11/ 2006

Attention ! Billet en cours de rédaction.

Créons un tableau contenant cinq objets String :

1
2
3
4
5
tab_string = Array.new

5.times do
  tab_string << "string"
end

Créons un tableau contenant cinq objets Symbol :

1
2
3
4
5
tab_symbol = Array.new

5.times do
  tab_symbol << :symbol
end

Vérifions l’espace mémoire de chacunes des variables de chaque tableau :

Pour le tableau de String :

1
2
3
4
5
6
tab_string.each {|v| puts v.object_id }
24875790
24875780
24875770
24875760
24875750

Ici on peut voir que chaque objet String contenu dans le tableau tab_string aloue un espace mémoire différent (donc un identifiant d’objet différent) alors que l’objet String à la même valeur : “string”.

Pour le tableau de Symbol:

1
2
3
4
5
6
tab_symbol.each {|v| puts v.object_id }
244098
244098
244098
244098
244098

Pour le tableau de Symbol, c’est différent. On s’aperçoit que chaque objet Symbol contenu dans le tableau tab_symbol appartiennent au même espace mémoire.

Posté par pointcom

Comment utiliser une ancienne version de Rails ?

27/ 11/ 2006

Il peut être intéressant d’utiliser une ancienne version de Ruby On Rails afin de tester par exemple la compatibilité d’un de vos plugins.

Tout d’abord, pour connaître les versions présentes dans votre référentiel local de gem, tapez la commande suivante :
$ gem search rails -l
rails (1.1.6, 1.1.4, 1.0.0)
    Web-application framework with template engine, control-flow layer,
    and ORM.

On s’aperçoit que je possède les versions 1.0.0, 1.1.4 et 1.1.6 de Rails.

Supposons que je veuille créer une nouvelle application Rails mais avec une version antérieure à celle actuelle. Prenons la version 1.0.0.

Pour créer cette application il va me falloir lancer la commande suivante :

$ rails _1.0.0_ monapp

Celà aura pour effet de créer une arborescence de projet à partir du gem de la version 1.0.0. Mais ce n’est pas tout ! Si je lance la commande about on s’aperçoit que la version de rails qui est chargée est la dernière en date (à savoir la 1.1.6).

$ ./script/about
About your application's environment
Ruby version                 1.8.5 (i386-mswin32)
RubyGems version             0.9.0
Rails version                1.1.6
Active Record version        1.14.4
Action Pack version          1.12.5
Action Web Service version   1.1.6
Action Mailer version        1.2.5
Active Support version       1.3.1
Application root             D:/dev/test/monapp
Environment                  development
Database adapter             mysql

Pour pallier à ce problème, éditer le fichier /monapp/config/boot.rb et ajouter la lignes suivantes :


require_gem 'rails', '1.0.0'

Ce qui donne le fichier boot.rb suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Don't change this file. Configuration is done in config/environment.rb and config/environments/*.rb

unless defined?(RAILS_ROOT)
  root_path = File.join(File.dirname(__FILE__), '..')
  unless RUBY_PLATFORM =~ /mswin32/
    require 'pathname'
    root_path = Pathname.new(root_path).cleanpath(true).to_s
  end
  RAILS_ROOT = root_path
end

if File.directory?("#{RAILS_ROOT}/vendor/rails")
  require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
else
  require 'rubygems'
  require_gem 'rails', '1.0.0'
  require 'initializer'
end

Rails::Initializer.run(:set_load_path)

Et maintenant vérifiions en lançant de nouveau la commande about :

$ ./script/about
About your application's environment
Ruby version                 1.8.5 (i386-mswin32)
RubyGems version             0.9.0
Rails version                1.0.0
Active Record version        1.13.2
Action Pack version          1.11.2
Action Web Service version   1.0.0
Action Mailer version        1.1.5
Active Support version       1.2.5
Application root             D:/dev/test/monapp
Environment                  development
Database adapter             mysql

Voilà, notre application utilise bien la version 1.0.0.

Posté par pointcom

Comment utiliser GEM ?

22/ 11/ 2006

Attention ! Billet en cours de rédaction.

Introduction

GEM est le gestionnaire de paquetages (packages) de Ruby. Il permet d’installer de nouvelles bibliothèques autres que ceux déjà présent dans la bibliothèque standard de Ruby.

Installer un paquetage

Si on ne connaît pas exactement le nom du paquetage, on peut faire une demande auprès du serveur comme cela :

$ gem search magick -r

Dans cet exemple nous intérogeons le serveur afin qu’il cherche tous les paquetages qui ont un nom ressemblant à “magick” et/ou si ce mot est présent dans leur description.

L’option -r précise que l’on fait une demande réseau (remote), c’est à dire qu’il intérogge le référentiel serveur et non le référentiel local.

supprimer un paquetage

Il suffit pour se faire de lancer la commande suivante :

$ sudo gem uninstall rmagick

Ici, rmagick est le nom du paquetage à supprimer. Bien sur, il convient de remplacer ce paquetage par celui que vous voulez réellement supprimer de votre système.

Posté par pointcom

Utiliser SQLite3 avec Rails sous Windows

22/ 11/ 2006

Attention ! Billet en cours de rédaction.

Installation de SQLite pour Windows

Tout d’abord si vous ne l’avez pas déjà fait, téléchargez l’archive de SQLite3 à cette adresse : http://www.sqlite.org/download.html

Vous trouverez le lien de cette archive dans la section Precompiled Binaries For Windows de la page. à l’heure ou j’écris ce billet le lien de la dernière version est : sqlite-3_3_8.zip

Une fois télécharger dézippez l’archive dans le dossier c:\dev\sqlite3 (par exemple). Ajoutez, maintenant, le chemin d’accés à l’executable SQLite3 dans votre PATH windows.

Un petit test pour voir si tout est bon. lancez l’invite de comande de windows et tapez la commande suivante :

C:\>sqlite3

Vous devriez avoir cela comme rendu :

C:\>sqlite3
SQLite version 3.3.7
Enter ".help" for instructions
sqlite>

Pour sortir de la console interactive de SQLite3 tapez .quit .

Installation de la DLL pour Windows

Il nous faut maintenant installer une DLL windows que l’on trouvera toujours le site officiel de SQLite. Cette fois-ci, l’archive à télécharger se trouve toujours dans la section Precompiled Binaries For Windows de la page mais se nomme : sqlitedll-3_3_8.zip

Installation de l’interface Ruby pour SQLite3

Le gem sqlite3-ruby est une interface Ruby pour SQLite3. Ce gem a été développé par Jamis Buck un développeur de la core team de Rails.

Donc pour installer ce joli gem, il suffit de lancer la commande suivante :

$ sudo gem install sqlite3-ruby
Posté par pointcom

Système de login avec Rails

15/ 11/ 2006

Attention ! Billet en cours de rédaction.

Beaucoup essayent des plugins différents pour gérer le système de login de leur application Rails. Nou allons voir ici comment en créer un rapidement sans avoir à recourir à l’un de ces plugins.

Vous allez voir c’est assez simple :

Création du model User

Il suffit de lancer tout simplement la commande :

$ ./script/generate model User

Création du controller Account

Ensuite, nous allons créer le contrôleur Account qui va gérer le système de login de notre application. Tapez la commande suivante :

$ ./script/generate controller Account login signup

Modification du contrôleur

Voilà à quoi ressemble le fichier :

1
2
3
4
5
6
7
class Account < ApplicationController
  def login
  end

  def signup
  end
end

Il faut le modifier comme celà :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Account < ApplicationController
  def login
    return unless request.post?
    # authenticate est une métode qu'on implémentera, ensuite, dans le Model 'User'
    @user = User.authenticate(params[:email], params[:password]) model
    if @user.nil?
      session[:user] = @user.id
      redirect_to :controller => "admin/general", :action => "config"
    end
  end

  def signup
    return unless request.post?
    @user = User.new(params[:user])
    if @user.save
      redirect_to :controller => "admin/general", :action => "config"
    else
      flash[:notice] = "Error"
      redirect_to  :action => "login"
    end
  end
end

Modification du Model

Nous allons, maintenant, modifier le modèle pour lui ajouter la méthode d’authentification authenticate et la méthode pour crypter le mot de passe encrypt.

Voilà à quoi ressemble le source :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
require 'digest/md5'
class User < ActiveRecord::base
  before_save :encrypt_password
  validates_presence_of :email, :password
  validates_uniqueness_of :email, :password

  def encrypt_password
    self.password = encrypt(self.password)
  end

  def authenticate(email, password)
    find_by_email_and_password(email, encrypt(password))
  end

  def encrypt(password)
    self.class.encrypt(password)
  end

  # Encrypte le mot de passe
  # en créant une empreinte MD5 unique
  def self.encrypt(password)
    Digest::MD5.hexdigest(password)
  end

end
Posté par pointcom

Notions Ruby pour Rails

15/ 11/ 2006

Attention ! Billet en cours de rédaction.

Pour ceux qui veulent commencer rapidement à développer une application Ruby On Rails, il est important d’avoir quelques notions de Ruby et connaître égelement les conventions de nommage des variables, classes, etc…

Une classe se définit comme ceci :

1
2
class MaClasse
end

Le nom d’une classe doit commencer par une majuscule et si le nom d’une classe est composé de plusieurs mots, il faut mettre une majuscule à chaque nouveaux mots.

exemple : Document Parser => DocumentParser

Ensuite, en Ruby, il existe plusieurs type de variable. Il existe :
  • les variables locales
  • les variables d’instance
  • les variables de classe
  • les variables globales

Les variables locales

Les variables locales se définissent tout simplement à l’aide d’un nom en minuscule et si il est composé de plusieurs mots les espaces entre ceux-ci sont transformés par des underscore ’_’.

exemple :

1
2
3
4
[...]
user_login = "pointcom"
person = {:username => "pointcom", :address => "12 rue de la mare"}
[...]

Les variables d’instance

Ces variables sont précédés d’un ’@’ et respectent la même règle que les variables locales.

1
2
3
4
5
6
7
8
9
10
11
12
class Person
  @nb_people = 0
  def initialize(firstname, lastname)
    @nb_people += 1
    @firstname = firstname
    @lastname = lastname
  end

  def greeting
    "Bonjour #{@firstname} #{@lastname}, votre identifiant est le #{@nb_people}"
  end
end

Execution du code :

1
2
3
4
5
6
p = Person.new("mathieu", "fosse")
p.greeting
=> "Bonjour mathieu fosse, votre identifiant est le 1 !"
p = Person.new("dave", "thomas")
p.greeting
=> "Bonjour dave thomas, votre identifiant est le 1 !"

On s’apperçoit donc que les variables @firstname et @lastname sont bien partagées entre les différentes méthodes de la même instance. On s’apperçoit également que la variable @nb_people reste à 1 car entre deux instances différente cette variable n’est pas partagée.

Pour rémédier à celà il faut utiliser une variable de classe.

Les variables de classe

Cette variable a la particularité d’être visible dans l’ensemble des instances d’une même classe.

Prenons l’exemple précédent :

1
2
3
4
5
6
7
8
9
10
11
12
class Person
  @@nb_people = 0
  def initialize(firstname, lastname)
    @@nb_people += 1
    @firstname = firstname
    @lastname = lastname
  end

  def greeting
    "Bonjour #{@firstname} #{@lastname}, votre identifiant est le #{@@nb_people}"
  end
end

Execution du code :

1
2
3
4
5
6
p = Person.new("mathieu", "fosse")
p.greeting
=> "Bonjour mathieu fosse, votre identifiant est le 1 !"
p = Person.new("dave", "thomas")
p.greeting
=> "Bonjour dave thomas, votre identifiant est le 2 !"

Cette fois-ci la variable @@nb_people est bien partagée entre les deux instances.

Les types

Contrairement à JAVA qui utilise des typages fort, Ruby lui utilise des typages dynamiques (ou Duck Typing).

C’est à dire que à l’inverser de JAVA (par exemple) il ne faut pas définir la variable avec un type (déclaration) avant de lui affecter une valeur (affectation).

Clairement le Duck Typing (la typage canard) se définit comme celà :

Si votre objet marche comme un canard et fait “coin coin” comme un canard alors c’est un canard !

Exemple :

Affectation de différentes variable de différents types de données :

1
2
3
4
5
firstname = "mathieu"
note = 12.5
nb_people = 135
config = {:adapter => "sqlite3", :database => "db/development.sqlite3"}
people = ["renaud", "christophe"]

Affichage du type (de la classe) auquel appartient la variable :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
firstname.class
=> String

note.class
=> Float

nb_people.class
=> Fixnum

config.class
=> Hash

people.class
=> Array

On peut tout de même définir la classe à laquelle appartient une variable comme cela :

1
2
3
firstname = String.new
config = Hash.new
people = Array.new

les méthodes

Les méthodes se définissent comme cela :

1
2
3
4
5
6
7
8
class MaClasse
  def initilialize
  end

  def ma_methode
    puts "coucou"
  end
end

La méthode ma_methode est une méthode d’instance. Une méthode d’instance signifie que cette méthode ne peut être appelée que lorsque un objet MaClasse a été instancié.

Exemple :

Pour appeler cette méthode il faut faire :
1
2
3
ma_classe = MaClasse.new
ma_classe.ma_methode
=> "coucou"

Alors que ceci ne va pas appeler cette méthode :

1
2
MaClasse.ma_methode
=> NoMethodError: undefined method `ma_methode' for MaClasse:Class

Une erreur est notifiée car le dernier appel à la méthode ma_methode supposerai que cette méthode est statique or elle est dynamique puisque c’est une méthode d’instance.

Les méthode statique se définissent comme cela :

1
2
3
4
5
6
7
8
9
10
11
12
class MaClasse
  def initilialize
  end

  def ma_methode
    puts "coucou"
  end

  def self.ma_methode_statique
    puts "bonjour"
  end
end

Le mot self représente la classe elle même (comme le this en JAVA). Ceci permet (dans notre cas) de préciser que notre méthode sera statique.

Si vous avez beaucoup de méthodes statiques dans votre classe vous pouvez écrire le code suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class MaClasse
  def initilialize
  end

  def ma_methode
    puts "coucou"
  end

  def class << self
    def ma_methode_statique
      puts "bonjour"
    end

    def ma_methode_statique2
    [...]
    end

    def ma_methode_statique3
    [...]
    end

    def ma_methode_statique4
    [...]
    end
  end
end

L’héritage

L’héritage en ruby.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Language
  def orientation
    "Left to Right"
  end
end

class FrenchLanguage < Language
end

class EnglishLanguage < Language
end

class HebrewLanguage < Language
  def orientation
    "Right to Left"
  end
end

Le mixin

Le Mixin est une particularité de Ruby

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module TranslationSystem
  def translate
    [...]
  end
end

class Language
  include TranslationSystem
  def orientation
    "Left to Right"
  end
end

class FrenchLanguage < Language
end

class EnglishLanguage < Language
end

class HebrewLanguage < Language
  def orientation
    "Right to Left"
  end
end

Ruby est un langage très dynamique

Exemples :

Posté par pointcom

Installer Ruby On Rails sous Mac OS X

15/ 11/ 2006

Attention ! Billet en cours de rédaction.

Récupération des sources

Nous allons créer un dossier ou seront stocké toutes les sources téléchargée.

$ mkdir ~/src

Téléchargons maintenant :

$ curl -O ftp://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
$ curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5.tar.gz
$ curl -O http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz

Installation de Readline

$ tar xzf readline-5.2.tar.gz
$ cd readline-5.2
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

Installation de Ruby

$ tar xzf ruby-1.8.5.tar.gz
$ cd ruby-1.8.5
$ ./configure --prefix=/usr/local --enable-pthread --with-readline-dir=/usr/local
$ make
$ sudo make install
$ sudo make install-doc

Installation de Rubygem

$ tar xzf rubygems-0.9.0.tgz
$ cd rubygems-0.9.0
$ sudo /usr/local/bin/ruby setup.rb

Installation de Rails

$ sudo gem install rails --include-dependencies

Liens connexes

Posté par pointcom

Installer Ruby On Rails sous Windows

30/ 10/ 2006

Attention ! Billet en cours de rédaction.

One-Click Installer pour Windows

Installer One-Click Installer pour Windows permet d’installer facilement Ruby sur un Ordinateur sous Windows à l’aide d’un simple binaire (.exe).

Tout d’abord, télécharger la dernière version de l’executable : http://rubyforge.org/frs/?group_id=167&release_id=6672

Installer One-Click Installer pour Windows

Double-cliquez tout simplement sur l’executable précédemment téléchargé.

Installer Ruby On Rails

Lancez un invité de commande et tapez la commande suivante :

gem install rails --include-dependencies

Et voilà Rails est installé.

Liens connexes :

Posté par pointcom