Class: Swaggable::Swagger2Serializer
- Inherits:
-
Object
- Object
- Swaggable::Swagger2Serializer
- Defined in:
- lib/swaggable/swagger_2_serializer.rb
Overview
Generates a Swagger 2 hash from an ApiDefinition.
Instance Attribute Summary collapse
-
#tag_serializer ⇒ Object
Returns the value of attribute tag_serializer.
Instance Method Summary collapse
-
#serialize(api) ⇒ Object
Main method that given an ApiDefinition will return a hash to serialize.
- #serialize_endpoint(endpoint) ⇒ Object
- #serialize_endpoints(endpoints) ⇒ Object
- #serialize_info(api) ⇒ Object
- #serialize_parameter(parameter) ⇒ Object
- #serialize_responses(responses) ⇒ Object
- #serialize_tag(tag) ⇒ Object
- #validate!(api) ⇒ Object
Instance Attribute Details
#tag_serializer ⇒ Object
Returns the value of attribute tag_serializer.
11 12 13 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 11 def tag_serializer @tag_serializer end |
Instance Method Details
#serialize(api) ⇒ Object
Main method that given an ApiDefinition will return a hash to serialize
14 15 16 17 18 19 20 21 22 |
# 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..map{|t| serialize_tag t }, paths: serialize_endpoints(api.endpoints), } end |
#serialize_endpoint(endpoint) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 51 def serialize_endpoint endpoint { tags: endpoint..map(&:name), consumes: endpoint.consumes, produces: endpoint.produces, 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) ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 43 def serialize_endpoints endpoints endpoints.inject({}) do |out, endpoint| out[endpoint.path] ||= {} out[endpoint.path][endpoint.verb] = serialize_endpoint(endpoint) out end end |
#serialize_info(api) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 24 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) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 65 def serialize_parameter parameter p = { in: parameter.location.to_s, name: parameter.name, required: parameter.required?, } p[:type] = parameter.type || 'string' p[:description] = parameter.description if parameter.description p end |
#serialize_responses(responses) ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 77 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) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 34 def serialize_tag tag { name: tag.name, }. tap do |e| e[:description] = tag.description if tag.description end end |
#validate!(api) ⇒ Object
88 89 90 |
# File 'lib/swaggable/swagger_2_serializer.rb', line 88 def validate! api Swagger2Validator.validate! serialize(api) end |