Sha256: 6232487be2197aa0a11d391d966111fed9bd8cb028063ae281f275a1e8213147

Contents?: true

Size: 1.23 KB

Versions: 18

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

require "pathname"
require "refinements/hashes"
require "refinements/structs"
require "runcom"
require "yaml"

module Rubysmith
  module Configuration
    # Represents the fully assembled Command Line Interface (CLI) configuration.
    class Loader
      using Refinements::Hashes
      using Refinements::Structs

      DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
      CLIENT = Runcom::Config.new "rubysmith/configuration.yml", defaults: DEFAULTS

      ENHANCERS = [
        Enhancers::CurrentTime.new,
        Enhancers::GitEmail.new,
        Enhancers::GitHubUser.new,
        Enhancers::GitUser.new
      ].freeze

      def self.call(...) = new(...).call

      def self.with_defaults = new(client: DEFAULTS, enhancers: [])

      def initialize content: Content.new, client: CLIENT, enhancers: ENHANCERS
        @content = content
        @client = client
        @enhancers = enhancers
      end

      def call
        enhancers.reduce(preload_content) { |preload, enhancer| enhancer.call preload }
                 .freeze
      end

      private

      attr_reader :content, :client, :enhancers

      def preload_content = content.merge(**client.to_h.flatten_keys)
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
rubysmith-4.1.0 lib/rubysmith/configuration/loader.rb
rubysmith-4.0.1 lib/rubysmith/configuration/loader.rb
rubysmith-4.0.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.8.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.7.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.6.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.5.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.4.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.3.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.2.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.1.0 lib/rubysmith/configuration/loader.rb
rubysmith-3.0.1 lib/rubysmith/configuration/loader.rb
rubysmith-3.0.0 lib/rubysmith/configuration/loader.rb
rubysmith-2.0.2 lib/rubysmith/configuration/loader.rb
rubysmith-2.0.1 lib/rubysmith/configuration/loader.rb
rubysmith-2.0.0 lib/rubysmith/configuration/loader.rb
rubysmith-1.3.0 lib/rubysmith/configuration/loader.rb
rubysmith-1.2.0 lib/rubysmith/configuration/loader.rb