From dcd9983ce862bfbea3c82e3727895c9b3bfa822a Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Thu, 31 Mar 2016 00:20:31 +0300 Subject: [PATCH 1/7] Add download swagger button (#1) --- lib/components/ApiInfo/api-info.html | 4 ++++ lib/components/ApiInfo/api-info.js | 8 ++++++-- lib/components/Redoc/redoc.js | 5 +++-- lib/options.js | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/components/ApiInfo/api-info.html b/lib/components/ApiInfo/api-info.html index 05765f17..8083a884 100644 --- a/lib/components/ApiInfo/api-info.html +++ b/lib/components/ApiInfo/api-info.html @@ -14,4 +14,8 @@ {{data.license.name}}

+

+ Download OpenAPI (fka Swagger) specification: + Download +

diff --git a/lib/components/ApiInfo/api-info.js b/lib/components/ApiInfo/api-info.js index d179dae9..8fd9391c 100644 --- a/lib/components/ApiInfo/api-info.js +++ b/lib/components/ApiInfo/api-info.js @@ -1,18 +1,22 @@ 'use strict'; -import {RedocComponent, BaseComponent} from '../base'; +import {SchemaManager, RedocComponent, BaseComponent} from '../base'; +import OptionsManager from '../../options'; @RedocComponent({ selector: 'api-info', styleUrls: ['./lib/components/ApiInfo/api-info.css'], templateUrl: './lib/components/ApiInfo/api-info.html' }) +@Reflect.metadata('parameters', [[SchemaManager], [OptionsManager]]) export default class ApiInfo extends BaseComponent { - constructor(schemaMgr) { + constructor(schemaMgr, optionsMgr) { super(schemaMgr); + this.optionsMgr = optionsMgr; } prepareModel() { this.data = this.componentSchema.info; + this.specUrl = this.optionsMgr.options.specUrl; } } diff --git a/lib/components/Redoc/redoc.js b/lib/components/Redoc/redoc.js index 4faa1353..e1bceb4b 100644 --- a/lib/components/Redoc/redoc.js +++ b/lib/components/Redoc/redoc.js @@ -57,9 +57,10 @@ export default class Redoc extends BaseComponent { }, 400); } - static init(schemaUrl, options) { + static init(specUrl, options) { var optionsMgr = new OptionsManager(); optionsMgr.options = options; + optionsMgr.options.specUrl = optionsMgr.options.specUrl || specUrl; var providers = [ provide(OptionsManager, {useValue: optionsMgr}) ]; @@ -68,7 +69,7 @@ export default class Redoc extends BaseComponent { Redoc.dispose(); } Redoc.showLoadingAnimation(); - return SchemaManager.instance().load(schemaUrl) + return SchemaManager.instance().load(specUrl) .then(() => { if (!_modeLocked && !optionsMgr.options.debugMode) { enableProdMode(); diff --git a/lib/options.js b/lib/options.js index 689310a5..d708b86c 100644 --- a/lib/options.js +++ b/lib/options.js @@ -10,7 +10,7 @@ var defaults = { debugMode: global.redocDebugMode }; -var OPTION_NAMES = new Set(['scrollYOffset', 'disableLazySchemas']); +var OPTION_NAMES = new Set(['scrollYOffset', 'disableLazySchemas', 'specUrl']); @Reflect.metadata('parameters', [[BrowserDomAdapter]]) export default class OptionsManager { From d141f675592494855c8052f79d3500c7ddd291ce Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Thu, 31 Mar 2016 01:08:13 +0300 Subject: [PATCH 2/7] Use spec and image from SwaggerTmplRepo --- demo/index.html | 4 +- demo/petstore-logo.png | Bin 9002 -> 0 bytes demo/swagger.yml | 877 ----------------------------------------- 3 files changed, 2 insertions(+), 879 deletions(-) delete mode 100644 demo/petstore-logo.png delete mode 100644 demo/swagger.yml diff --git a/demo/index.html b/demo/index.html index c189d992..835c2080 100644 --- a/demo/index.html +++ b/demo/index.html @@ -9,12 +9,12 @@ - + diff --git a/demo/petstore-logo.png b/demo/petstore-logo.png deleted file mode 100644 index 79ad81d626026fb7e97a0a49014d5b438d27d745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9002 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 F{|9wNW`zI% diff --git a/demo/swagger.yml b/demo/swagger.yml deleted file mode 100644 index 7af5f3d8..00000000 --- a/demo/swagger.yml +++ /dev/null @@ -1,877 +0,0 @@ ---- - swagger: "2.0" - info: - description: "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters." - version: "1.0.0" - title: "Swagger Petstore" - termsOfService: "http://swagger.io/terms/" - contact: - email: "apiteam@swagger.io" - x-logo: - url: "https://rebilly.github.io/ReDoc/petstore-logo.png" - license: - name: "Apache 2.0" - url: "http://www.apache.org/licenses/LICENSE-2.0.html" - host: "petstore.swagger.io" - basePath: "/v2" - tags: - - - name: "Pagination" - x-traitTag: true - description: |- - Sometimes you just can't get enough. For this reason, we've provided a convenient way to access more data in - any request for sequential data. Simply call the url in the next_url parameter and we'll respond with the next - set of data. - - ```json - { - ... - "pagination": { - "next_url": "https://api.instagram.com/v1/tags/puppy/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&max_id=13872296", - "next_max_id": "13872296" - } - } - ``` - - On views where pagination is present, we also support the `count` parameter. - Simply set this to the number of items you'd like to receive. Note that the default values - should be fine for most applications - but if you decide to increase this number there is a maximum value - defined on each endpoint. - externalDocs: - description: "Find out more" - url: "http://swagger.io" - - - name: "JSONP" - x-traitTag: true - description: |- - If you're writing an AJAX application, and you'd like to wrap our response with a callback, - all you have to do is specify a callback parameter with any API call: - - ``` - https://api.instagram.com/v1/tags/coffee/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&callback=callbackFunction - ``` - Would respond with: - - ```js - callbackFunction({ - ... - }); - ``` - - > Example of markdown blockquote - externalDocs: - description: "Find out more" - url: "http://swagger.io" - - - name: "pet" - description: "Everything about your Pets" - externalDocs: - description: "Find out more" - url: "http://swagger.io" - - - name: "store" - description: "Access to Petstore orders" - - - name: "user" - description: "Operations about user" - externalDocs: - description: "Find out more about our store" - url: "http://swagger.io" - schemes: - - "http" - paths: - /pet: - post: - tags: - - "pet" - summary: "Add a new pet to the store" - description: "" - operationId: "addPet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - responses: - 405: - description: "Invalid input" - security: - - - petstore_auth: - - "write:pets" - - "read:pets" - x-code-samples: - - - lang: PHP - source: |- - $form = new \PetStore\Entities\Pet(); - $form->setPetType("Dog"); - $form->setName("Rex"); - // set other fields - - try { - $pet = $client->pets()->create($form); - } catch (UnprocessableEntityException $e) { - var_dump($e->getErrors()); - } - - - lang: C# - source: |- - PetStore.v1.Pet pet = new PetStore.v1.Pet(); - pet.setApiKey("your api key"); - pet.petType = PetStore.v1.Pet.TYPE_DOG; - pet.name = "Rex"; - // set other fields - - PetStoreResponse response = pet.create(); - if (response.statusCode == HttpStatusCode.Created) - { - // Successfully created - } - else - { - // Something wrong -- check response for errors - Console.WriteLine(response.getRawResponse()); - } - put: - tags: - - "pet" - summary: "Update an existing pet" - description: "" - operationId: "updatePet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - 405: - description: "Validation exception" - x-code-samples: - - - lang: PHP - source: |- - $form = new \PetStore\Entities\Pet(); - $form->setPetId(1); - $form->setPetType("Dog"); - $form->setName("Rex"); - // set other fields - - try { - $pet = $client->pets()->update($form); - } catch (UnprocessableEntityException $e) { - var_dump($e->getErrors()); - } - security: - - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByStatus: - get: - tags: - - "pet" - - "Pagination" - - "JSONP" - summary: "Finds Pets by status" - description: "Multiple status values can be provided with comma seperated strings" - operationId: "findPetsByStatus" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "status" - in: "query" - description: "Status values that need to be considered for filter" - required: true - type: "array" - items: - type: "string" - enum: - - "available" - - "pending" - - "sold" - default: "available" - collectionFormat: "csv" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid status value" - security: - - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByTags: - get: - tags: - - "pet" - - "Pagination" - - "JSONP" - summary: "Finds Pets by tags" - description: "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing." - operationId: "findPetsByTags" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "tags" - in: "query" - description: "Tags to filter by" - required: true - type: "array" - items: - type: "string" - collectionFormat: "csv" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid tag value" - security: - - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/{petId}: - get: - tags: - - "pet" - - "JSONP" - summary: "Find pet by ID" - description: "Returns a single pet" - operationId: "getPetById" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "petId" - in: "path" - description: "ID of pet to return" - required: true - type: "integer" - format: "int64" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Pet" - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - security: - - - api_key: [] - post: - tags: - - "pet" - summary: "Updates a pet in the store with form data" - description: "" - operationId: "updatePetWithForm" - consumes: - - "application/x-www-form-urlencoded" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "petId" - in: "path" - description: "ID of pet that needs to be updated" - required: true - type: "integer" - format: "int64" - - - name: "name" - in: "formData" - description: "Updated name of the pet" - required: false - type: "string" - - - name: "status" - in: "formData" - description: "Updated status of the pet" - required: false - type: "string" - responses: - 405: - description: "Invalid input" - security: - - - petstore_auth: - - "write:pets" - - "read:pets" - delete: - tags: - - "pet" - summary: "Deletes a pet" - description: "" - operationId: "deletePet" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "api_key" - in: "header" - required: false - type: "string" - - - name: "petId" - in: "path" - description: "Pet id to delete" - required: true - type: "integer" - format: "int64" - responses: - 400: - description: "Invalid pet value" - security: - - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/{petId}/uploadImage: - post: - tags: - - "pet" - summary: "uploads an image" - description: "" - operationId: "uploadFile" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - - name: "petId" - in: "path" - description: "ID of pet to update" - required: true - type: "integer" - format: "int64" - - - name: "additionalMetadata" - in: "formData" - description: "Additional data to pass to server" - required: false - type: "string" - - - name: "file" - in: "formData" - description: "file to upload" - required: false - type: "file" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/ApiResponse" - security: - - - petstore_auth: - - "write:pets" - - "read:pets" - /store/inventory: - get: - tags: - - "store" - - "JSONP" - summary: "Returns pet inventories by status" - description: "Returns a map of status codes to quantities" - operationId: "getInventory" - produces: - - "application/json" - parameters: [] - responses: - 200: - description: "successful operation" - schema: - type: "object" - additionalProperties: - type: "integer" - format: "int32" - security: - - - api_key: [] - /store/order: - post: - tags: - - "store" - summary: "Place an order for a pet" - description: "" - operationId: "placeOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - - in: "body" - name: "body" - description: "order placed for purchasing the pet" - required: true - schema: - $ref: "#/definitions/Order" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid Order" - /store/order/{orderId}: - get: - tags: - - "store" - - "JSONP" - summary: "Find purchase order by ID" - description: "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions" - operationId: "getOrderById" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "orderId" - in: "path" - description: "ID of pet that needs to be fetched" - required: true - type: "integer" - maximum: 5 - minimum: 1 - format: "int64" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - delete: - tags: - - "store" - summary: "Delete purchase order by ID" - description: "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors" - operationId: "deleteOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "orderId" - in: "path" - description: "ID of the order that needs to be deleted" - required: true - type: "string" - minimum: 1 - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - /user: - post: - tags: - - "user" - summary: "Create user" - description: "This can only be done by the logged in user." - operationId: "createUser" - produces: - - "application/xml" - - "application/json" - parameters: - - - in: "body" - name: "body" - description: "Created user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/createWithArray: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithArrayInput" - produces: - - "application/xml" - - "application/json" - parameters: - - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/createWithList: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithListInput" - produces: - - "application/xml" - - "application/json" - parameters: - - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/login: - get: - tags: - - "user" - summary: "Logs user into the system" - description: "" - operationId: "loginUser" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "username" - in: "query" - description: "The user name for login" - required: true - type: "string" - - - name: "password" - in: "query" - description: "The password for login in clear text" - required: true - type: "string" - responses: - 200: - description: "successful operation" - schema: - type: "string" - headers: - X-Rate-Limit: - type: "integer" - format: "int32" - description: "calls per hour allowed by the user" - X-Expires-After: - type: "string" - format: "date-time" - description: "date in UTC when toekn expires" - 400: - description: "Invalid username/password supplied" - /user/logout: - get: - tags: - - "user" - summary: "Logs out current logged in user session" - description: "" - operationId: "logoutUser" - produces: - - "application/xml" - - "application/json" - parameters: [] - responses: - default: - description: "successful operation" - /user/{username}: - get: - tags: - - "user" - - "JSONP" - summary: "Get user by user name" - description: "" - operationId: "getUserByName" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "username" - in: "path" - description: "The name that needs to be fetched. Use user1 for testing. " - required: true - type: "string" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/User" - 400: - description: "Invalid username supplied" - 404: - description: "User not found" - put: - tags: - - "user" - summary: "Updated user" - description: "This can only be done by the logged in user." - operationId: "updateUser" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "username" - in: "path" - description: "name that need to be deleted" - required: true - type: "string" - - - in: "body" - name: "body" - description: "Updated user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - 400: - description: "Invalid user supplied" - 404: - description: "User not found" - delete: - tags: - - "user" - summary: "Delete user" - description: "This can only be done by the logged in user." - operationId: "deleteUser" - produces: - - "application/xml" - - "application/json" - parameters: - - - name: "username" - in: "path" - description: "The name that needs to be deleted" - required: true - type: "string" - responses: - 400: - description: "Invalid username supplied" - 404: - description: "User not found" - securityDefinitions: - petstore_auth: - type: "oauth2" - authorizationUrl: "http://petstore.swagger.io/api/oauth/dialog" - flow: "implicit" - scopes: - write:pets: "modify pets in your account" - read:pets: "read your pets" - api_key: - type: "apiKey" - name: "api_key" - in: "header" - definitions: - Order: - type: "object" - properties: - id: - type: "integer" - format: "int64" - petId: - type: "integer" - format: "int64" - quantity: - type: "integer" - format: "int32" - shipDate: - type: "string" - format: "date-time" - status: - type: "string" - description: "Order Status" - enum: - - "placed" - - "approved" - - "delivered" - complete: - type: "boolean" - default: false - xml: - name: "Order" - User: - type: "object" - properties: - id: - type: "integer" - format: "int64" - username: - type: "string" - firstName: - type: "string" - lastName: - type: "string" - email: - type: "string" - password: - type: "string" - phone: - type: "string" - userStatus: - type: "integer" - format: "int32" - description: "User Status" - xml: - name: "User" - Category: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - xml: - name: "Category" - Tag: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - xml: - name: "Tag" - Pet: - type: "object" - required: - - "name" - - "photoUrls" - - "petType" - discriminator: "petType" - properties: - petType: - type: "string" - id: - type: "integer" - format: "int64" - category: - $ref: "#/definitions/Category" - name: - type: "string" - example: "doggie" - photoUrls: - type: "array" - xml: - name: "photoUrl" - wrapped: true - items: - type: "string" - tags: - type: "array" - xml: - name: "tag" - wrapped: true - items: - $ref: "#/definitions/Tag" - status: - type: "string" - description: "pet status in the store" - enum: - - "available" - - "pending" - - "sold" - xml: - name: "Pet" - Cat: - description: "A representation of a cat" - allOf: - - - $ref: "#/definitions/Pet" - - - type: "object" - properties: - huntingSkill: - type: "string" - description: "The measured skill for hunting" - default: "lazy" - enum: - - "clueless" - - "lazy" - - "adventurous" - - "aggressive" - required: - - "huntingSkill" - Dog: - description: "A representation of a dog" - allOf: - - - $ref: "#/definitions/Pet" - - - type: "object" - properties: - packSize: - type: "integer" - format: "int32" - description: "the size of the pack the dog is from" - default: 0 - minimum: 0 - required: - - "packSize" - ApiResponse: - type: "object" - properties: - code: - type: "integer" - format: "int32" - type: - type: "string" - message: - type: "string" - externalDocs: - description: "Find out more about Swagger" - url: "http://swagger.io" From cd52d81b464260c2bfd0238e1124f931f8770bdf Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Thu, 31 Mar 2016 01:15:54 +0300 Subject: [PATCH 3/7] fix test --- lib/components/ApiInfo/api-info.spec.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/components/ApiInfo/api-info.spec.js b/lib/components/ApiInfo/api-info.spec.js index 4b16d6f7..ae5e8b83 100644 --- a/lib/components/ApiInfo/api-info.spec.js +++ b/lib/components/ApiInfo/api-info.spec.js @@ -13,7 +13,9 @@ import { import ApiInfo from 'lib/components/ApiInfo/api-info'; import SchemaManager from 'lib/utils/SchemaManager'; +import OptionsManager from 'lib/options'; +let optsMgr = new OptionsManager(); describe('Redoc components', () => { describe('ApiInfo Component', () => { @@ -21,7 +23,8 @@ describe('Redoc components', () => { let component; let fixture; beforeEachProviders(() => [ - provide(SchemaManager, {useValue: new SchemaManager()}) + provide(SchemaManager, {useValue: new SchemaManager()}), + provide(OptionsManager, {useValue: optsMgr}) ]); beforeEach(injectAsync([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => { builder = tcb; From 84a9a5c520e221fbc60e1ca2bbbd6c5b77615ff5 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Thu, 31 Mar 2016 19:40:32 +0300 Subject: [PATCH 4/7] resotre image and use yml instead of json --- demo/index.html | 4 ++-- demo/petstore-logo.png | Bin 0 -> 9002 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 demo/petstore-logo.png diff --git a/demo/index.html b/demo/index.html index 835c2080..ccd41077 100644 --- a/demo/index.html +++ b/demo/index.html @@ -9,12 +9,12 @@ - + diff --git a/demo/petstore-logo.png b/demo/petstore-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..79ad81d626026fb7e97a0a49014d5b438d27d745 GIT binary patch literal 9002 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 F{|9wNW`zI% literal 0 HcmV?d00001 From 46ed1ae16bc0629e95e4930419eaeaee9ec364a5 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Thu, 31 Mar 2016 19:41:17 +0300 Subject: [PATCH 5/7] fix e2e test --- tests/e2e/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/index.html b/tests/e2e/index.html index 599429c5..2b360322 100644 --- a/tests/e2e/index.html +++ b/tests/e2e/index.html @@ -14,7 +14,7 @@