Retour à la leçon
Mission

Mission : le routeur DSL qui perd une route en silence

Diagnostiquer un bug de chaînage dans un DSL de type builder et renforcer sa capacité d'inspection pour les game designers non-développeurs.

Contexte

Le studio a mis en place un DSL de routage façon builder pour ses game designers, mais un designer signale que sa route "POST /players" a disparu :

lua
local Router = {}
Router.__index = Router

function Router.new()
  return setmetatable({ routes = {} }, Router)
end

function Router:get(path, handler)
  table.insert(self.routes, { method = "GET", path = path, handler = handler })
  -- oubli : pas de "return self" ici
end

function Router:post(path, handler)
  table.insert(self.routes, { method = "POST", path = path, handler = handler })
  return self
end

local router = Router.new()
  :get("/players", function() end)
  :post("/players", function() end)   -- erreur: attempt to call a nil value (method 'post')

Le designer ne comprend pas pourquoi enchaîner :post() juste après :get() fait planter le script.