Sha256: b4b79250163e20ce93fe550d6e25ea5aa44b510faeb9d0a8f36f9fff1ca03efe

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

require 'concurrent/array'

require 'dry/configurable/constants'
require 'dry/configurable/class_methods'
require 'dry/configurable/instance_methods'
require 'dry/configurable/config'
require 'dry/configurable/setting'
require 'dry/configurable/errors'

module Dry
  # A simple configuration mixin
  #
  # @example class-level configuration
  #
  #   class App
  #     extend Dry::Configurable
  #
  #     setting :database do
  #       setting :dsn, 'sqlite:memory'
  #     end
  #   end
  #
  #   App.config.database.dsn = 'jdbc:sqlite:memory'
  #   App.config.database.dsn
  #     # => "jdbc:sqlite:memory"
  #
  # @example instance-level configuration
  #
  #   class App
  #     include Dry::Configurable
  #
  #     setting :database
  #   end
  #
  #   production = App.new
  #   production.config.database = ENV['DATABASE_URL']
  #   production.finalize!
  #
  #   development = App.new
  #   development.config.database = 'jdbc:sqlite:memory'
  #   development.finalize!
  #
  # @api public
  module Configurable
    # @api private
    def self.extended(klass)
      super
      klass.extend(ClassMethods)
    end

    # @api private
    def self.included(klass)
      raise AlreadyIncluded if klass.include?(InstanceMethods)

      super
      klass.class_eval do
        extend(ClassMethods)
        prepend(InstanceMethods)

        class << self
          undef :config
          undef :configure
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-configurable-0.12.0 lib/dry/configurable.rb