# Better consistency for key? method

**URL:** <https://discourse.dry-rb.org/t/better-consistency-for-key-method/1108>\
**Category:** dry-validation\
**Created:** [August 8, 2020, 11:46pm UTC](https://discourse.dry-rb.org/t/better-consistency-for-key-method/1108 "2020-08-08T23:46:21Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![alassek](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/alassek/32/314_2.png) [@alassek](https://discourse.dry-rb.org/u/alassek)\
**Post date:** [August 8, 2020, 11:46pm UTC](https://discourse.dry-rb.org/t/better-consistency-for-key-method/1108/1 "2020-08-08T23:46:21Z")

</div>

I’m writing a validation that tests the presence of two optional keys

```ruby
rule :foo, :bar do
  unless values.key?(:foo) ^ values.key?(:bar)
    key.failure("must have one of: foo, bar")
  end
end

```

(Seldom do I get to write an XOR!)

It was surprising to me that I couldn’t write `key?(:bar)` instead, since `Evaluator#key?` merely forwards to `Values#key?`. Doesn’t seem like this omission was intentional.

I have a working patch that implements this. Are you interested in a PR?

---

<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:** [August 10, 2020, 10:33am UTC](https://discourse.dry-rb.org/t/better-consistency-for-key-method/1108/2 "2020-08-10T10:33:34Z")

</div>

This makes sense, feel free to open a PR 🙂
