Introduction sur les sources de Diaspora

De Traduction du Wiki diaspora* (non officiel)
Aller à la navigation Aller à la recherche
»» Obsolète
L'exactitude de cette page peut être compromise en raison d'informations périmées.Veuillez aider à améliorer la page en la mettant à jour d'abord sur le site officiel puis ici. Il peut y avoir des informations supplémentaires sur la page de discussion.


Bookmark.png »» Note

Cette page a reçu quelques mises à jour mineures récemment, mais veuillez vérifier si tout est correct. Si le contenu de cette page est suffisamment décrit ailleurs (dans les guides d'installation ou la FAQ pour les mainteneurs de pod ou la FAQ pour les développeurs...), elle peut être supprimée sans être remplacée.

Si cette page doit être conservée, il me semble qu'elle pourrait peut-être être fusionnée avec Composants diaspora expliqués. (bien qu'elles décrivent différentes parties de diaspora... hm.). Pour le moment, les deux pages semblent en quelque sorte perdues. --waithamai 07:08, 17 août 2017 (UTC)


Cadre de travail et outils

Diaspora est écrit en Ruby on Rails, un framework web pour le langage de programmation Ruby.
Si vous n'avez jamais regardé un projet Rails, vous pouvez consulter un guide Rails comme celui-ci.

Il y a quelques outils que nous utilisons qui ne sont pas dans tous les projets rails :

  • Haml

Nos templates d'affichage sont écrits en HAML (un langage de templating) au lieu de l'ERB par défaut (HTML avec du code Ruby en ligne).
Les docs HAML peuvent être trouvées ici. Les fichiers correspondants sous app/views.

  • Sass

Notre CSS est écrit en SASS (spécifiquement, le dialecte 'scss'), qui génère le CSS réel via le Rails asset pipeline. La syntaxe est inspirée de celle de CSS, et assez similaire, mais elle offre quelques fonctionnalités supplémentaires comme l'imbrication et les variables. Si vous voulez modifier les feuilles de style, jetez un coup d'œil dans app/assets/stylesheets/.
Note: HAML et SASS sont tous deux sensibles aux espaces blancs.

  • Backbone.js & Handlebars.js

La fonctionnalité côté client et le rendu sont principalement coordonnés avec Backbone.js, qui communique conformément à une architecture REST avec le serveur, avec JSON et déclenche le rendu des modèles Handlebars.js. La logique se trouve dans app/assets/javascripts/app et les modèles Handlebars sont situés dans app/assets/templates.

Test

Notre objectif est de tester tout. Si vous trouvez un bogue, vous commencez par l'exposer en écrivant un test qui échoue à cause du bogue. Ce n'est qu'ensuite que vous commencez à corriger le code réel. Cela s'appelle Driven Development (TDD).
Nous écrivons nos tests unitaires pour le code ruby dans Rspec, les tests JavaScript sont dans Jasmine et les tests d'intégration dans Cucumber. Les spécifications sont dans spec, et les fonctionnalités de Cucumber sont dans features. Pour plus de détails, voir notre page sur le déroulement des tests.

Les modèles

Bookmark.png »» Note
Remarque de la traductrice
Les termes définis ci-dessous ne sont pas traduits directement car ce sont les noms de classes. Leur signification est donnée entre parenthèses.


Nos modèles se trouvent dans le dossier app/models :

User (Utilisateur) - Les utilisateurs, bien sûr, viennent en premier. Un objet User représente les informations privées et les capacités d'un utilisateur sur ce serveur. L'objet User est capable d'être ami avec des personnes, de poster des mises à jour et de mettre à jour son profil. Un utilisateur a une personne.

Person (Personne) - Une Personne est un utilisateur vu de l'extérieur. Lorsqu'un utilisateur devient ami avec un autre utilisateur, il devient ami avec l'objet Personne de cet utilisateur. Les objets Personne sont répliqués sur les serveurs, et c'est là que se trouve la clé publique d'un utilisateur. Une personne a plusieurs messages. Une personne a un profil.

Profile (Profil) - Il contient des informations sur la personne. Actuellement, un profil a la même apparence pour quiconque le regarde.

Contact - Définit la relation entre un Utilisateur et une Personne d'un autre utilisateur.

Request (Demande) - C'est un objet de demande d'ami qui est envoyé à une autre personne.

Aspect - Cet objet contient une liste de personnes et de messages correspondant à cet aspect. Les aspects sont privés, propres aux utilisateurs et, nous pouvons intégrer les documents relatifs à l'aspect dans le document de l'utilisateur.

Post (Article) - Un message appartient à une personne. C'est une classe parente pour différents types de messages, elle contient les identifiants des commentaires et quelques autres attributs communs à tous les messages.

  • Status Message hérite de Post
  • Album hérite de Post
  • Photo hérite de Post

Comment (Commentaire) - un commentaire appartient à un message

Retraction (Retrait) - il s'agit d'un objet qui est envoyé lorsqu'un créateur de message supprime un message. Ce n'est pas un modèle, mais il se sérialise pour être envoyé à d'autres serveurs Diaspora de la même manière que nos modèles.

Poster quelque chose (app/models/user)

  1. Lorsqu'un utilisateur poste quelque chose, il le poste à un aspect ou à tous les aspects.
  2. En supposant que le message est valide, le message est créé et son identifiant est stocké dans raw_visible_posts pour cet utilisateur.
  3. Le code html de ce message est rendu sur le serveur et est envoyé à l'utilisateur via le websocket.
  4. Le message est ensuite sérialisé en xml, enveloppé dans une enveloppe Salmon chiffrée et signée et POSTé aux urls de réception (http://pod.location/receive/users/:id[person_id]) pour les objets Personne des destinataires.

Réception d'un message (app/controllers/publics_controller.rb &amp ; lib/diaspora/user/receiving.rb)

  1. L'utilisateur reçoit le salmon, déchiffre les en-têtes.
  2. Si la signature sur les données du salmon est celle de la personne qui prétend avoir envoyé le message, celui-ci est transformé en objet et enregistré dans la base de données.
  3. Cet identifiant de message est stocké dans les messages visibles de l'utilisateur récepteur ainsi que dans les messages de l'aspect dans lequel se trouve l'expéditeur.

Voici la documentation générée automatiquement http://rubydoc.info/github/diaspora/diaspora/master