Merge: src/doc/commands: clean commands hierarchy
[nit.git] / src / doc / commands / commands_http.nit
index 28d5a36..c018ad2 100644 (file)
@@ -28,7 +28,31 @@ import nitcorn::vararg_routes
 
 redef class DocCommand
        # Init the command from an HTTPRequest
-       fun http_init(req: HttpRequest): CmdMessage do return init_command
+       fun http_init(req: HttpRequest): CmdMessage do
+               var filter = cmd_filter
+               var opt_vis = req.visibility_arg("min-visibility")
+               if opt_vis != null then filter.min_visibility = opt_vis
+               var opt_fictive = req.bool_arg("no-fictive")
+               if opt_fictive != null then filter.accept_fictive = not opt_fictive
+               var opt_test = req.bool_arg("no-test")
+               if opt_test != null then filter.accept_test = not opt_test
+               var opt_redef = req.bool_arg("no-redef")
+               if opt_redef != null then filter.accept_redef = not opt_redef
+               var opt_extern = req.bool_arg("no-extern")
+               if opt_extern != null then filter.accept_extern = not opt_extern
+               var opt_example = req.bool_arg("no-example")
+               if opt_example != null then filter.accept_example = not opt_example
+               var opt_attr = req.bool_arg("no-attribute")
+               if opt_attr != null then filter.accept_attribute = not opt_attr
+               var opt_doc = req.bool_arg("no-empty-doc")
+               if opt_doc != null then filter.accept_empty_doc = not opt_doc
+               var opt_inh = req.mentity_arg(model, "inherit")
+               if opt_inh != null then filter.accept_inherited = opt_inh
+               var opt_match = req.string_arg("match")
+               if opt_match != null then filter.accept_full_name = opt_match
+               self.filter = filter
+               return init_command
+       end
 end
 
 redef class CmdEntity
@@ -43,8 +67,10 @@ end
 
 redef class CmdList
        redef fun http_init(req) do
-               limit = req.int_arg("l")
-               page = req.int_arg("p")
+               var opt_limit = req.int_arg("l")
+               if opt_limit != null then limit = opt_limit
+               var opt_page = req.int_arg("p")
+               if opt_page != null then page = opt_page
                return super
        end
 end
@@ -82,31 +108,38 @@ end
 
 redef class CmdComment
        redef fun http_init(req) do
-               full_doc = req.bool_arg("full_doc") or else true
-               fallback = req.bool_arg("fallback") or else true
-               format = req.string_arg("format") or else "raw"
+               var opt_full_doc = req.bool_arg("full_doc")
+               if opt_full_doc != null then full_doc = opt_full_doc
+               var opt_fallback = req.bool_arg("fallback")
+               if opt_fallback != null then fallback = opt_fallback
+               var opt_format = req.string_arg("format")
+               if opt_format != null then format = opt_format
                return super
        end
 end
 
 redef class CmdEntityLink
        redef fun http_init(req) do
-               text = req.string_arg("text")
-               title = req.string_arg("title")
+               var opt_text = req.string_arg("text")
+               if opt_text != null then text = opt_text
+               var opt_title = req.string_arg("title")
+               if opt_title != null then title = opt_title
                return super
        end
 end
 
 redef class CmdAncestors
        redef fun http_init(req) do
-               parents = req.bool_arg("parents") or else true
+               var opt_parents = req.bool_arg("parents")
+               if opt_parents != null then parents = opt_parents
                return super
        end
 end
 
 redef class CmdDescendants
        redef fun http_init(req) do
-               children = req.bool_arg("children") or else true
+               var opt_children = req.bool_arg("children")
+               if opt_children != null then children = opt_children
                return super
        end
 end
@@ -125,14 +158,16 @@ end
 
 redef class CmdModelEntities
        redef fun http_init(req) do
-               kind = req.string_arg("kind") or else "all"
+               var opt_kind = req.string_arg("kind")
+               if opt_kind != null then kind = opt_kind
                return super
        end
 end
 
 redef class CmdCode
        redef fun http_init(req) do
-               format = req.string_arg("format") or else "raw"
+               var opt_format = req.string_arg("format")
+               if opt_format != null then format = opt_format
                return super
        end
 end
@@ -144,7 +179,8 @@ redef class CmdEntityCode
                if name != null then name = name.from_percent_encoding
                mentity_name = name
 
-               format = req.string_arg("format") or else "raw"
+               var opt_format = req.string_arg("format")
+               if opt_format != null then format = opt_format
                return init_command
        end
 end
@@ -153,15 +189,18 @@ end
 
 redef class CmdGraph
        redef fun http_init(req) do
-               format = req.string_arg("format") or else "dot"
+               var opt_format = req.string_arg("format")
+               if opt_format != null then format = opt_format
                return super
        end
 end
 
 redef class CmdInheritanceGraph
        redef fun http_init(req) do
-               pdepth = req.int_arg("pdepth")
-               cdepth = req.int_arg("cdepth")
+               var opt_pdepth = req.int_arg("pdepth")
+               if opt_pdepth != null then pdepth = opt_pdepth
+               var opt_cdepth = req.int_arg("cdepth")
+               if opt_cdepth != null then cdepth = opt_cdepth
                return super
        end
 end
@@ -185,3 +224,44 @@ redef class CmdCatalogPerson
                return super
        end
 end
+
+# Util
+
+redef class HttpRequest
+
+       # Map String visiblity name to MVisibility object
+       var allowed_visibility: HashMap[String, MVisibility] is lazy do
+               var res = new HashMap[String, MVisibility]
+               res["public"] = public_visibility
+               res["protected"] = protected_visibility
+               res["private"] = private_visibility
+               return res
+       end
+
+       # Get arg as a MVisibility
+       #
+       # Return `null` if no option with that `key` or if the value is not in
+       # `allowed_visibility`.
+       fun visibility_arg(key: String): nullable MVisibility do
+               var value = string_arg(key)
+               if value == null then return null
+               if not allowed_visibility.keys.has(key) then return null
+               return allowed_visibility[value]
+       end
+
+       # Get arg as a MEntity
+       #
+       # Lookup first by `MEntity::full_name` then by `MEntity::name`.
+       # Return `null` if the mentity name does not exist or return a conflict.
+       private fun mentity_arg(model: Model, key: String): nullable MEntity do
+               var value = string_arg(key)
+               if value == null or value.is_empty then return null
+
+               var mentity = model.mentity_by_full_name(value)
+               if mentity != null then return mentity
+
+               var mentities = model.mentities_by_name(value)
+               if mentities.is_empty or mentities.length > 1 then return null
+               return mentities.first
+       end
+end