Flux RSS
fév 13

Convertir un Array en Hash en Ruby (pour le select de formtastic)

Posté Dimanche 13 février 2011 dans Formtastic, Snippets

Voici un petit snippet en Ruby permettant de transformer un Array sous la forme :

  COUNTRIES = [
    "Kingdom of Morocco",
    "People's Democratic Republic of Algeria",
    "Great Socialist People's Libyan Arab Jamahiriya",
    "Kingdom of Saudi Arabia",
    "Hashemite Kingdom of Jordan",
    'Syrian Arab Republic',
    "United Arab Emirates",
    "Republic of Yemen",
    "Islamic Republic of Iran"
  ]

En Hash sous la forme :

{
 "Kingdom of Morocco"=>0,
 "People's Democratic Republic of Algeria"=>1,
 "Great Socialist People's Libyan Arab Jamahiriya"=>2,
 "Kingdom of Saudi Arabia"=>3,
 "Hashemite Kingdom of Jordan"=>4,
 "Syrian Arab Republic"=>5,
 "United Arab Emirates"=>6,
 "Republic of Yemen"=>7,
 "Islamic Republic of Iran"=>8
}

Voici donc le Snippet

  def self.countries_with_ids
    Hash[*COUNTRIES.collect { |c|
        [c, COUNTRIES.index(c)]
    }.flatten]
  end

Particulièrement efficace avec les input select de formtastic

fév 11

Créer un contrôleur pour les pages statiques dans Rails

Posté Vendredi 11 février 2011 dans Controller, Snippets

  1. Catcher toutes les requêtes avec un Glob dans routes.rb (dernière route), avec name le nom de la page pouvant contenir un chemin du type ‘services/home’
  2. get "/*name", :to => "pages#show"
  3. Créer un controleur PageController avec une action show
  4. class PagesController < ApplicationController
      def show
        ext = ".html.haml"
        dirname = File.dirname(params[:name])
        filename = File.basename(params[:name] + ext)
        Dir.chdir(File.join(RAILS_ROOT, "app", "views", "pages"))
        static_pages = Dir.glob(File.join(dirname, "*" + ext))
        raise "404" unless static_pages.include?(File.join(dirname, filename))
        @message = "Welcome to #{params[:name]}"
        render File.join("pages", dirname, filename)
      end
    end
    
  5. Créer une structure de pages à l’intérieur de app/views/pages/
  6. app/
    -- views/
    -- -- pages/
    -- -- -- home.html.haml
    -- -- -- contact-us.html.haml
    -- -- -- services/
    -- -- -- -- warranty.hmtl.haml
    -- -- -- -- advices.html.haml
    -- -- -- -- subdir/
    -- -- -- -- -- last_file
    
  7. Accéder aux pages en tapant :
  • rails_app/home
  • rails_app/contact-us
  • rails_app/services/warranty
  • rails_app/services/advices
  • rails_app/services/subdir/last_file
fév 8

Installer MySQL 5 et le gem mysql ou mysql2 sur Snow Leopard

Posté Mardi 8 février 2011 dans MySQL, Serveurs

Toute la procédure est bien expliqué ici : http://geryit.com/blog/2011/01/installing-mysql-with-rails-on-mac-os-x-snow-leopard/

A noter :

  • La version de MySQL Server la mieux compatible avec le gem mysql est la 5.1
  • Déinstaller le gem mysql ou mysql2 avant d’installer un nouveau
  • Avec RVM, la procédure est la même (enlever simplement sudo de la commande d’installation du gem mysql)
  • Malgré que Snow Leopard est en 32 bit (d’après uname -a), il faut installer la version x86_64 de MySQL 5.1 et utiliser -arch x86_64 :
sudo env ARCHFLAGS="-arch x86_64" gem install --no-rdoc --no-ri mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
fév 8

Désinstaller MySQL 5 sur Mac OS X (10.6)

Posté Mardi 8 février 2011 dans MySQL, Serveurs

Voici les instructions pour désinstaller complètement une distribution de MySQL installée depuis une paquet (dmg) :

