Sha256: 3bbe50be6a4cb25c8439ab4bac4ac6342d3893e041471c94a1be99ff8243c2f7

Contents?: true

Size: 1.45 KB

Versions: 3

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

require_relative 'config_files_loader_merger/base'
require_relative 'config_files_loader_merger/json'
require_relative 'config_files_loader_merger/yml'

module OptParseValidator
  # Options Files container
  class ConfigFilesLoaderMerger < Array
    # @return [ Array<String> ] The downcased supported extensions list
    def self.supported_extensions
      extensions = ConfigFile.constants.select do |const|
        name = ConfigFile.const_get(const)
        name.is_a?(Class) && name != ConfigFile::Base
      end

      extensions.map { |sym| sym.to_s.downcase }
    end

    # @param [ String ] file_path
    #
    # @return [ Self ]
    def <<(file_path)
      return self unless File.exist?(file_path)

      ext = File.extname(file_path).delete('.')

      raise Error, "The option file's extension '#{ext}' is not supported" unless self.class.supported_extensions.include?(ext)

      super(ConfigFile.const_get(ext.upcase).new(file_path))
    end

    # @params [ Hash ] opts
    # @option opts [ Boolean ] :symbolize_keys Whether or not to symbolize keys in the returned hash
    # @option opts [ Array ] :yaml_arguments See https://ruby-doc.org/stdlib-2.3.1/libdoc/psych/rdoc/Psych.html#method-c-safe_load
    #
    # @return [ Hash ]
    def parse(opts = {})
      result = {}

      each { |option_file| result.deep_merge!(option_file.parse(opts)) }

      opts[:symbolize_keys] ? result.deep_symbolize_keys : result
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
opt_parse_validator-1.7.3 lib/opt_parse_validator/config_files_loader_merger.rb
opt_parse_validator-1.7.2 lib/opt_parse_validator/config_files_loader_merger.rb
opt_parse_validator-0.0.17.1 lib/opt_parse_validator/config_files_loader_merger.rb