From: Alexandre Terrasa Date: Wed, 8 Jun 2016 15:44:43 +0000 (-0400) Subject: nitweb: add /api/inheritance/:id service X-Git-Url: http://nitlanguage.org nitweb: add /api/inheritance/:id service Signed-off-by: Alexandre Terrasa --- diff --git a/src/nitweb.nit b/src/nitweb.nit index a1a41a3..23d17a3 100644 --- a/src/nitweb.nit +++ b/src/nitweb.nit @@ -102,6 +102,7 @@ class APIRouter use("/uml/:id", new APIEntityUML(model, mainmodule)) use("/linearization/:id", new APIEntityLinearization(model, mainmodule)) use("/defs/:id", new APIEntityDefs(model, mainmodule)) + use("/inheritance/:id", new APIEntityInheritance(model, mainmodule)) end end diff --git a/src/web/model_api.nit b/src/web/model_api.nit index 0d4c205..a9f0c75 100644 --- a/src/web/model_api.nit +++ b/src/web/model_api.nit @@ -120,6 +120,22 @@ class APIEntity end end +# List ancestors, parents, child and descendants of MEntity +# +# Example: `GET /entity/core::Array/inheritance` +class APIEntityInheritance + super APIHandler + + redef fun get(req, res) do + var mentity = mentity_from_uri(req, res) + if mentity == null then + res.error 404 + return + end + res.json mentity.hierarchy_poset(view)[mentity] + end +end + # Linearize super definitions of a MClassDef or a MPropDef if any. # # Example: `GET /entity/core::Array/linearization` diff --git a/src/web/web_base.nit b/src/web/web_base.nit index c84c784..0bdf0ad 100644 --- a/src/web/web_base.nit +++ b/src/web/web_base.nit @@ -241,3 +241,20 @@ end redef class MVirtualType redef var web_url = mproperty.web_url is lazy end + +redef class POSetElement[E] + super Jsonable + + # Return JSON representation of `self`. + fun json: JsonObject do + assert self isa POSetElement[MEntity] + var obj = new JsonObject + obj["greaters"] = to_mentity_refs(greaters) + obj["direct_greaters"] = to_mentity_refs(direct_greaters) + obj["direct_smallers"] = to_mentity_refs(direct_smallers) + obj["smallers"] = to_mentity_refs(smallers) + return obj + end + + redef fun to_json do return json.to_json +end