Что я пытаюсь сделать, так это повторно использовать тип и описание для драгоценных камней винограда и виноградных сущностей.
В документации прочитал следующее:
Вы можете использовать документацию сущности непосредственно в блоке параметров с помощью: 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.
Всякий раз, когда я определяю 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
Мне не нравится вышеуказанное решение в основном по двум причинам:
- Мне не нравится использовать поле «тип» помощника, предназначенное для поддержки генерации документации.
- Это обременительно.
Есть ли лучший способ поделиться типом и описанием между двумя драгоценными камнями?