module SwaggerGenerator
EXTRA LINKS:
Constants
- ALLOW_TYPES
- REJECT_NAMES
Public Instance Methods
collection_name()
click to toggle source
# File lib/swagger/generator.rb, line 23 def collection_name @collection_name ||= to_s.split("::").last.sub(/Controller$/, '') end
generate_swagger()
click to toggle source
# File lib/swagger/generator.rb, line 18 def generate_swagger generate_swagger_schemas generate_swagger_paths end
generate_swagger_paths()
click to toggle source
# File lib/swagger/generator.rb, line 59 def generate_swagger_paths name = resource_name plural = collection_name path = plural.underscore tags = [ plural ] swagger_path "/#{ path }" do operation :get do key :tags, tags key :operationId, "index#{ plural }" key :produces, %w(application/json text/csv) parameter do key :name, :page key :in, :query key :required, false key :type, :integer key :format, :int32 end parameter do key :name, :perPage key :in, :query key :required, false key :type, :integer key :format, :int32 end parameter do key :name, :search key :in, :query key :required, false key :type, :string end response 200 do schema type: :array do items do key :'$ref', name end end end end operation :post do key :tags, tags key :operationId, "create#{ plural }" key :produces, %w(application/json) parameter do key :name, name.underscore.to_sym key :in, :form key :required, true schema do key :'$ref', name # input end end response 200 do schema do key :'$ref', name end end end end swagger_path "/#{ path }/{id}" do operation :get do key :tags, tags key :operationId, "show#{ name }ById" key :produces, %w(application/json) parameter do key :name, :id key :in, :path key :required, true key :type, :string end response 200 do schema do key :'$ref', name end end end operation :put do key :tags, tags key :operationId, "update#{ name }" key :produces, %w(application/json) parameter do key :name, :id key :in, :path key :required, true key :type, :string end parameter do key :name, name.underscore.to_sym key :in, :form key :required, true schema do key :'$ref', name # input end end response 200 do schema do key :'$ref', name end end end operation :delete do key :tags, tags key :operationId, "delete#{ name }" parameter do key :name, :id key :in, :path key :required, true key :type, :string end response 204 do key :description, "#{ name } deleted" end end end end
generate_swagger_schemas()
click to toggle source
# File lib/swagger/generator.rb, line 31 def generate_swagger_schemas name = resource_name if resource_class # TODO: add support for resource class option else resource_class = name.constantize end swagger_schema name do # TODO: autogenerate list of required fields # key :required, %w(name email) resource_class.fields.each do |name, options| type = options.type.to_s if ALLOW_TYPES.include? type unless REJECT_NAMES.include? name property name do key :type, :string # TODO: autodetect property type # key :format, 'date-time' end end end end end end
resource_name()
click to toggle source
# File lib/swagger/generator.rb, line 27 def resource_name @resource_name ||= collection_name.singularize end