Archives de
Category: Code

Rails 4 et MongoDB part 1

Rails 4 et MongoDB part 1

Changeons un peu et parlons de Ruby, Ruby on Rails et MongoDB.

J’ai eu envie de voir ce qu’il se fait ailleurs et je pense que l’univers de RoR vaut le détour.

En partant du principe que vous avez Ruby d’installer sur votre machine, l’installation de RoR est aussi simple que :

gem install rails

Une fois cela fait, il suffit d’une autre ligne de commande pour créer un projet RoR :

rails new my_project --skip-active-record --skip-test-unit

Dans le cas présent, je n’installe pas ce qui concerne les bases de données si les tests unitaires.

Pour voir le résultat il suffit de se déplacer dans le dossier my_project et de lancer le serveur embarqué :

cd my_project/
rails server

Rendez-vous sur http://localhost:3000/ afin de voir la page par défaut.

Passons à l’ajout de la gestion de MongoDB à Mongoid travers la gem et des gem de tests. Pour cela il faut editer le fichier Gemfile et y rajouter:

gem 'mongoid', github: 'mongoid/mongoid'
gem 'bson_ext'

group :test do
  gem "rspec-rails"
  gem 'cucumber-rails', :require => false
  gem 'database_cleaner'
end

Avec la sortie récente de RoR 4, la gem mongoid n’est pas encore totalement compatible, dans notre cas nous disons à bundler d’aller la chercher sur github.

Un petit bundle install afin d’installer les nouvelles gem et nous voila prêt pour la suite.

Premièrement, il faut configurer mongoid avec :

rails generate mongoid:config

Afin de générer les fichiers pour les tests, lançons les 2 commandes suivantes :

rails generate rspec:install
rails generate cucumber:install

Avant d’aller plus loin, il faut désactiver quelques éléments prévus pour des applications avec une base de données relationnelle.

Dans le fichier spec/spec_helper.rb commentez les lignes :

config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true

Pour finir dans le fichier features/support/env.rb  changez DatabaseCleaner.strategy = :transaction  par DatabaseCleaner.strategy = :truncation .

Passons aux choses sérieuses avec la génération d’un model et du CRUD associé. Comme souvent, une ligne de commande suffit :

rails generate scaffold post name:string description:text

Je vous laisse découvrir ce qui fonctionne en allant sur : http://localhost:3000/posts

Formulaire Symfony2 et Javascript [FR]

Formulaire Symfony2 et Javascript [FR]

J’ai récemment du faire face a une question lors d’un rendu de formulaire avec symfony2.

Il me fallait faire un traitement Javascript en fonction d’un choix de radio bouton. Ma première pensée a été de customiser le rendu du formulaire pour arriver à mes besoins.

Je me suis vite rendu compte qu’insérer du code Javascript customisé dans ma surcharge twig de form_row à travers le formbuilder n’était pas la bonne solution.

Dans mon cas la bonne solution fut de rendre les valeurs de mes radio boutons une à une afin qu’elles ne soient pas alignées grâce au code suivant :

{{ form_row(form.radio[0]) }}
{{ form_row(form.radio[1]) }}

Puis à l’aide de jQuery j’ai lié les événements click des radio boutons à des fonctions Javascript.

$(document).ready(function(){
    $("#formname_radio_0").click(function(){
        alert('radio  0');
    });
    $("#formname_radio_1").click(function(){
        alert('radio  1');
    });
});

 

SalesForce : tester le nombre d’email envoyé [FR]

SalesForce : tester le nombre d’email envoyé [FR]

Lors de la création de vos test unitaires pour SalesForce vous aurez surement a vérifié qu’un certain nombre d’email a bien été envoyé.

Pour ce faire il faut utiliser la fonction system.limits.getEmailInvocations() qui renvoi le nombre d’email envoyé lors de l’exécution du test.

Ajouter un champ a un utilisateur avec le bundle sonatauserbundle [FR]

Ajouter un champ a un utilisateur avec le bundle sonatauserbundle [FR]

Si vous utilisez le bundle sonata-user-bundle il y a de fortes chances pour que vous ayez utilisé le bundle sonata-easy-extends afin de généré votre bundle de gestion des utilisateurs.

J’ai découvert ce weekend qu’afin d’ajouter un nouveau champ sur un utilisateur lors de l’utilisation du bundle sonatauserbundle, il faut modifier le fichier Application/Sonata/UserBundle/Resources/config/doctrine/User.orm.xml

 

Le tri par défaut dans Sonata Admin

Le tri par défaut dans Sonata Admin

J’ai récemment dû ajouter un tri par défaut sur une de mes classes admin du bundle sonata admin. Après une petite recherche, j’ai finalement trouvé qu’il suffit de surcharger une variable:

protected $datagridValues = array(
        '_sort_order' => 'DESC',
        '_sort_by' => 'day'
    );

Mes données serons dorénavant ordonnées en fonction du la valeur day dans l’ordre décroissant.