Требуемые параметры Ruby/Grape при определенных условиях

Для одного из моих методов следующее не работает. Я в значительной степени скопировал все прямо из официальной документации:

params do
requires :authenticationType, type: Array[String], values: ['LOCAL', 'AD']
given authenticationType: ->(val) { val == 'LOCAL' } do
  requires :admin, type: String, allow_blank: false, regexp: /^[\w\.\@-]{1,64}$/
  requires :password, type: String, allow_blank: false, regexp: /^[\w\.\@-]{1,64}$/
end
end

Выдает ошибку на "данной" строке. Кто-нибудь знает, что не так. Моя цель: ТОЛЬКО, если «authenticationType» == «LOCAL», пользователь должен указать «admin» и «password»

ошибка:

[2017-03-03 00:39:18.4848 14970/7f5d0603f700 age/Cor/App/Implementation.cpp:304 ]: не удалось создать процесс для приложения /vagrant/masterapi: произошла ошибка при запуске предварительного загрузчика. Идентификатор ошибки: 0bd79149 Сведения об ошибке сохранены в: /tmp/passenger-error-3OYsdJ.html Сообщение от приложения: Grape::Exceptions::UnknownParameter (Grape::Exceptions::UnknownParameter)
/usr/local/lib/ruby /gems/2.3.0/gems/grape-0.16.2/lib/grape/dsl/parameters.rb:170:in block in given'
/usr/local/lib/ruby/gems/2.3.0/gems/grape-0.16.2/lib/grape/dsl/parameters.rb:169:in
each'
/usr/local/lib/ruby/gems/2.3.0/gems/ виноград-0.16.2/lib/виноград/dsl/parameters.rb:169:in given' /vagrant/masterapi/controllers/papi_controller.rb:93:in block в '


person pirhac    schedule 03.03.2017    source источник
comment
вы должны показать ошибку.   -  person max pleaner    schedule 03.03.2017


Ответы (1)


'данный' принимает proc только начиная с версии 0.17, реализованной в мерж-реквесте (MR) 1443 . Так что вам следует либо обновить, либо, если это невозможно, попробовать обратно портировать этот MR на 0.16.2.

Вот файл README для вашей версии.

Кроме того, в вашем примере параметр authenticationType имеет тип Array[String], поэтому (по крайней мере, в версии 0.17) процедура получит параметр Hashie::Array.

Это означает:

->(val) { val == 'LOCAL' }

должно быть

->(val) { val.first == 'LOCAL' }

person Community    schedule 03.03.2017