module SwaggerApi::Concerns::StiSchema

Public Instance Methods

schema(model) click to toggle source
# File lib/swagger_api/concerns/sti_schema.rb, line 16
def schema(model)
  if sti?(model)
    {
      oneOf: model.descendants.map do |klass|
        { '$ref' => "#/components/schemas/#{klass.name}" }
      end
    }
  else
    {
      '$ref' => "#/components/schemas/#{model.try(:name) || model}"
    }
  end
end
sti?(model) click to toggle source
# File lib/swagger_api/concerns/sti_schema.rb, line 9
def sti?(model)
  model_klass = model.try(:safe_constantize) || model
  return false if model_klass.is_a?(String) || model_klass.nil?
  Rails.application.eager_load!
  model_klass.descendants.count != 0
end