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