forked from loafle/openapi-generator-original
added sinatra samples
This commit is contained in:
parent
5662891d62
commit
4b43e70555
12
samples/server-generator/sinatra/output/MyApp.rb
Normal file
12
samples/server-generator/sinatra/output/MyApp.rb
Normal file
@ -0,0 +1,12 @@
|
||||
require './lib/swaggering'
|
||||
|
||||
# only need to extend if you want special configuration!
|
||||
class MyApp < Swaggering
|
||||
self.configure do |config|
|
||||
config.api_version = '0.2'
|
||||
end
|
||||
end
|
||||
|
||||
require './lib/PetApi.rb'
|
||||
require './lib/StoreApi.rb'
|
||||
require './lib/UserApi.rb'
|
1
samples/server-generator/sinatra/output/README.md
Normal file
1
samples/server-generator/sinatra/output/README.md
Normal file
@ -0,0 +1 @@
|
||||
## empty
|
2
samples/server-generator/sinatra/output/config.ru
Normal file
2
samples/server-generator/sinatra/output/config.ru
Normal file
@ -0,0 +1,2 @@
|
||||
require './myapp'
|
||||
run MyApp
|
112
samples/server-generator/sinatra/output/lib/PetApi.rb
Normal file
112
samples/server-generator/sinatra/output/lib/PetApi.rb
Normal file
@ -0,0 +1,112 @@
|
||||
require 'json'
|
||||
|
||||
MyApp.add_route('get', '/:petId', {
|
||||
"resourcePath" => "/pet",
|
||||
"summary" => "Find pet by ID",
|
||||
"nickname" => "getPetById",
|
||||
"responseClass" => "Pet",
|
||||
"endpoint" => "/:petId",
|
||||
"notes" => "Returns a pet based on ID",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "petId",
|
||||
"description" => "ID of pet that needs to be fetched",
|
||||
"dataType" => "string",
|
||||
"paramType" => "path",
|
||||
},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('post', '/', {
|
||||
"resourcePath" => "/pet",
|
||||
"summary" => "Add a new pet to the store",
|
||||
"nickname" => "addPet",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "body",
|
||||
"description" => "Pet object that needs to be added to the store",
|
||||
"dataType" => "Pet",
|
||||
"paramType" => "body",
|
||||
}
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('put', '/', {
|
||||
"resourcePath" => "/pet",
|
||||
"summary" => "Update an existing pet",
|
||||
"nickname" => "updatePet",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "body",
|
||||
"description" => "Pet object that needs to be updated in the store",
|
||||
"dataType" => "Pet",
|
||||
"paramType" => "body",
|
||||
}
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('get', '/findByStatus', {
|
||||
"resourcePath" => "/pet",
|
||||
"summary" => "Finds Pets by status",
|
||||
"nickname" => "findPetsByStatus",
|
||||
"responseClass" => "List[Pet]",
|
||||
"endpoint" => "/findByStatus",
|
||||
"notes" => "Multiple status values can be provided with comma seperated strings",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "status",
|
||||
"description" => "Status values that need to be considered for filter",
|
||||
"dataType" => "string",
|
||||
"paramType" => "query",
|
||||
"allowMultiple" => true,
|
||||
"allowableValues" => "LIST[available,pending,sold]",
|
||||
"defaultValue" => "available"},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('get', '/findByTags', {
|
||||
"resourcePath" => "/pet",
|
||||
"summary" => "Finds Pets by tags",
|
||||
"nickname" => "findPetsByTags",
|
||||
"responseClass" => "List[Pet]",
|
||||
"endpoint" => "/findByTags",
|
||||
"notes" => "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "tags",
|
||||
"description" => "Tags to filter by",
|
||||
"dataType" => "string",
|
||||
"paramType" => "query",
|
||||
"allowMultiple" => true,
|
||||
"allowableValues" => "",
|
||||
},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
|
66
samples/server-generator/sinatra/output/lib/StoreApi.rb
Normal file
66
samples/server-generator/sinatra/output/lib/StoreApi.rb
Normal file
@ -0,0 +1,66 @@
|
||||
require 'json'
|
||||
|
||||
MyApp.add_route('get', '/order/:orderId', {
|
||||
"resourcePath" => "/store",
|
||||
"summary" => "Find purchase order by ID",
|
||||
"nickname" => "getOrderById",
|
||||
"responseClass" => "Order",
|
||||
"endpoint" => "/order/:orderId",
|
||||
"notes" => "For valid response try integer IDs with value <= 5. Anything above 5 or nonintegers will generate API errors",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "orderId",
|
||||
"description" => "ID of pet that needs to be fetched",
|
||||
"dataType" => "string",
|
||||
"paramType" => "path",
|
||||
},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('delete', '/order/:orderId', {
|
||||
"resourcePath" => "/store",
|
||||
"summary" => "Delete purchase order by ID",
|
||||
"nickname" => "deleteOrder",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/order/:orderId",
|
||||
"notes" => "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "orderId",
|
||||
"description" => "ID of the order that needs to be deleted",
|
||||
"dataType" => "string",
|
||||
"paramType" => "path",
|
||||
},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('post', '/order', {
|
||||
"resourcePath" => "/store",
|
||||
"summary" => "Place an order for a pet",
|
||||
"nickname" => "placeOrder",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/order",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "body",
|
||||
"description" => "order placed for purchasing the pet",
|
||||
"dataType" => "Order",
|
||||
"paramType" => "body",
|
||||
}
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
|
154
samples/server-generator/sinatra/output/lib/Swaggering.rb
Normal file
154
samples/server-generator/sinatra/output/lib/Swaggering.rb
Normal file
@ -0,0 +1,154 @@
|
||||
require 'json'
|
||||
require 'sinatra/base'
|
||||
require 'sinatra/cross_origin'
|
||||
|
||||
class Configuration
|
||||
attr_accessor :base_path, :api_version, :swagger_version, :format_specifier
|
||||
|
||||
def initialize
|
||||
@api_version = '1.0'
|
||||
@base_path = 'http://localhost:4567'
|
||||
@swagger_version = '1.1'
|
||||
@format_specifier = ".json"
|
||||
end
|
||||
end
|
||||
|
||||
class Swaggering < Sinatra::Base
|
||||
register Sinatra::CrossOrigin
|
||||
|
||||
@@routes = {}
|
||||
@@configuration = Configuration.new
|
||||
|
||||
attr_accessor :configuration
|
||||
|
||||
def self.configure
|
||||
get("/resources" + @@configuration.format_specifier) {
|
||||
cross_origin
|
||||
Swaggering.to_resource_listing
|
||||
}
|
||||
@@configuration ||= Configuration.new
|
||||
yield(@@configuration) if block_given?
|
||||
end
|
||||
|
||||
def self.add_route(method, path, swag={}, opts={}, &block)
|
||||
fullPath = swag["resourcePath"].to_s + @@configuration.format_specifier + path
|
||||
|
||||
accepted = case method
|
||||
when 'get'
|
||||
get(fullPath, opts, &block)
|
||||
true
|
||||
when 'post'
|
||||
post(fullPath, opts, &block)
|
||||
true
|
||||
when 'delete'
|
||||
delete(fullPath, opts, &block)
|
||||
true
|
||||
when 'put'
|
||||
put(fullPath, opts, &block)
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
|
||||
if accepted then
|
||||
resourcePath = swag["resourcePath"].to_s
|
||||
ops = @@routes[resourcePath]
|
||||
if ops.nil?
|
||||
ops = Array.new
|
||||
@@routes.merge!(resourcePath => ops)
|
||||
|
||||
get(resourcePath + @@configuration.format_specifier) do
|
||||
cross_origin
|
||||
Swaggering.to_api(resourcePath)
|
||||
end
|
||||
end
|
||||
|
||||
swag.merge!("httpMethod" => method.to_s.upcase)
|
||||
ops.push(swag)
|
||||
end
|
||||
end
|
||||
|
||||
def self.to_resource_listing
|
||||
apis = Array.new
|
||||
(@@routes.keys).each do |key|
|
||||
api = {
|
||||
"path" => (key + ".{format}"),
|
||||
"description" => "no description"
|
||||
}
|
||||
apis.push api
|
||||
end
|
||||
|
||||
resource = {
|
||||
"apiVersion" => @@configuration.api_version,
|
||||
"swaggerVersion" => @@configuration.swagger_version,
|
||||
"apis" => apis
|
||||
}
|
||||
|
||||
resource.to_json
|
||||
end
|
||||
|
||||
def self.to_api(resourcePath)
|
||||
apis = {}
|
||||
models = []
|
||||
|
||||
@@routes[resourcePath].each do |route|
|
||||
endpoint = route["endpoint"].gsub(/:(\w+)(\/?)/,'{\1}\2')
|
||||
path = (resourcePath + ".{format}" + endpoint)
|
||||
api = apis[path]
|
||||
if api.nil?
|
||||
api = {"path" => path, "description" => "description", "operations" => []}
|
||||
apis.merge!(path => api)
|
||||
end
|
||||
|
||||
parameters = route["parameters"]
|
||||
|
||||
unless parameters.nil? then
|
||||
parameters.each do |param|
|
||||
av_string = param["allowableValues"]
|
||||
unless av_string.nil?
|
||||
if av_string.count('[') > 0
|
||||
pattern = /^([A-Z]*)\[(.*)\]/
|
||||
match = pattern.match av_string
|
||||
case match.to_a[1]
|
||||
when "LIST"
|
||||
allowables = match.to_a[2].split(',')
|
||||
param["allowableValues"] = {
|
||||
"valueType" => "LIST",
|
||||
"values" => allowables
|
||||
}
|
||||
when "RANGE"
|
||||
allowables = match.to_a[2].split(',')
|
||||
param["allowableValues"] = {
|
||||
"valueType" => "RANGE",
|
||||
"min" => allowables[0],
|
||||
"max" => allowables[1]
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
op = {
|
||||
"httpMethod" => route["httpMethod"],
|
||||
"description" => route["summary"],
|
||||
"responseClass" => route["responseClass"],
|
||||
"notes" => route["notes"],
|
||||
"nickname" => route["nickname"],
|
||||
"summary" => route["summary"],
|
||||
"parameters" => route["parameters"]
|
||||
}
|
||||
api["operations"].push(op)
|
||||
end
|
||||
|
||||
api_listing = {
|
||||
"apiVersion" => @@configuration.api_version,
|
||||
"swaggerVersion" => @@configuration.swagger_version,
|
||||
"basePath" => @@configuration.base_path,
|
||||
"resourcePath" => resourcePath,
|
||||
"apis" => apis.values,
|
||||
"models" => models
|
||||
}
|
||||
api_listing.to_json
|
||||
end
|
||||
end
|
181
samples/server-generator/sinatra/output/lib/UserApi.rb
Normal file
181
samples/server-generator/sinatra/output/lib/UserApi.rb
Normal file
@ -0,0 +1,181 @@
|
||||
require 'json'
|
||||
|
||||
MyApp.add_route('post', '/createWithArray', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Creates list of users with given input array",
|
||||
"nickname" => "createUsersWithArrayInput",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/createWithArray",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "body",
|
||||
"description" => "List of user object",
|
||||
"dataType" => "Array[User]",
|
||||
"paramType" => "body",
|
||||
}
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('post', '/', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Create user",
|
||||
"nickname" => "createUser",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/",
|
||||
"notes" => "This can only be done by the logged in user.",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "body",
|
||||
"description" => "Created user object",
|
||||
"dataType" => "User",
|
||||
"paramType" => "body",
|
||||
}
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('post', '/createWithList', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Creates list of users with given list input",
|
||||
"nickname" => "createUsersWithListInput",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/createWithList",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "body",
|
||||
"description" => "List of user object",
|
||||
"dataType" => "List[User]",
|
||||
"paramType" => "body",
|
||||
}
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('put', '/:username', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Updated user",
|
||||
"nickname" => "updateUser",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/:username",
|
||||
"notes" => "This can only be done by the logged in user.",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "username",
|
||||
"description" => "name that need to be deleted",
|
||||
"dataType" => "string",
|
||||
"paramType" => "path",
|
||||
},
|
||||
{
|
||||
"name" => "body",
|
||||
"description" => "Updated user object",
|
||||
"dataType" => "User",
|
||||
"paramType" => "body",
|
||||
}
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('delete', '/:username', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Delete user",
|
||||
"nickname" => "deleteUser",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/:username",
|
||||
"notes" => "This can only be done by the logged in user.",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "username",
|
||||
"description" => "The name that needs to be deleted",
|
||||
"dataType" => "string",
|
||||
"paramType" => "path",
|
||||
},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('get', '/:username', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Get user by user name",
|
||||
"nickname" => "getUserByName",
|
||||
"responseClass" => "User",
|
||||
"endpoint" => "/:username",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "username",
|
||||
"description" => "The name that needs to be fetched. Use user1 for testing.",
|
||||
"dataType" => "string",
|
||||
"paramType" => "path",
|
||||
},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('get', '/login', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Logs user into the system",
|
||||
"nickname" => "loginUser",
|
||||
"responseClass" => "String",
|
||||
"endpoint" => "/login",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
{
|
||||
"name" => "username",
|
||||
"description" => "The user name for login",
|
||||
"dataType" => "string",
|
||||
"paramType" => "query",
|
||||
"allowMultiple" => false,
|
||||
"allowableValues" => "",
|
||||
},
|
||||
{
|
||||
"name" => "password",
|
||||
"description" => "The password for login in clear text",
|
||||
"dataType" => "string",
|
||||
"paramType" => "query",
|
||||
"allowMultiple" => false,
|
||||
"allowableValues" => "",
|
||||
},
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
MyApp.add_route('get', '/logout', {
|
||||
"resourcePath" => "/user",
|
||||
"summary" => "Logs out current logged in user session",
|
||||
"nickname" => "logoutUser",
|
||||
"responseClass" => "void",
|
||||
"endpoint" => "/logout",
|
||||
"notes" => "",
|
||||
"parameters" => [
|
||||
]}) do
|
||||
cross_origin
|
||||
# the guts live here
|
||||
|
||||
{"message" => "yes, it worked"}.to_json
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user