Sha256: 6adbfede1846d07e7d7e8b534d35c4674813bb4299ed4e540859243c02a1b1ae

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

require 'yaml'

require 'article_fixture_gen/config'
require 'article_fixture_gen/support/logging'

module ArticleFixtureGen
  module CLI
    # CLI implementation class that reads YAML config from file and uses it to
    # create an `ArticleFixtureGen::Config` instance.
    class Config
      def self.call(filename:, defaults: nil, overrides: {})
        new(filename, defaults, overrides).call
      end

      def call
        ArticleFixtureGen::Config.new final
      end

      protected

      def initialize(filename, defaults, overrides)
        @defaults = Internals.defaults_based_on(defaults)
        @filename = filename
        @overrides = overrides
        self
      end

      private

      attr_reader :defaults, :filename, :overrides

      def file_contents
        YAML.load_file filename
      end

      def final
        defaults.merge(non_defaults)
      end

      def non_defaults
        file_contents.merge(overrides)
      end

      # Stateless methods.
      module Internals
        # Reek complains about a :reek:ControlParameter. :pedantic: :neckbeard:
        def self.defaults_based_on(specified_defaults)
          ret = specified_defaults || ArticleFixtureGen::Config.defaults
          ret.to_hash
        end
      end
      private_constant :Internals
    end # class ArticleFixtureGen::CLI::Config
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
article_fixture_gen-0.1.2 lib/article_fixture_gen/cli/config.rb
article_fixture_gen-0.1.1 lib/article_fixture_gen/cli/config.rb