Совместно используйте desc и печатайте через самоцветы Grape и Grape Entity

То, что я пытаюсь сделать, это повторно использовать тип и описание в драгоценных камнях винограда и винограда.

В документации я прочитал следующее:

Вы можете использовать документацию объекта непосредственно в блоке params с помощью: Entity.documentation.

module API
  class Statuses < Grape::API
    version 'v1'
    desc 'Create a status'
    params do
      requires :all, except: [:ip], using: API::Entities::Status.documentation.except(:id)
    end
    post '/status' do
      Status.create! params
    end
  end
end

Это позволяет мне использовать описание поля и тип поля из документации, определенной в Grape Entity.

Всякий раз, когда я определяю API, который требует только 1 поля, мне нужно делать что-то вроде этого (что я нахожу немного грязным):

дано:

module Entities
  class Host < Grape::Entity
    expose :id
    # ... exposing some other fields ...
    expose :mac_address, documentation: { type: String, desc: "The mac address of the host" }
    expose :created_at, documentation: { type: DateTime, desc: "Record creation date" }
    expose :updated _at, documentation: { type: DateTime, desc: "Record update date" }
  end
end

Я могу сделать:

params do
  requires :mac_address, type: V1::Entities::Host.documentation[:mac_address][:type], desc: V1::Entities::Host.documentation[:mac_address][:desc]
end

Мне не нравится вышеуказанное решение в основном по двум причинам:

  • Мне не нравится использовать поле "тип" помощника, который должен был поддерживать генерацию документации.
  • Это громоздко.

Есть ли лучший способ поделиться типом и описанием между двумя драгоценными камнями?

1 ответ

Вы можете сделать это

module API
  class Statuses < Grape::API
    version 'v1'
    desc 'Create a status' do
      params API::Entities::Status.documentation.except(:created_at, :updated _at)
    end
    post '/status' do
      Status.create! params
    end
  end
end

Это даст вам только mac_address в качестве парамса не все.

Другие вопросы по тегам