sudo /usr/local/mysql/support-files/mysql.server stop
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

éditer le fichier /etc/hostconfig et retirer la ligne MYSQLCOM=-YES-

jan 5

Créer une nouvelle application Rails 3

Posté Mercredi 5 janvier 2011 dans Documentation, Tutoriels

Sur Ubuntu 10.1 après avoir installé ruby, rubygems et mysql

  • rails new my_app
  • cd my_app
  • Gemfile
gem 'rails', '3.0.3'
gem 'mysql2'
gem 'mongrel'
gem 'haml'
gem 'devise'
gem 'hpricot'
gem 'ruby_parser'
gem 'formtastic', '~> 1.1.0'
group :development, :test do
 gem "rspec-rails", ">= 2.0.0"
 gem "cucumber-rails", ">= 0.3.2"
 gem "webrat", ">= 0.7.2"
 gem 'spork'
end
  • sudo bundle install
  • rm public/index.html
  • rails g rspec:install
  • rails g cucumber:install –rspec –spork
  • rails generate formtastic:install
  • rake db:create
  • rails s

Devise

  • rails generate devise:install
  • rails generate devise User
  • rake db:migrate
  • rails generate devise:views -e haml
  • before_filter :authenticate_user!
  • user_signed_in?
  • current_user
  • user_session

Webrat, Cucumber, Sport et Rails 3 :

Changer rails pour rack dans config.mode dans features/env.rb

require 'webrat'
require 'webrat/core/matchers'
Webrat.configure do |config|
  config.mode = :rack
  config.open_error_files = false # Set to true if you want error pages to pop up in the browser
end

require ‘webrat’  require ‘webrat/core/matchers’    Webrat.configure do |config|    config.mode = :rack    config.open_error_files = false # Set to true if you want error pages to pop up in the browser  end

« Tester » le testing

  • rake db:test:clone
  • bundle exec spork cucumber
  • bundle exec cucumber
déc 28

Documentation Rails

Posté Mardi 28 décembre 2010 dans Documentation

Liste des références à garder sous la main :

Suite à venir au fur et à mesure…

juil 26

Requêtes SQL ActiveRecord dans la console

Posté Lundi 26 juillet 2010 dans Debuging

Il est souvent nécessaire de jeter un oeil sur les requêtes SQL et sur leur temps d’exécution dans la console, en particulier en mode production. Voici les commandes à exécuter pour cela :

ruby script/console production

>> def log_to
>>   ActiveRecord::Base.logger = Logger.new($stdout)
>>   ActiveRecord::Base.connection_pool.clear_reloadable_connections!
>> end
=> nil

>> log_to
=> []

>> Article.all(:limit => 30, :order => 'id desc').count
=> Article Load (3.0ms)   SELECT * FROM `articles` ORDER BY id desc LIMIT 30
juil 16

Formatage de texte : Ruby on Rails Helpers

Posté Vendredi 16 juillet 2010 dans Snippets

Voici quelques fonctions incluses dans la plateforme Rails à utiliser pour formater du texte :

