Sha256: 2858703ce8591e304fb7b2f9d9c5f0238cd5b90304358ad5b67eb1505c4fed13

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

require 'yaml'
require 'hashie/mash'

module BackupRepos
  class Config
    attr_reader :options

    def initialize(options = BackupRepos::Mash.new({}))
      @options = options
    end

    # === OPTIONS

    def debug
      options.debug || config['debug']
    end

    def backup_root
      return if backup_root_dir.blank?

      File.expand_path(backup_root_dir)
    end

    def github_access_token
      config_token = config['github']['access_token'] if config['github']
      options.github_access_token || config_token
    end

    def only_list
      return if options.only.blank?

      options.only.split(',').map(&:strip)
    end

    # ===

    def method_missing(name, *_args)
      return options.send(name) if options.respond_to?(name)

      config[name.to_s]
    end

    def respond_to_missing?(name, include_private = false)
      options.respond_to?(name) || config.key?(name.to_s) || super
    end

    def config_file
      return File.join(Dir.home, '.backup-repos') if options.config_path.blank?

      File.expand_path(options.config_path)
    end

    def dig(*args)
      config.dig(*args)
    end

    private

    def config
      @config ||= BackupRepos::Mash.new(file_config)
    end

    def file_config
      return {} unless File.exist?(config_file)

      @file_config ||= (YAML.load_file(config_file) || {})
    end

    def backup_root_dir
      options.backup_root || config['backup_root']
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
backup_repos-0.4.0 lib/backup_repos/config.rb