// mapChildNamespaceRoute sets a handler returning a dictionary of resources // supported by a certain API version identified by the given namespace func mapChildNamespaceRoute(route martini.Router, namespace *schema.Namespace) { log.Debug("[Path] %s", namespace.GetFullPrefix()) route.Get( namespace.GetFullPrefix(), func(w http.ResponseWriter, r *http.Request, p martini.Params, context martini.Context) { resources := []schema.NamespaceResource{} for _, s := range schema.GetManager().Schemas() { if s.NamespaceID == namespace.ID { resources = append(resources, schema.NamespaceResource{ Links: []schema.Link{ schema.Link{ Href: s.GetPluralURL(), Rel: "self", }, }, Name: s.Singular, Collection: s.Plural, }) } } routes.ServeJson(w, map[string][]schema.NamespaceResource{"resources": resources}) }, ) }
// mapTopLevelNamespaceRoute maps route listing available subnamespaces (versions) // for a top-level namespace func mapTopLevelNamespaceRoute(route martini.Router, namespace *schema.Namespace) { log.Debug("[Path] %s/", namespace.GetFullPrefix()) route.Get( namespace.GetFullPrefix()+"/", func(w http.ResponseWriter, r *http.Request, p martini.Params, context martini.Context) { versions := []schema.Version{} for _, childNamespace := range schema.GetManager().Namespaces() { if childNamespace.Parent == namespace.ID { versions = append(versions, schema.Version{ Status: "SUPPORTED", ID: childNamespace.Prefix, Links: []schema.Link{ schema.Link{ Href: childNamespace.GetFullPrefix() + "/", Rel: "self", }, }, }) } } if len(versions) != 0 { versions[len(versions)-1].Status = "CURRENT" } routes.ServeJson(w, map[string][]schema.Version{"versions": versions}) }) }