Rails et Cappuccino

Bonjour à tous,

J’aimerai savoir si certains d’entre vous s’étaient frotté à
Cappuccino et si vous aviez des retours ou exemple simple (scaffold
rails branché sur Cappuccino) ?!

J’ai essayé de suivre l’exemple de Getting Started With Cappuccino and
Ruby on Rails mais je ne saisi pas bien la notion CPURLConnection qui
est censé mapper les actions entre le controller Rails et la vue
Cappuccino.

Donc je suis preneur d’explication ou d’exemple.

Merci.

C’est très simple… En fait les échanges entre Rails et Cappuccino se
font via JSON. Pour cela tu utilises CPURLConnection qui permet
d’instancier cette connexion. Ensuite tu dois utiliser les delegate
-connection:didReceiveData: et -connection:didFailWithError: pour
traiter le retour envoyé par Rails (en JSON donc).

Greg

Le 13 mai 2009 08:37, Zaphod B. [email protected] a écrit :

C’est la jonction entre ton controller et cappucino. Tu fourni le
format json, ok, tu crée un fichier CPURLConnection et tu le mets où
?
C’est cette jonction que j’appréhendes mal, c’est pour ça que j’aurai
bien aimé un exemple de base, mais complet. C’est assez dommage que le
site n’en propose pas.

Merci.

Je te donne un petit exemple. De tête donc à vérifier sur les détails.

Imaginons que tu souhaites récupérer, dans une base de données par
exemple, des informations sur un utilisateur. Dans la partie
Cappuccino, tu va utiliser une CPURLConnection comme ceci :

var request = [CPURLRequest requestWithURL:url];
var connection = [CPURLConnection connectionWithRequest:request
delegate:self];

Dans ce code, url est une variable contenant la route vers ton
contrôleur Rails. Donc si par exemple tu as un ID pour ton
utilisateur, tu peux coder une méthode comme ceci :

-(void)getUserInformationByID:(int)userID
{
var url = “/userinfo/”+userID
var request = [CPURLRequest requestWithURL:url];
var connection = [CPURLConnection connectionWithRequest:request
delegate:self];
}

Maintenant dans Rails il te faut un contrôleur qui répond à la route
/userinfo/ID. Ce contrôleur va renvoyer une réponse au fromat JSON.
Disons un truc du genre :

{ :usreinfo => { :name => nameFromDB, :age => ageFromDB } }.to_json

Maintenant, dans Cappuccino, il faut que tu créés deux délégués pour
gérer la réponse :

  • (void)connection:(CPURLConnection)connection
    didReceiveData:(CPString)data
    {
    var result = CPJSObjectCreateWithJSON(data);

if( result.userinfo )
{
// result.userinfo.name contient le nom
// result.userinfo.age contient l’age
}
}

Dans ce premier délégué, tu récupères les données (data) au format
JSON via CPJSObjectCreateWithJSON. Ensuite dans dans result tu as bien
l’attribut userinfo, c’est que tu es face à la réponse concernant tu
user. Donc, tu peux récupérer les données : l’age via
result.userinfo.age et le nom via result.userinfo.name. Je fais cela
parce qu’il n’est pas rare d’utiliser ce délégué pour plusieurs types
de requêtes. Note que tu peux également vérifier via la connexion.

Le second délégué dont tu as besoin est :

  • (void)connection:(CPURLConnection)aConnection
    didFailWithError:(CPString)error
    {
    alert(error);
    }

Il sert simplement à traiter les cas d’erreurs.

Voilà. J’espère que c’est plus clair.

Greg

Le 13 mai 2009 14:16, Zaphod B. [email protected] a écrit :

C’est un plaisir !

Le 13 mai 2009 15:51, Zaphod B. [email protected] a écrit :

Merci beaucoup pour cet exemple, je vais étudier ça avec grand intérêt
et je ferai le retour.

Merci.

Oh putain … Bon j’ai essayé de mettre en oeuvre et … c’est pas
encore ça. En revanche je n’avais pas vu dans les liens des tutoriaux
le site de screencast http://cappuccinocasts.com/, qui pour ma grande
joie montre un exemple avec l’application de Blog Rails
http://media.rubyonrails.org/video/rails_blog_2.mov. Cependant à la
fin de la présentation j’avais juste envie d’oublier tout ce que
j’avais vu et oublier Capuccino dans son intégralité. Autant je suis à
200% pour le concept autant la mise en oeuvre est loin d’être “simple”
comme cela est mentionné dans tous les exemples du site ! On a
vraiment l’impression de faire des interfaces en Java avec Swing …
Bref la-dessus j’ai vu Altas leur éditeur, ce qui me apparaît juste du
bon sens. Est-ce que tu l’utilises ? Ou tu code tout à la main ?

Oui je connais bien le débat pour ou contre les RAD pour avoir prôner
le contre longtemps, mais bon aujourd’hui j’ai pas le temps ni l’envie
de maîtriser tous les aspects d’un projet, je veux qu’il fasse ce que
je veux au plus simple et au plus vite.

Donc Rails me va très bien :wink:

Sinon merci pour les conseils et la mailling list je vais voir de ce
coté là.
Zaph.

Avant de jeter Cappuccino, regarde nib2cib. Pour Atlas, pas encore, il
n’est pas dispo. Ceci étant il est certain que si tu as l’habitude des
environnements de type RAD, mieux vaut que tu attendes Atlas.
Personnellement je pense que c’est une grosse erreur. J’ai trop vu de
personnes utiliser exclusivement des RAD et quand ils se retrouvent
face à un VRAI problème il n’y a plus personne. A utiliser Cappuccino
en codant tout toi même, tu maitrises parfaitement ton interface.
C’est aussi pour cela que j’ai tendance à fuir Rails. En effet tu as
des helpers dans tous les sens, mais au fond qui comprend comment ce
truc fonctionne ? Donc avant de demander à une application de
développer ton application, essaye par toi même tu n’en seras que plus
à l’aise après.

Sache qu’il existe une ML : [email protected] sur laquelle
tu peux poser toutes les questions que tu veux.

Concernant la simplicité de Cappuccino, je t’assure que si tu as fait
quelques années de développement Cocoa, cela te parait en effet super
simple ! Mais bon, visiblement tu as fait du Swing :wink:

Greg

Le 14 mai 2009 14:28, Zaphod B. [email protected] a écrit :