Sha256: c7223235f661465b8c8b40d00318ddcbd49b6b72b9e603b0f1ff5b290d207ea7

Contents?: true

Size: 1.83 KB

Versions: 9

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

# @api private
# @since 0.2.0
module Qonfig::Settings::Builder
  class << self
    # @param data_set [Qonfig::DataSet]
    # @param assignements [Block]
    # @yield [settings, validator]
    # @yieldparam settings [Qonfig::DataSet::Settings]
    # @yieldparam validator [Qonfig::Validation::Validators::Composite]
    # @return [void]
    #
    # @api private
    # @since 0.21.0
    def build(data_set, &assignements)
      validator = build_validator(data_set)
      settings = build_definitions(data_set)
      yield(settings, validator)
      validator.validate!
      build_state(data_set)
    end

    # @param data_set [Qonfig::DataSet]
    # @return [Qonfig::Settings]
    #
    # @api private
    # @since 0.19.0
    def build_definitions(data_set)
      Qonfig::Settings.new(build_mutation_callbacks(data_set)).tap do |settings|
        data_set.class.definition_commands.dup.each do |command|
          command.call(data_set, settings)
        end
      end
    end

    # @param data_set [Qonfig::DataSet]
    # @return [void]
    #
    # @api private
    # @since 0.19.0
    def build_state(data_set)
      data_set.class.instance_commands.dup.each do |command|
        command.call(data_set, data_set.settings)
      end
    end

    private

    # @param data_set [Qonfig::DataSet]
    # @return [Qonfig::Validation::Validators::Composite]
    #
    # @api private
    # @since 0.21.0
    def build_validator(data_set)
      Qonfig::Validation::Validators::Composite.new(data_set)
    end

    # @param data_set [Qonfig::DataSet]
    # @return [Qonfig::Settings::Callbacks]
    #
    # @api private
    # @since 0.13.0
    def build_mutation_callbacks(data_set)
      Qonfig::Settings::Callbacks.new.tap do |callbacks|
        callbacks.add(Qonfig::Settings::Callbacks::Validation.new(data_set))
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
qonfig-0.28.0 lib/qonfig/settings/builder.rb
qonfig-0.27.0 lib/qonfig/settings/builder.rb
qonfig-0.26.0 lib/qonfig/settings/builder.rb
qonfig-0.25.0 lib/qonfig/settings/builder.rb
qonfig-0.24.1 lib/qonfig/settings/builder.rb
qonfig-0.24.0 lib/qonfig/settings/builder.rb
qonfig-0.23.0 lib/qonfig/settings/builder.rb
qonfig-0.22.0 lib/qonfig/settings/builder.rb
qonfig-0.21.0 lib/qonfig/settings/builder.rb