Делитесь описанием и типом в драгоценных камнях Grape и Grape Entity

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

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

Вы можете использовать документацию сущности непосредственно в блоке параметров с помощью: 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

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

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

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


person Francesco Meli    schedule 09.11.2017    source источник


Ответы (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 в качестве параметров, а не все.

person Mayur Shah    schedule 16.11.2018