Add mutually_exclusive helper

This commit is contained in:
Martin Lensment 2015-01-27 13:08:27 +02:00
parent bfed783106
commit 62eb65793b
4 changed files with 47 additions and 6 deletions

View file

@ -126,13 +126,12 @@ class Epp::DomainsController < EppController
end
def validate_create
if params[:parsed_frame].css('dsData').count > 0 && params[:parsed_frame].css('create > keyData').count > 0
epp_errors << { code: '2306', msg: I18n.t('ds_data_and_key_data_must_not_exists_together') }
end
@prefix = 'create > create >'
requires('name', 'ns', 'registrant', 'ns > hostAttr')
@prefix = 'extension > create >'
mutually_exclusive 'keyData', 'dsData'
@prefix = nil
requires('extension > extdata > legalDocument')
end

View file

@ -75,6 +75,22 @@ class EppController < ApplicationController
epp_errors.empty?
end
def mutually_exclusive(*selectors)
present_count = 0
selectors.each do |selector|
full_selector = [@prefix, selector].join(' ')
el = params[:parsed_frame].css(full_selector).first
present_count += 1 if el && el.text.present?
end
return if present_count <= 1
epp_errors << {
code: '2306',
msg: I18n.t(:are_mutally_exclusive, params: selectors.join(', '))
}
end
# let's follow grape's validations: https://github.com/intridea/grape/#parameter-validation-and-coercion
def exactly_one_of(*selectors)
present_count = 0
@ -87,7 +103,7 @@ class EppController < ApplicationController
return if present_count == 1
epp_errors << {
code: '2003',
code: '2306',
msg: I18n.t(:exactly_one_parameter_required, params: selectors.join(' or '))
}
end