# Excluding invalid key value pairs in dry-validation

**URL:** <https://discourse.dry-rb.org/t/excluding-invalid-key-value-pairs-in-dry-validation/939>\
**Category:** dry-validation\
**Created:** [October 31, 2019, 10:55pm UTC](https://discourse.dry-rb.org/t/excluding-invalid-key-value-pairs-in-dry-validation/939 "2019-10-31T22:55:33Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ianks](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/ianks/32/449_2.png) [@ianks](https://discourse.dry-rb.org/u/ianks)\
**Post date:** [October 31, 2019, 10:55pm UTC](https://discourse.dry-rb.org/t/excluding-invalid-key-value-pairs-in-dry-validation/939/1 "2019-10-31T22:55:34Z")

</div>

Is there a way to configure a contract to exclude invalid key-value pairs from a result hash? Currently, the invalid keys are always included. Something like this would be ideal:

```ruby
Contract = Class.new(Dry::Validation::Contract) do
  params do
    required(:id).filled(:int?)
    optional(:email).filled(:str?, format?: /@/)
  end
end

Contract.new.call(email: 'bademail', id: 1).to_h # => { id: 1 }

```

---

<div class="post-metadata">

**Author:** ![jeanfbrito](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/jeanfbrito/32/458_2.png) [@jeanfbrito](https://discourse.dry-rb.org/u/jeanfbrito)\
**Post date:** [November 1, 2019, 2:53pm UTC](https://discourse.dry-rb.org/t/excluding-invalid-key-value-pairs-in-dry-validation/939/2 "2019-11-01T14:53:13Z")

</div>

I came here for the same problem, on `0.13` it happened by default. How to do it happen on newer versions?

---

<div class="post-metadata">

**Author:** ![solnic](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/solnic/32/779_2.png) [@solnic](https://discourse.dry-rb.org/u/solnic)\
**Post date:** [November 5, 2019, 12:01pm UTC](https://discourse.dry-rb.org/t/excluding-invalid-key-value-pairs-in-dry-validation/939/3 "2019-11-05T12:01:11Z")

</div>

@ianks I won’t argue but IIRC this never worked like that because why would it? 😄 It rejects unspecified keys but it leaves everything that the schema defines. This could be done via a plugin though.

---

<div class="post-metadata">

**Author:** ![ianks](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/ianks/32/449_2.png) [@ianks](https://discourse.dry-rb.org/u/ianks)\
**Post date:** [November 8, 2019, 2:00am UTC](https://discourse.dry-rb.org/t/excluding-invalid-key-value-pairs-in-dry-validation/939/4 "2019-11-08T02:00:02Z")

</div>

It’s a special use case, so it’s fine for it not to be part of the gem. I was able to implement this functionality by enumerating through the errors and deleting keys in the input hash.
