class OasRails::Builders::ResponsesBuilder

def add_autodiscovered_responses(oas_route)

def add_autodiscovered_responses(oas_route)
  return self if !OasRails.config.autodiscover_responses || oas_route.docstring.tags(:response).any?
  new_responses = Extractors::RenderResponseExtractor.extract_responses_from_source(@specification, source: oas_route.source_string)
  new_responses.each do |new_response|
    @responses.add_response(new_response) if @responses.responses[new_response.code].blank?
  end
  self
end

def add_default_responses(oas_route, security)

def add_default_responses(oas_route, security)
  return self unless OasRails.config.set_default_responses
  content = ContentBuilder.new(@specification, :outgoing).with_schema(JsonSchemaGenerator.process_string(OasRails.config.response_body_of_default)[:json_schema]).build
  common_errors = []
  common_errors.push(:unauthorized, :forbidden) if security
  case oas_route.method
  when "show", "update", "destroy"
    common_errors.push(:not_found)
  when "create", "index"
    # possible errors for this methods?
  end
  (OasRails.config.possible_default_responses & common_errors).each do |e|
    code = Utils.status_to_integer(e)
    response = ResponseBuilder.new(@specification).with_code(code).with_description(Utils.get_definition(code)).with_content(content).build
    @responses.add_response(response) if @responses.responses[response.code].blank?
  end
  self
end

def build

def build
  @responses
end

def from_oas_route(oas_route)

def from_oas_route(oas_route)
  oas_route.docstring.tags(:response).each do |tag|
    content = ContentBuilder.new(@specification, :outgoing).with_schema(tag.schema).with_examples_from_tags(oas_route.docstring.tags(:response_example).filter { |re| re.code == tag.name }).build
    response = ResponseBuilder.new(@specification).with_code(tag.name.to_i).with_description(tag.text).with_content(content).build
    @responses.add_response(response)
  end
  self
end

def initialize(specification)

def initialize(specification)
  @specification = specification
  @responses = Spec::Responses.new(specification)
end