module Dry::Effects::Initializer::DefineWithHook

@api private

Public Instance Methods

__define_with__() click to toggle source

@api private

# File lib/dry/effects/initializer.rb, line 44
        def __define_with__
          seq_names = dry_initializer
            .definitions
            .reject { |_, d| d.option }
            .keys
            .join(", ")

          seq_names << ", " unless seq_names.empty?

          undef_method(:with) if method_defined?(:with)

          class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
            def with(**new_options)                                    # def with(**new_options)
              if new_options.empty?                                    #   if new_options.empty?
                self                                                   #     self
              else                                                     #   else
                self.class.new(#{seq_names}**options, **new_options)   #     self.class.new(attr1, attr2, **options, **new_options)
              end                                                      #   end
            end                                                        # end
          RUBY
        end
option(*) click to toggle source

@api private

Calls superclass method
# File lib/dry/effects/initializer.rb, line 20
def option(*)
  super.tap do
    __define_with__ unless method_defined?(:with)
    @has_options = true
  end
end
options?() click to toggle source

@api private

# File lib/dry/effects/initializer.rb, line 37
def options?
  return @has_options if defined? @has_options

  @has_options = false
end
param(*) click to toggle source

@api private

Calls superclass method
# File lib/dry/effects/initializer.rb, line 11
def param(*)
  super.tap do
    @params_arity = nil
    __define_with__
  end
end
params_arity() click to toggle source

@api private

# File lib/dry/effects/initializer.rb, line 29
def params_arity
  @params_arity ||= dry_initializer
    .definitions
    .reject { |_, d| d.option }
    .size
end