Module : ActionView::Helpers::TextHelper

  • auto_link(text, *args, &block)
    Transforme les URLs et adresses email en liens cliquables
  • concat(string, unused_binding = nil)
    S’il n’est pas possible d’utiliser <%= ‘hello’ %> dans une view
  • current_cycle(name = « default »)
    Retourne le cycle courant quand cycle a été lancée
  • cycle(first_value, *values)
    Permet de créer un cycle entre des éléments et appelle la fonction to_s en alternance (à utiliser par exemple pour changer de classe pour chaque ligne dans un tableau)
  • excerpt(text, phrase, *args)
    Extrait de texte à partir de la première instance de ‘phrase’ dans un rayon. Exemple ‘Bonjour, vos amis sont mes amis’ => … amis sont mes…
  • highlight(text, phrases, *args)
    Insert <strong class=’highlight’>…</strong> partout ou leq ‘phrases’ sont trouvés dans ‘text’ (phrases peut être un array)
  • markdown(text)
    Retourne le texte transformé suivant la librairis de Mark Down installés (BlueCloth par exemple)
  • pluralize(count, singular, plural = nil)
    Transforme le singulier en pluriel si cela est possible en fonction du count donné.
  • reset_cycle(name = « default »)
    Remet à zéro le cycle s’il avait été commencé
  • simple_format(text, html_options={})
    Retourne le texte transformé en HTML. Utile pour la transformation des paragraphes définis par des ‘\n’ en <p></p>
  • textilize(text, *options)
    Utilise RedCloth pour transformer en HTML un texte écrit en Textile
  • textilize_without_paragraph(text)
    Même chose que la précédente méthode, sauf qu’elle ne rajoute pas les <p> que RedCloth ajoute automatiquement
  • truncate(text, *args)
    Tronque le texte en utilisant :length comme longueur (par défaut : 30). Si la longueur du texte obtenu est supérieure à :length, ajoute « … » ou la chaîne de caractère :omission si donnée en paramètres.
  • word_wrap(text, *args)
    Crée des lignes à partir d’un texte en s’assurant que chaque ligne ne dépasse pas :line_width donnée en paramètre (par défault : 80)

Dès qu’on commence à utiliser ces fonctions, elles deviennet véritablemen des incontournables !

juil 15

Subversion (SVN) et Ruby on Rails : déploiement en SSH

Posté Jeudi 15 juillet 2010 dans Sbuversion, Serveurs, Tutoriels

Quand je développe un projet en Ruby on Rails, j’utilise à peu près toujours un gestionnaire de version. La plupart du temps Subversion, bien que la mode soit l’utilisation de Git. Mon hébergeur (Dreamhost) m’offre un espace illimité et la création d’autant de SVN que je veux.

Dans cet article je décris la procédure que j’utilise pour déployer un site en SSH.

Setup de base

  • http://adresse-de-mon-svn/app : l’URL du serveur SVN
  • Le SVN est déjà créé et contient la dernière version de mon application Rails
  • Certains dossiers sont ignorés (voir plus bas)
  • Accès en SSH (putty) fourni par l’hébergeur
  • Le fichier database.yml est déjà configuré pour le serveur production

Dossiers à ignorer dans le SVN :

Il faut utiliser le SVN seulement pour gérer la version des fichiers qui concernent le développement. Quand je mets en place un SVN avec Rails, j’ignore les dossiers suivants :

  • log
  • tmp
  • Si l’application gère des ressources contenant des images (produits par exemple), ignorer le dossier de ces images (exemple : le dossier utilisé par attachment_fu)

Procédure

  1. mkdir app
    Avec putty, crée un dossier VIDE qui va contenir votre application
  2. svn checkout http://adresse-de-mon-svn/app app
    « Connecte » le dossier app au SVN et télécharge les fichiers mis à jour
  3. rails -s app
    Crée les fichiers manquant pour faire rouler l’application Rails en ignorant les fichiers manquant
  4. rm app/public/index.html

Et voilà ! Dorénavant, votre application Rails peut profiter de tous avantages d’un SVN.

jan 11

Convertir Datetime en format Ruby et pour la base de données

Posté Lundi 11 janvier 2010 dans Snippets

Format personnel vers Ruby

Je veux transformer une date du style « 23/11/2009  » en Time de Ruby :

>> Time.now
=> Mon Jan 11 13:37:11 +0000 2010
>> Time.now.to_s(:db)
=> "2010-01-11 13:38:38"
>> ma_date = "23/11/2009"
=> "23/11/2009"
>> j, m, a = ma_date.split('/')
=> ["23", "11", "2009"]
>> mon_datetime = Time.local(a,m,j)
=> Mon Nov 23 00:00:00 +0000 2009

Ruby >> SQL

En Ruby :

>> Time.now
=> Mon Jan 11 13:23:17 +0000 2010

Pour faire la conversion (j’utilise MySQL) :

>> Time.now.to_s(:db)
=> "2010-01-11 13:38:38"
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera