Sha256: 51e76f8ea7baeb60214f024f0d8837d245706a4f709c9dea36d41ad04235bfe5

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module Dry
  module Initializer
    # Module-level DSL
    module DSL
      # Setting for null (undefined value)
      # @return [nil, Dry::Initializer::UNDEFINED]
      attr_reader :null

      # Returns a version of the module with custom settings
      # @option settings [Boolean] :undefined
      #   If unassigned params and options should be treated different from nil
      # @return [Dry::Initializer]
      def [](undefined: true, **)
        null = undefined == false ? nil : UNDEFINED
        Module.new.tap do |mod|
          mod.extend DSL
          mod.include self
          mod.send(:instance_variable_set, :@null, null)
        end
      end

      # Returns mixin module to be included to target class by hand
      # @return [Module]
      # @yield proc defining params and options
      def define(procedure = nil, &block)
        config = Config.new(null: null)
        config.instance_exec(&(procedure || block))
        config.mixin.include Mixin::Root
        config.mixin
      end

      private

      def extended(klass)
        config = Config.new(klass, null: null)
        klass.send :instance_variable_set, :@dry_initializer, config
        klass.include Mixin::Root
      end

      class << self
        private

        def extended(mod)
          mod.instance_variable_set :@null, UNDEFINED
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dry-initializer-3.1.1 lib/dry/initializer/dsl.rb
dry-initializer-3.1.0 lib/dry/initializer/dsl.rb