diff --git a/lib/grape/validations/params_scope.rb b/lib/grape/validations/params_scope.rb index 1d3384883..15c584e82 100644 --- a/lib/grape/validations/params_scope.rb +++ b/lib/grape/validations/params_scope.rb @@ -490,7 +490,7 @@ def validate(type, options, attrs, doc, opts) def validate_value_coercion(coerce_type, *values_list) return unless coerce_type - coerce_type = coerce_type.first if coerce_type.is_a?(Array) + coerce_type = coerce_type.first if coerce_type.is_a?(Array) || coerce_type.is_a?(Set) values_list.each do |values| next if !values || values.is_a?(Proc) diff --git a/spec/grape/validations/params_scope_spec.rb b/spec/grape/validations/params_scope_spec.rb index 454fdf6c0..7ef72ac58 100644 --- a/spec/grape/validations/params_scope_spec.rb +++ b/spec/grape/validations/params_scope_spec.rb @@ -189,6 +189,24 @@ def initialize(value) end end + context 'a set with coerce type explicitly given' do + context 'and the values are allowed' do + it 'does not raise an exception' do + expect do + subject.params { optional :numbers, type: Set[Integer], values: 0..2, default: 0..2 } + end.not_to raise_error + end + end + + context 'and the values are not allowed' do + it 'raises exception' do + expect do + subject.params { optional :numbers, type: Set[Integer], values: %w[a b] } + end.to raise_error + end + end + end + context 'with range values' do context "when left range endpoint isn't #kind_of? the type" do it 'raises exception' do