Sha256: a789f6d1a4bc85502d6ec4968e739716351a80356b32a26ed5f7a47c191951b6

Contents?: true

Size: 1.33 KB

Versions: 4

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

require "refinements/hash_extensions"

module Pragmater
  # Default gem configuration with support for custom settings.
  class Configuration
    using Refinements::HashExtensions
    attr_reader :settings

    def self.defaults
      {
        add: {
          comments: "",
          whitelist: []
        },
        remove: {
          comments: "",
          whitelist: []
        }
      }
    end

    def initialize file_name = Identity.file_name, defaults: self.class.defaults
      @file_name = file_name
      @defaults = defaults
      @settings = defaults.deep_merge load_settings
    end

    def local_file_path
      File.join Dir.pwd, file_name
    end

    def global_file_path
      File.join ENV["HOME"], file_name
    end

    def computed_file_path
      File.exist?(local_file_path) ? local_file_path : global_file_path
    end

    def merge custom_settings
      custom_settings[:add].delete_if { |_, value| value.empty? } if custom_settings.key?(:add)
      custom_settings[:remove].delete_if { |_, value| value.empty? } if custom_settings.key?(:remove)
      settings.deep_merge custom_settings
    end

    private

    attr_reader :file_name, :defaults

    def load_settings
      yaml = YAML.load_file computed_file_path
      yaml.is_a?(Hash) ? yaml : {}
    rescue
      defaults
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pragmater-1.3.0 lib/pragmater/configuration.rb
pragmater-1.2.0 lib/pragmater/configuration.rb
pragmater-1.1.0 lib/pragmater/configuration.rb
pragmater-1.0.0 lib/pragmater/configuration.rb