分享desc并在Grape和Grape Entity宝石中输入

时间:2017-11-09 23:18:19

标签: ruby-on-rails ruby 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中定义的文档中的字段描述和字段类型。

每当我定义一个只需要1个字段的API时,我需要做这样的事情(我觉得有点脏):

给出:

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

我不喜欢上述解决方案主要有两个原因:

  • 我不喜欢使用该字段&#34;键入&#34;帮助文档生成的帮助程序
  • 这很麻烦。

有没有更好的方法来分享2个宝石中的类型和描述?

1 个答案:

答案 0 :(得分: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作为参数,而不是全部。