nitc/interpreter: NaiveInterpreter::mainmodule is writable
[nit.git] / src / web / api_model.nit
index bf0576e..31077c4 100644 (file)
@@ -17,6 +17,7 @@ module api_model
 import web_base
 import highlight
 import uml
+import model::model_index
 
 redef class APIRouter
        redef init do
@@ -68,6 +69,16 @@ class APIList
                return mentities
        end
 
+       # Sort mentities by lexicographic order
+       #
+       # TODO choose order from request
+       fun sort_mentities(req: HttpRequest, mentities: Array[MEntity]) : Array[MEntity] do
+               var sorted = mentities.to_a
+               var sorter = new MEntityNameSorter
+               sorter.sort(sorted)
+               return sorted
+       end
+
        # Limit mentities depending on the `n` parameter.
        fun limit_mentities(req: HttpRequest, mentities: Array[MEntity]): Array[MEntity] do
                var n = req.int_arg("n")
@@ -79,6 +90,7 @@ class APIList
 
        redef fun get(req, res) do
                var mentities = list_mentities(req)
+               mentities = sort_mentities(req, mentities)
                mentities = limit_mentities(req, mentities)
                res.json new JsonArray.from(mentities)
        end
@@ -90,14 +102,14 @@ end
 class APISearch
        super APIList
 
-       redef fun list_mentities(req) do
+       redef fun get(req, res) do
                var q = req.string_arg("q")
-               var mentities = new Array[MEntity]
-               if q == null then return mentities
-               for mentity in view.mentities do
-                       if mentity.name.has_prefix(q) then mentities.add mentity
+               if q == null then
+                       res.json new JsonArray
+                       return
                end
-               return mentities
+               var n = req.int_arg("n")
+               res.json new JsonArray.from(config.view.find(q, n))
        end
 end
 
@@ -116,8 +128,8 @@ class APIRandom
 
        redef fun get(req, res) do
                var mentities = list_mentities(req)
-               mentities = limit_mentities(req, mentities)
                mentities = randomize_mentities(req, mentities)
+               mentities = limit_mentities(req, mentities)
                res.json new JsonArray.from(mentities)
        end
 end
@@ -131,7 +143,7 @@ class APIEntity
        redef fun get(req, res) do
                var mentity = mentity_from_uri(req, res)
                if mentity == null then return
-               res.json mentity.api_json(self)
+               res.raw_json mentity.to_full_json
        end
 end
 
@@ -163,7 +175,7 @@ class APIEntityLinearization
                        return
                end
                var mentities = new JsonArray
-               for e in lin do mentities.add e.full_json
+               for e in lin do mentities.add e
                res.json mentities
        end
 end
@@ -172,25 +184,27 @@ end
 #
 # Example: `GET /defs/core::Array`
 class APIEntityDefs
-       super APIHandler
+       super APIList
 
        redef fun get(req, res) do
                var mentity = mentity_from_uri(req, res)
                if mentity == null then return
-               var arr = new JsonArray
+               var mentities: Array[MEntity]
                if mentity isa MModule then
-                       for mclassdef in mentity.mclassdefs do arr.add mclassdef
+                       mentities = mentity.mclassdefs
                else if mentity isa MClass then
-                       for mclassdef in mentity.mclassdefs do arr.add mclassdef
+                       mentities = mentity.mclassdefs
                else if mentity isa MClassDef then
-                       for mpropdef in mentity.mpropdefs do arr.add mpropdef
+                       mentities = mentity.mpropdefs
                else if mentity isa MProperty then
-                       for mpropdef in mentity.mpropdefs do arr.add mpropdef
+                       mentities = mentity.mpropdefs
                else
                        res.api_error(404, "No definition list for mentity `{mentity.full_name}`")
                        return
                end
-               res.json arr
+               mentities = sort_mentities(req, mentities)
+               mentities = limit_mentities(req, mentities)
+               res.json new JsonArray.from(mentities)
        end
 end