return config
end
- # Build the nit catalog used in homepage.
- fun build_catalog(model: Model, modelbuilder: ModelBuilder): Catalog do
- var catalog = new Catalog(modelbuilder)
- for mpackage in model.mpackages do
- catalog.deps.add_node(mpackage)
- for mgroup in mpackage.mgroups do
- for mmodule in mgroup.mmodules do
- for imported in mmodule.in_importation.direct_greaters do
- var ip = imported.mpackage
- if ip == null or ip == mpackage then continue
- catalog.deps.add_edge(mpackage, ip)
- end
- end
- end
- catalog.git_info(mpackage)
- catalog.package_page(mpackage)
- end
- return catalog
- end
-
redef fun process_mainmodule(mainmodule, mmodules)
do
- var model = mainmodule.model
- var modelbuilder = toolcontext.modelbuilder
var config = build_config(toolcontext, mainmodule)
- var catalog = build_catalog(model, modelbuilder)
var app = new App
app.use_before("/*", new SessionInit)
app.use_before("/*", new RequestClock)
- app.use("/api", new NitwebAPIRouter(config, catalog))
+ app.use("/api", new NitwebAPIRouter(config))
app.use("/login", new GithubLogin(config.github_client_id))
app.use("/oauth", new GithubOAuthCallBack(config.github_client_id, config.github_client_secret))
app.use("/logout", new GithubLogout)
class NitwebAPIRouter
super APIRouter
- # Catalog to pass to handlers.
- var catalog: Catalog
-
init do
- use("/catalog", new APICatalogRouter(config, catalog))
+ use("/catalog", new APICatalogRouter(config))
use("/list", new APIList(config))
use("/search", new APISearch(config))
use("/random", new APIRandom(config))
import web_base
import catalog
+redef class NitwebConfig
+
+ # Catalog to pass to handlers.
+ var catalog: Catalog is lazy do
+ var catalog = new Catalog(modelbuilder)
+ for mpackage in model.mpackages do
+ catalog.deps.add_node(mpackage)
+ for mgroup in mpackage.mgroups do
+ for mmodule in mgroup.mmodules do
+ for imported in mmodule.in_importation.direct_greaters do
+ var ip = imported.mpackage
+ if ip == null or ip == mpackage then continue
+ catalog.deps.add_edge(mpackage, ip)
+ end
+ end
+ end
+ catalog.git_info(mpackage)
+ catalog.package_page(mpackage)
+ end
+ return catalog
+ end
+end
+
# Group all api handlers in one router.
class APICatalogRouter
super APIRouter
- # Catalog to pass to handlers.
- var catalog: Catalog
-
init do
- use("/highlighted", new APICatalogHighLighted(config, catalog))
- use("/required", new APICatalogMostRequired(config, catalog))
- use("/bytags", new APICatalogByTags(config, catalog))
- use("/contributors", new APICatalogContributors(config, catalog))
- use("/stats", new APICatalogStats(config, catalog))
+ use("/highlighted", new APICatalogHighLighted(config))
+ use("/required", new APICatalogMostRequired(config))
+ use("/bytags", new APICatalogByTags(config))
+ use("/contributors", new APICatalogContributors(config))
+ use("/stats", new APICatalogStats(config))
end
end
abstract class APICatalogHandler
super APIHandler
- var catalog: Catalog
-
# List the 10 best packages from `cpt`
fun list_best(cpt: Counter[MPackage]): JsonArray do
var res = new JsonArray
redef fun get(req, res) do
var obj = new JsonObject
obj["packages"] = config.model.mpackages.length
- obj["maintainers"] = catalog.maint2proj.length
- obj["contributors"] = catalog.contrib2proj.length
- obj["modules"] = catalog.mmodules.sum
- obj["classes"] = catalog.mclasses.sum
- obj["methods"] = catalog.mmethods.sum
- obj["loc"] = catalog.loc.sum
+ obj["maintainers"] = config.catalog.maint2proj.length
+ obj["contributors"] = config.catalog.contrib2proj.length
+ obj["modules"] = config.catalog.mmodules.sum
+ obj["classes"] = config.catalog.mclasses.sum
+ obj["methods"] = config.catalog.mmethods.sum
+ obj["loc"] = config.catalog.loc.sum
res.json obj
end
end
class APICatalogHighLighted
super APICatalogHandler
- redef fun get(req, res) do res.json list_best(catalog.score)
+ redef fun get(req, res) do res.json list_best(config.catalog.score)
end
class APICatalogMostRequired
super APICatalogHandler
redef fun get(req, res) do
- if catalog.deps.not_empty then
+ if config.catalog.deps.not_empty then
var reqs = new Counter[MPackage]
for p in config.model.mpackages do
- reqs[p] = catalog.deps[p].smallers.length - 1
+ reqs[p] = config.catalog.deps[p].smallers.length - 1
end
res.json list_best(reqs)
return
class APICatalogByTags
super APICatalogHandler
- redef fun get(req, res) do res.json list_by(catalog.tag2proj)
+ redef fun get(req, res) do res.json list_by(config.catalog.tag2proj)
end
class APICatalogContributors
redef fun get(req, res) do
var obj = new JsonObject
- obj["maintainers"] = new JsonArray.from(catalog.maint2proj.keys)
- obj["contributors"] = new JsonArray.from(catalog.contrib2proj.keys)
+ obj["maintainers"] = new JsonArray.from(config.catalog.maint2proj.keys)
+ obj["contributors"] = new JsonArray.from(config.catalog.contrib2proj.keys)
res.json obj
end
end