class Swaggard::Swagger::Operation
Attributes
description[RW]
error_responses[RW]
http_method[RW]
nickname[R]
notes[RW]
parameters[RW]
path[RW]
summary[RW]
tag[RW]
Public Class Methods
new(yard_object, tag, path, verb, path_params)
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 16 def initialize(yard_object, tag, path, verb, path_params) @name = yard_object.name @tag = tag @summary = (yard_object.docstring.lines.first || '').chomp @parameters = [] @responses = [] @description = (yard_object.docstring.lines[1..-1] || []).map(&:chomp).reject(&:empty?).compact.join("\n") @formats = Swaggard.configuration.api_formats @http_method = verb @path = path build_path_parameters(path_params) yard_object.tags.each do |yard_tag| value = yard_tag.text case yard_tag.tag_name when 'operation_id' @operation_id = "#{@tag.name}.#{value}" when 'query_parameter' @parameters << Parameters::Query.new(value) when 'form_parameter' @parameters << Parameters::Form.new(value) when 'body_required' body_parameter.is_required = true when 'body_description' body_parameter.description = value when 'body_title' body_parameter.title = value when 'body_definition' body_parameter.definition = value when 'body_parameter' body_parameter.add_property(value) when 'parameter_list' @parameters << Parameters::List.new(value) when 'response_class' success_response.response_class = value when 'response_status' success_response.status_code = value when 'response_root' success_response.response_root = value when 'response_description' success_response.description = value when 'response_example' success_response.add_example(value) when 'response_header' success_response.add_header(value) end end @parameters.sort_by { |parameter| parameter.name } @responses << success_response end
Public Instance Methods
definitions()
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 94 def definitions @responses.map(&:definition).compact.tap do |definitions| definitions << @body_parameter.definition if @body_parameter end end
empty?()
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 76 def empty? @summary.blank? && @description.blank? end
to_doc()
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 80 def to_doc { 'tags' => [@tag.name], 'operationId' => @operation_id || @name, 'summary' => @summary, 'description' => @description, 'produces' => @formats.map { |format| "application/#{format}" }, }.tap do |doc| doc['consumes'] = @formats.map { |format| "application/#{format}" } if @body_parameter doc['parameters'] = @parameters.map(&:to_doc) doc['responses'] = Hash[@responses.map { |response| [response.status_code, response.to_doc] }] end end
valid?()
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 72 def valid? @path.present? end
Private Instance Methods
body_parameter()
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 106 def body_parameter return @body_parameter if @body_parameter @body_parameter = Parameters::Body.new("#{@tag.controller_class.to_s}.#{@name}") @parameters << @body_parameter @body_parameter end
build_path_parameters(path_params)
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 115 def build_path_parameters(path_params) return unless @tag.controller_class path_params.each { |path_param| @parameters << Parameters::Path.new(self, path_param) } end
success_response()
click to toggle source
# File lib/swaggard/swagger/operation.rb, line 102 def success_response @success_response ||= Response.new("#{@tag.controller_class.to_s}.#{@name}") end