Skip to content

Instantly share code, notes, and snippets.

@k33g
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save k33g/9245205 to your computer and use it in GitHub Desktop.
Save k33g/9245205 to your computer and use it in GitHub Desktop.

#Quick Start

##First

  • Mettre à jour sa distribution m33ki (je n'ai plus que 2 templates, le générateur a sauté, je l'ai externalisé, j'ai revu la couche Mongodb)

##Créer le squelette M33ki

  • tapez m33ki
  • donner le nom de l'application (faudra que je pense à le mettre en paramètre ça fera gagner une étape)
  • choisir 1 (Golo application)

Affichage dans le terminal:

k33g_org@k33g-orgs-MacBook-Pro:~/Dropbox/Public$ m33ki

   _____  ________ ________  __   .__
  /     \ \_____  \\_____  \|  | _|__|
 /  \ /  \  _(__  <  _(__  <|  |/ /  |
/    Y    \/       \/       \    <|  |
\____|__  /______  /______  /__|_ \__|
        \/       \/       \/     \/
  WebApp server Golo powered (c) @k33g_org

OS : mac os x
Application name?>myapp
Creating myapp application
1- copy /Users/k33g_org/Dropbox/Public/TYPEUNSAFE/m33ki/jars to /Users/k33g_org/Dropbox/Public/myapp
2- copy /Users/k33g_org/Dropbox/Public/TYPEUNSAFE/m33ki/libs to /Users/k33g_org/Dropbox/Public/myapp

reading configuration file
What kind of application ?
1- Golo Skeleton project
2- Hybrid project (Java + Golo)
number?>1
Creating Golo Skeleton project ...

myapp application has been created
Last steps :
- type : cd myapp

Now, to start the application just type : ./go.sh
Have fun!

##Générer une application

C'est là où tout change, et il va falloir que je documente. Tu as besoin de mon nouveau générateur qui peut servir à générer tout et n'importe quoi : en fait on peut lui faire des plugins (ou generators). Il s'appelle Hi et il vient avec un generator d'exemple qui génère des "M33ki apps" (pour le moment full Golo, mais les versions hybrides vont arriver ce WE).

###Installer Hi

# 1- clone hi repository in a directory
git clone https://github.com/k33g/hi.git

# 2- edit .bashrc
pico ~/.bashrc

# 3- Then :
export PATH=$PATH:$HOME/directory/hi

###Pré-requis

Il te faut :

  • Bower (pour télécharger les frameworks js) https://github.com/bower/bower (donc npm et node), mais du coup je ne suis pas obligé de les fournir (et gérer les versions avec mon generateur)
  • je crois que c'est tout

###Utiliser le générateur m33kig

(oui il y a bien un g à la fin, g pour Golo)

cd myapp
hi m33kig

Alors à ce moment là il redemande le nom de l'application (ça peut être n'importe quoi en fait, pas d'incidence sur la structure du projet) :

.__    .__                       ._.
|  |__ |__|   _____ _____    ____| |
|  |  \|  |  /     \\__  \  /    \ |
|   Y  \  | |  Y Y  \/ __ \|   |  \|
|___|  /__| |__|_|  (____  /___|  /_
     \/           \/     \/     \/\/
HI Generator (c) 2014-2015 @k33g_org

=== m33ki golo webapp generator ===
Application name? my very nice app

Tu valides, ça mouline (Bower va télécharger les dépendances), ça crée aussi les répertoires nécessaires. Si tout va bien tu devrais avoir l'arborescence suivante :

|____
| |____app
| | |____controllers # golo controllers
| | |____libs
| | |____models # golo models
| | |____routes # golo routes
| |____jars
| |____libs
| |____public
| | |____js
| | | |____bower_components
| | | | |____backbone
| | | | |____bootstrap
| | | | |____jquery
| | | | |____react
| | | | |____underscore
| | | |____components # view component (front side)
| | | |____models # Backbone models and collections
| | | |____modules

###Création des modèles mongo et des routes

Par exemple, on veut créer un modèle Human :

  • Tapez hi m33kig:mgmc:Human : mgmc : pour mongo model collection

Puis renseigner le nom de la base de donnée (mydb), la collection mongo (humans) :

.__    .__                       ._.
|  |__ |__|   _____ _____    ____| |
|  |  \|  |  /     \\__  \  /    \ |
|   Y  \  | |  Y Y  \/ __ \|   |  \|
|___|  /__| |__|_|  (____  /___|  /_
     \/           \/     \/     \/\/
HI Generator (c) 2014-2015 @k33g_org

=== m33ki golo webapp generator ===
MongoDb Database name? mydb
MongoDb Collection Name? humans
MongoDb Model, Collection, Routes and Controller have been generated.

Plusieurs fichiers ont-été générés :

  • app/models/Human.golo
  • app/controllers/Humans.golo
  • app/routes/Humans.routes.golo
  • le fichier app/routes/routes.golo a été mis à jour automatiquement (c'est lui qui charge toutes les routes)

Ce qui veut dire que tu peux lancer la commande pour créer d'autres modèles et d'autres routes

A ce stade là, tu disposes de tous les services REST nécessaires pour faire du CRUD avec tes modèles.

Ne pas oublier de lancer la base Mongodb avant

###Création des modèles et collection Backbone (côté Front)

C'est ce qui va nous permettre de lancer des requêtes à partir du navigateur

  • Tapez : hi m33kig:bbmc:Human

Là il va demander un peu plus de choses

  • valeurs par défaut : firstName:"john", lastName:"doe"

Affichage dans le terminal :

.__    .__                       ._.
|  |__ |__|   _____ _____    ____| |
|  |  \|  |  /     \\__  \  /    \ |
|   Y  \  | |  Y Y  \/ __ \|   |  \|
|___|  /__| |__|_|  (____  /___|  /_
     \/           \/     \/     \/\/
HI Generator (c) 2014-2015 @k33g_org

=== m33ki golo webapp generator ===
Default values (ie: first:'',last'')? firstName:"john", lastName:"doe"
Model and Collection have been generated.

Plusieurs fichiers ont-été générés :

  • public/js/models/HumanModel.js
  • public/js/models/HumansCollection.js
  • Et le fichier public/js/all.scripts.js a été mis à jour automatiquement (il charge tous les scripts js)

Il est possible d'ores et déjà de tester même sans IHM :

  • lancer la base mongod, lancer l'application ./go.sh

  • ouvrir http://localhost:8888/ avec un navigateur (Chrome pour jouer avec la console c'est plus sympa)

  • ouvrir la console du navigateur et commencer à s'amuser

    var bob = new HumanModel({firstName:"Bob", lastName:"Morane"}) //valider var jane = new HumanModel({firstName:"Jane", lastName:"Doe"}) // valider bob.save() jane.save()

En tapant bob.id ou jane.id on s'apperçoit qu'un id unique leur a bien été affecté (en fait on a fait une requête POST)

Maintenant raffraîchir la page (pour être sûr que je ne triche pas) et toujours dans la console du navigateur :

var humans = new HumansCollection()
humans.fetch().done(function(){ console.log(humans.toJSON()); })

Et on retrouve bien nos 2 Humans

###Création de l'IHM

####Afficher les Humans

Par exemple, on veut un composant grille (table) que l'on appellera HumansTable qui utilise le modèle Human

Dans le Terminal : hi m33kig:rt:HumansTable:Human

Puis répondre à une seule question : les champs que l'on souhaite afficher

.__    .__                       ._.
|  |__ |__|   _____ _____    ____| |
|  |  \|  |  /     \\__  \  /    \ |
|   Y  \  | |  Y Y  \/ __ \|   |  \|
|___|  /__| |__|_|  (____  /___|  /_
     \/           \/     \/     \/\/
HI Generator (c) 2014-2015 @k33g_org

=== m33ki golo webapp generator ===
Fields (ie: firstName, lastName)? firstName, lastName
Table has been generated.

Le fichier suivant a été généré :

  • public/components/HumansTable.js
  • le fichier all.scripts.js a été mis à jour

ouvrir public/js/main.js et ajouter ceci en fin de fichier :

  	React.renderComponent(
  		<HumansTable pollInterval={500}/>,
  		document.querySelector('HumansTable')
  	);

On explique au navigateur que l'on crée une instance du composant HumansTable, que l'on va aller interroger les données toutes les 500 ms et qu'on la rattache au tag <HumansTable>.

Ouvrir public/index.html et ajouter <HumansTable></HumansTable> dans la page :

  <div class="container">
    <!-- some components here -->
    <HumansTable></HumansTable>
  </div>

Et là tu peux aller raffraichir ta page. Et si tout s'est bien passé, on retrouve Bob et Jane et on peut même les supprimer.

####Saisir des Humans

Toujours dans le terminal : hi m33kig:rf:HumanForm:Human

Et exactement le même principe que pour la grille :

    .__    .__                       ._.
    |  |__ |__|   _____ _____    ____| |
    |  |  \|  |  /     \\__  \  /    \ |
    |   Y  \  | |  Y Y  \/ __ \|   |  \|
    |___|  /__| |__|_|  (____  /___|  /_
         \/           \/     \/     \/\/
    HI Generator (c) 2014-2015 @k33g_org
    
    === m33ki golo webapp generator ===
    Fields (ie: firstName, lastName)? firstName, lastName
    Form has been generated.

Le fichier suivant a été généré :

  • public/components/HumanForm.js
  • le fichier all.scripts.js a été mis à jour

Dans main.js ajouter :

	React.renderComponent(
		<HumanForm/>,
		document.querySelector('HumanForm')
	);

Dans index.html

  <div class="container">
    <!-- some components here -->
    <HumanForm></HumanForm>
    <HumansTable></HumansTable>
  </div>

Raffraîchir, on peut saisir de nouveaux Humans

@titimoby
Copy link

Dancing Servos$ hi m33kig
/home/thierry/Documents/perso/hi
Exception in thread "main" java.lang.AssertionError: Three arguments needed!
at gololang.Predefined.require(Predefined.java:183)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:566)
at fr.insalyon.citi.golo.runtime.FunctionCallSupport.fallback(FunctionCallSupport.java:121)
at hi.main(main.golo:17)

Maybe a problem of golo version used.
Mine is still:
0-preview10-SNAPSHOT

@titimoby
Copy link

Golo version is not the issue.
There's really something about the number of arguments.

Dancing Servos$ hi m33kig
/home/thierry/Documents/perso/hi
Exception in thread "main" java.lang.AssertionError: Three arguments needed!
at gololang.Predefined.require(Predefined.java:183)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:566)
at fr.insalyon.citi.golo.runtime.FunctionCallSupport.fallback(FunctionCallSupport.java:121)
at hi.main(main.golo:17)

Dancing Servos$ golo version
0-preview11-SNAPSHOT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment