# Basic parameter validation for dry-initializer?

**URL:** https://discourse.dry-rb.org/t/basic-parameter-validation-for-dry-initializer/1424
**Category:** Support
**Created:** [February 4, 2022, 4:20am UTC](https://discourse.dry-rb.org/t/basic-parameter-validation-for-dry-initializer/1424 "2022-02-04T04:20:19Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![cmer](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/cmer/32/742_2.png) [@cmer](https://discourse.dry-rb.org/u/cmer)
#### Post date: [February 4, 2022, 4:20am UTC](https://discourse.dry-rb.org/t/basic-parameter-validation-for-dry-initializer/1424/1 "2022-02-04T04:20:19Z")

</div>

Hey all,

I am starting to use dry-initializer a lot more to cut back on boilerplate code. It’s awesome!

I am running into a situation where I’d like to perform basic validations for parameters/options passed to the initializer, besides simply enforcing a specific value type. I looked at the doc but couldn’t figure out how to do it.

I’d like to validate two things, for example:

- value passed should be one from a list of allowed values.
- value passed should be an array containing only values from a list of allowed values.

The simplest way to do this seems to have a lambda validating the input, but I don’t think it is possible?

What’s the best to achieve something like described above?

Tia

---

<div class="post-metadata">

### Author: ![cmer](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/cmer/32/742_2.png) [@cmer](https://discourse.dry-rb.org/u/cmer)
#### Post date: [February 4, 2022, 5:07am UTC](https://discourse.dry-rb.org/t/basic-parameter-validation-for-dry-initializer/1424/2 "2022-02-04T05:07:38Z")

</div>

Here’s an example of what I mean:

```ruby
  class MyClass
    extend Dry::Initializer
    option :foo, validate: proc { |value| %i[a b c].include?(value)) }
    option :bar, type: Dry::Types::Strict::Array, validate: proc { |ary| (ary - %i[foo bar baz]).empty? }
  end

  MyClass.new(foo: :a, bar: [:foo, :bar]) # valid
  MyClass.new(foo: nil, bar: [:fail]) # raises ArgumentError

```

---

<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: [February 11, 2022, 1:24am UTC](https://discourse.dry-rb.org/t/basic-parameter-validation-for-dry-initializer/1424/3 "2022-02-11T01:24:26Z")

</div>

That’s easily expressable in dry-types

```ruby
Types = Dry::Types(default: :strict)

Class MyClass
  extend Dry::Initializer
  option :foo, Types::Coercible::Symbol.enum(:a, :b, :c)
  option :bar, Types::Array.of(Types::Coercible::Symbol.enum(:foo, :bar, :baz))
end

```
