module Moneta::Config

Some docs here

Public Class Methods

included(base) click to toggle source
# File lib/moneta/config.rb, line 63
def self.included(base)
  base.extend(ClassMethods)
end

Public Instance Methods

config() click to toggle source
# File lib/moneta/config.rb, line 58
def config
  raise "Not configured" unless defined?(@config)
  @config
end

Protected Instance Methods

configure(**options) click to toggle source
# File lib/moneta/config.rb, line 69
def configure(**options)
  raise 'Already configured' if defined?(@config)

  self.class.config_required_keys.each do |key|
    raise ArgumentError, "#{key} is required" unless options.key? key
  end

  defaults = self.class.config_defaults

  overrides, remainder = options
    .partition { |key,| defaults.key? key }
    .map { |pairs| pairs.to_h }

  self.class.config_coercions.each do |key, coerce|
    overrides[key] = coerce.call(overrides[key]) if overrides.key?(key)
  end

  overridden = defaults.merge!(overrides)

  config_blocks = self.class.config_blocks
  values = overridden.map do |key, value|
    if config_block = config_blocks[key]
      instance_exec(**overridden, &config_block)
    else
      value
    end
  end

  @config = self.class.config_struct&.new(*values).freeze
  remainder
end