Module: Dry::Initializer

Defined in:
lib/dry/initializer.rb,
lib/dry/initializer/param.rb,
lib/dry/initializer/option.rb,
lib/dry/initializer/builder.rb,
lib/dry/initializer/attribute.rb,
lib/dry/initializer/exceptions/params_order_error.rb,
lib/dry/initializer/exceptions/default_value_error.rb,
lib/dry/initializer/exceptions/type_constraint_error.rb

Defined Under Namespace

Classes: Attribute, Builder, DefaultValueError, Option, Param, ParamsOrderError, TypeConstraintError

Constant Summary collapse

Mixin =

rubocop: disable Style/ConstantName

self
UNDEFINED =

rubocop: enable Style/ConstantName

Object.new.tap do |obj|
  obj.define_singleton_method(:inspect) { "Dry::Initializer::UNDEFINED" }
end.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define(fn = nil, &block) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/dry/initializer.rb', line 33

def define(fn = nil, &block)
  mixin = Module.new do
    def initialize(*args)
      __initialize__(*args)
    end
  end

  builder = Builder.new
  builder.instance_exec(&(fn || block))
  builder.call(mixin)
  mixin
end

.extended(klass) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/dry/initializer.rb', line 21

def extended(klass)
  super
  mixin   = klass.send(:__initializer_mixin__)
  builder = klass.send(:__initializer_builder__)

  builder.call(mixin)
  klass.include(mixin)
  klass.send(:define_method, :initialize) do |*args|
    __initialize__(*args)
  end
end

.mixin(fn = nil, &block) ⇒ Object



46
47
48
# File 'lib/dry/initializer.rb', line 46

def mixin(fn = nil, &block)
  define(fn, &block)
end

Instance Method Details

#option(*args) ⇒ Object



55
56
57
# File 'lib/dry/initializer.rb', line 55

def option(*args)
  __initializer_builder__.option(*args).call(__initializer_mixin__)
end

#param(*args) ⇒ Object



51
52
53
# File 'lib/dry/initializer.rb', line 51

def param(*args)
  __initializer_builder__.param(*args).call(__initializer_mixin__)
end