4

コードの重複を避けるにはどうすればよいですか?

resource 'api/publication/:publicationName' do

  params do
    requires :type, type: String, regexp: /^(static|dynamic)$/i
    requires :name, type: String, regexp: /^[a-z0-9_\s]+$/i
    requires :liveStartDate, type: String, regexp: dateRegexp
    optional :liveEndDate, type: String, regexp: dateRegexp
    requires :query, type: String
  end
  post '/dynamic' do
    authenticate!
    save_or_update(params)
  end

  params do
    requires :type, type: String, regexp: /^(static|dynamic)$/i
    requires :name, type: String, regexp: /^[a-z0-9_\s]+$/i
    requires :liveStartDate, type: String, regexp: dateRegexp
    optional :liveEndDate, type: String, regexp: dateRegexp
    requires :query, type: String
  end
  put '/dynamic/:id' do
    authenticate!
    save_or_update(params)
  end

end
4

2 に答える 2

6

Grape の最近のバージョンでは、再利用可能な名前付きのパラメータ グループを作成できます。例えば:

resource 'api/publication/:publicationName' do
  helpers do
    params :common do
      requires :type,          type: String, regexp: /^(static|dynamic)$/i
      requires :name,          type: String, regexp: /^[a-z0-9_\s]+$/i
      requires :liveStartDate, type: String, regexp: dateRegexp
      optional :liveEndDate,   type: String, regexp: dateRegexp
      requires :query,         type: String
    end
  end

  params do
    use :common
  end
  post '/dynamic' do
    authenticate!
    save_or_update(params)
  end

  params do
    use :common
  end
  put '/dynamic/:id' do
    authenticate!
    save_or_update(params)
  end
end

useこの方法の利点の 1 つは、さまざまな名前付きパラメーターに複数のステートメントを含めることで、さまざまなグループのパラメーターを混在させることができることです。

于 2014-09-16T17:18:15.183 に答える
3

これを試して:

resource 'api/publication/:publicationName' do
  common_params = Proc.new do
    requires :type,          type: String, regexp: /^(static|dynamic)$/i
    requires :name,          type: String, regexp: /^[a-z0-9_\s]+$/i
    requires :liveStartDate, type: String, regexp: dateRegexp
    optional :liveEndDate,   type: String, regexp: dateRegexp
    requires :query,         type: String
  end

  params(&common_params)
  post '/dynamic' do
    authenticate!
    save_or_update(params)
  end

  params(&common_params)
  put '/dynamic/:id' do
    authenticate!
    save_or_update(params)
  end
end
于 2013-05-23T09:34:56.807 に答える