Sha256: 5909df85d476018b590f6fbf9f7d3e13c64ca17b3dc01fd143769c23629181e1

Contents?: true

Size: 858 Bytes

Versions: 1

Compression:

Stored size: 858 Bytes

Contents

module Dry::Initializer
  module ClassDSL
    attr_reader :config

    def [](**settings)
      Module.new do
        extend  Dry::Initializer::ClassDSL
        include Dry::Initializer
        @config = settings
      end
    end

    def define(fn = nil, &block)
      mixin   = Module.new { include InstanceDSL }
      builder = Builder.new Hash(config)
      builder.instance_exec(&(fn || block))
      builder.call(mixin)
      mixin
    end

    private

    def extended(klass)
      super
      mixin   = klass.send(:__initializer_mixin__)
      builder = klass.send(:__initializer_builder__, Hash(config))
      builder.call(mixin)

      klass.include(InstanceDSL) # defines #initialize
      klass.include(mixin)       # defines #__initialize__ (to be redefined)
    end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-initializer-1.4.1 lib/dry/initializer/class_dsl.rb