Salut tous le monde.
J'ai un problème avec les macros en langage Crystal.
En effet, ceux-ci sont exécuté lors du passage du compilateur, sauf que les routes de mon routeurs son paramétré à partir d'un fichier YAML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | --- base: name: api description: Exemple version: 1 collections: users: description: Users verbs: CRUD # Default klass: User # Default collection_actions: # /users/something get: - something - else resource_actions: # /users/:id/something get: - messages emails: description: Emails verbs: R klass: Email |
Ma structure est la suivante:
- L'utilisateur allume son serveur Web.
- Le serveur web lit le fichier de conf et enregistre les routes dans des nodes. (Routeur + Nodes => https://github.com/Cruder/Opali/tree/feature/4/router/src/Opali/router )
- L'utilisateur veux accédé à la page /users
- Le serveur regarde toutes les nodes jusqu'à ce qu'il trouve la bonne node. (Sinon 404)
- Le serveur appel le bon controller avec la bonne méthode.
- Le serveur transforme en JSON le résultat puis l'envoie à l'utilisateur.
Voici la macro qui me pose problème:
1 2 3 | macro controller_call(controller, params, method) {{controller.id}}.new({{params}}).{{method.id}}() end |
En appelant ma macro comme suit, je n'ai aucun problèmes
1 | controller_call("UsersController", CONTEXT, "index") |
Mais en passant par une variable, cela ne fonctionne plus, et me donne ceci
1 | @klass.new(...).@method() |
Comment faire pour pouvoir appeler le bon controlleur? (sachant qu'ils héritent tous de Opali::Base::Controller
)
Merci de votre aide.
(J'ai fait un petit git diff https://github.com/Cruder/Opali/compare/feature/4/router pour voir plus facilement le code correspondant)
edit elyppire : titre modifié pour plus de clarté.
+0
-0