lib/swaggard/swagger/response.rb in swaggard-0.5.4 vs lib/swaggard/swagger/response.rb in swaggard-1.0.0
- old
+ new
@@ -1,18 +1,19 @@
+require_relative 'response_header'
+
module Swaggard
module Swagger
class Response
- DEFAULT_STATUS_CODE = 'default'
- DEFAULT_DESCRIPTION = 'successful operation'
PRIMITIVE_TYPES = %w[integer long float double string byte binary boolean date date-time password hash]
attr_writer :status_code, :description
def initialize(operation_name)
@operation_name = operation_name
@response_model = ResponseModel.new
+ @headers = []
end
def definition
return unless @response_root.present?
@@ -20,11 +21,11 @@
definition.add_property(@response_model)
end
end
def status_code
- @status_code || DEFAULT_STATUS_CODE
+ @status_code || Swaggard.configuration.default_response_status_code
end
def response_class=(value)
@response_model.parse(value)
end
@@ -32,12 +33,20 @@
def response_root=(root)
@response_root = root
@response_model.id = root
end
+ def add_example(value)
+ @example = value
+ end
+
+ def add_header(value)
+ @headers << ResponseHeader.new(value)
+ end
+
def description
- @description || DEFAULT_DESCRIPTION
+ @description || Swaggard.configuration.default_response_description
end
def to_doc
{ 'description' => description }.tap do |doc|
schema = if @response_root.present?
@@ -45,9 +54,21 @@
elsif @response_model.response_class.present?
@response_model.to_doc
end
doc.merge!('schema' => schema) if schema
+ doc.merge!('examples' => example_to_doc) if @example
+ if @headers.any?
+ doc['headers'] = Hash[@headers.map { |header| [header.name, header.to_doc] }]
+ end
+ end
+ end
+
+ def example_to_doc
+ Swaggard.configuration.api_formats.inject({}) do |examples, format|
+ examples.merge!("application/#{format}" => { '$ref' => @example })
+
+ examples
end
end
private