Совместно используйте 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
в качестве парамса не все.