class Swaggable::Swagger2Serializer
Generates a Swagger 2 hash from an {ApiDefinition}.
@example Basic usage
serializer = Swagger2Serializer.new api_definition = ApiDefinition.new serializer.serialize(api_definition) # => {:swagger=>"2.0", :basePath=>nil, :info=>{:title=>nil, :description=>nil, :version=>nil}, :tags=>[], :paths=>{}}
Attributes
tag_serializer[RW]
Public Instance Methods
serialize(api)
click to toggle source
Main method that given an {ApiDefinition} will return a hash to serialize
# File lib/swaggable/swagger_2_serializer.rb, line 14 def serialize api { swagger: '2.0', basePath: api.base_path, info: serialize_info(api), tags: api.tags.map{|t| serialize_tag t }, paths: serialize_endpoints(api.endpoints), definitions: serialize_definitions(api), } end
serialize_definitions(api)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 118 def serialize_definitions api api.used_schemas.inject({}) do |acc, schema| acc[schema.name] = serialize_parameter_schema schema acc end end
serialize_endpoint(endpoint)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 52 def serialize_endpoint endpoint { tags: endpoint.tags.map(&:name), consumes: endpoint.consumes.map(&:http_string), produces: endpoint.produces.map(&:http_string), parameters: endpoint.parameters.map{|p| serialize_parameter p }, responses: serialize_responses(endpoint.responses), }. tap do |e| e[:summary] = endpoint.summary if endpoint.summary e[:description] = endpoint.description if endpoint.description end end
serialize_endpoints(endpoints)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 44 def serialize_endpoints endpoints endpoints.inject({}) do |out, endpoint| out[endpoint.path] ||= {} out[endpoint.path][endpoint.verb.downcase.to_sym] = serialize_endpoint(endpoint) out end end
serialize_info(api)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 25 def serialize_info api { title: api.title.to_s, version: (api.version || '0.0.0'), }. tap do |h| h[:description] = api.description if api.description end end
serialize_parameter(parameter)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 66 def serialize_parameter parameter p = { in: parameter.location.to_s, name: parameter.name, required: parameter.required?, } p[:type] = parameter.type || 'string' unless parameter.location == :body p[:description] = parameter.description if parameter.description unless parameter.schema.empty? p[:schema] = {:"$ref" => "#/definitions/#{parameter.schema.name}"} end p end
serialize_parameter_attribute(attribute)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 97 def serialize_parameter_attribute attribute { type: attribute.json_type, }. tap do |e| e[:description] = attribute.description if attribute.description e[:format] = attribute.json_format if attribute.json_format end end
serialize_parameter_schema(schema)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 83 def serialize_parameter_schema schema out = {type: 'object'} required_attrs = schema.attributes.select(&:required?) out[:required] = required_attrs.map(&:name) if required_attrs.any? out[:properties] = schema.attributes.inject({}) do |acc, attribute| acc[attribute.name] = serialize_parameter_attribute attribute acc end out end
serialize_responses(responses)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 107 def serialize_responses responses if responses.any? responses.inject({}) do |acc, r| acc[r.status] = {description: r.description} acc end else {200 => {description: 'Success'}} end end
serialize_tag(tag)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 35 def serialize_tag tag { name: tag.name, }. tap do |e| e[:description] = tag.description if tag.description end end
validate(api)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 129 def validate api Swagger2Validator.validate serialize(api) end
validate!(api)
click to toggle source
# File lib/swaggable/swagger_2_serializer.rb, line 125 def validate! api Swagger2Validator.validate! serialize(api) end