From 898f9bdcacfdbb25fc151b860a2723b8bbdec9bb Mon Sep 17 00:00:00 2001 From: Alan Plum Date: Wed, 6 Apr 2016 12:03:20 +0200 Subject: [PATCH] Move swagger into Foxx legacy --- .../@arangodb/foxx/legacy/controller.js | 2 +- .../@arangodb/foxx/{ => legacy}/swagger.js | 32 ++++++++++--------- 2 files changed, 18 insertions(+), 16 deletions(-) rename js/server/modules/@arangodb/foxx/{ => legacy}/swagger.js (87%) diff --git a/js/server/modules/@arangodb/foxx/legacy/controller.js b/js/server/modules/@arangodb/foxx/legacy/controller.js index 7eb9070dd1..73eaa8ee2d 100644 --- a/js/server/modules/@arangodb/foxx/legacy/controller.js +++ b/js/server/modules/@arangodb/foxx/legacy/controller.js @@ -28,7 +28,7 @@ const BaseMiddleware = require('@arangodb/foxx/legacy/base_middleware').BaseMidd const _ = require('lodash'); const is = require('@arangodb/is'); const internal = require('@arangodb/foxx/legacy/internals'); -const swagger = require('@arangodb/foxx/swagger'); +const swagger = require('@arangodb/foxx/legacy/swagger'); var authControllerProps = { diff --git a/js/server/modules/@arangodb/foxx/swagger.js b/js/server/modules/@arangodb/foxx/legacy/swagger.js similarity index 87% rename from js/server/modules/@arangodb/foxx/swagger.js rename to js/server/modules/@arangodb/foxx/legacy/swagger.js index e11b4c3d7f..df42b26c82 100644 --- a/js/server/modules/@arangodb/foxx/swagger.js +++ b/js/server/modules/@arangodb/foxx/legacy/swagger.js @@ -1,12 +1,8 @@ 'use strict'; //////////////////////////////////////////////////////////////////////////////// -/// @brief Foxx Swagger integration -/// -/// @file -/// /// DISCLAIMER /// -/// Copyright 2015 triAGENS GmbH, Cologne, Germany +/// Copyright 2015-2016 ArangoDB GmbH, Cologne, Germany /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. @@ -20,10 +16,9 @@ /// See the License for the specific language governing permissions and /// limitations under the License. /// -/// Copyright holder is triAGENS GmbH, Cologne, Germany +/// Copyright holder is ArangoDB GmbH, Cologne, Germany /// /// @author Alan Plum -/// @author Copyright 2015, triAGENS GmbH, Cologne, Germany //////////////////////////////////////////////////////////////////////////////// var _ = require('lodash'); @@ -43,7 +38,7 @@ var jsonSchemaPrimitives = [ 'string' ]; -function createSwaggerRouteHandler(appPath, opts) { +function createSwaggerRouteHandler(defaultAppPath, opts) { if (!opts) { opts = {}; } @@ -58,6 +53,7 @@ function createSwaggerRouteHandler(appPath, opts) { return; } } + var appPath = result ? result.appPath : (opts.appPath || defaultAppPath); var pathInfo = req.suffix.join('/'); if (!pathInfo) { var params = Object.keys(req.parameters || {}).reduce(function (part, name) { @@ -65,7 +61,7 @@ function createSwaggerRouteHandler(appPath, opts) { }, '?'); params = params.slice(0, params.length - 1); res.status(302); - res.set('location', req.absoluteUrl(appPath + req.path(null, 'index.html') + params)); + res.set('location', req.absoluteUrl(defaultAppPath + req.path(null, 'index.html') + params)); return; } if (pathInfo === 'swagger.json') { @@ -73,7 +69,10 @@ function createSwaggerRouteHandler(appPath, opts) { if (typeof swaggerJsonHandler === 'string') { pathInfo = swaggerJsonHandler; } else if (typeof swaggerJsonHandler === 'function') { - swaggerJsonHandler(req, res, {appPath: result ? result.appPath : (opts.appPath || appPath)}); + var foxx = resolveFoxx(req, res, appPath); + if (typeof foxx !== 'undefined') { + swaggerJsonHandler(req, res, {appPath, foxx}); + } return; } } else if (pathInfo === 'index.html') { @@ -101,10 +100,9 @@ function swaggerPath(path, basePath) { return fs.safeJoin(basePath, path); } -function swaggerJson(req, res, opts) { - var foxx; +function resolveFoxx(req, res, appPath) { try { - foxx = FoxxManager.ensureRouted(opts.appPath); + return FoxxManager.ensureRouted(appPath); } catch (e) { if (e instanceof ArangoError && e.errorNum === errors.ERROR_APP_NOT_FOUND.code) { resultNotFound(req, res, 404, e.errorMessage); @@ -112,10 +110,14 @@ function swaggerJson(req, res, opts) { } throw e; } +} + +function swaggerJson(req, res, opts) { + let foxx = opts.foxx || resolveFoxx(req, res, opts.appPath); let docs = foxx.docs; if (!docs) { - var app = foxx.routes.foxxContext && foxx.routes.foxxContext.service; - var swagger = parseRoutes(opts.appPath, foxx.routes.routes, foxx.routes.models); + const app = foxx.routes.foxxContext && foxx.routes.foxxContext.service; + const swagger = parseRoutes(opts.appPath, foxx.routes.routes, foxx.routes.models); docs = { swagger: '2.0', info: {