dry-initializer

v3.2
  1. Introduction & Usage
  2. Container Version
  3. Params and Options
  4. Tolerance to Unknown Arguments
  5. Optional Attributes and Default Values
  6. Type Constraints
  7. Readers
  8. Inheritance
  9. Skip Undefined
  10. Attributes
  11. Rails Support

TOC


Inheritance

Subclassing preserves all definitions being made inside a superclass.

require 'dry-initializer'

class User
  extend Dry::Initializer

  param :name
end

class Employee < User
  param :position
end

employee = Employee.new('John', 'supercargo')
employee.name     # => 'John'
employee.position # => 'supercargo'

employee = Employee.new # => fails because type

You can override params and options.
Such overriding leaves initial order of params (positional arguments) unchanged:

class Employee < User
  param :position, optional: true
  param :name,     default:  proc { 'Unknown' }
end

user = User.new         # => Boom! because User#name is required
employee = Employee.new # passes because who cares on employee's name

employee.name
# => 'Unknown' because it is the name that positioned first like in User