Sha256: b0f9f195f4f3f67948b91857eff3ffde818846235d78025d9869d43f8d8570d3

Contents?: true

Size: 1.66 KB

Versions: 5

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true

require 'set'
require_relative 'config'
require 'fast_ignore'

module Leftovers
  class MergedConfig
    def initialize
      @configs = []
      @loaded_configs = Set.new
      self.<< Leftovers::Config.new(:ruby)
      self.<< project_config
      load_bundled_gem_config
    end

    def <<(config)
      return if @loaded_configs.include?(config.name)

      unmemoize
      @configs << config
      @loaded_configs << config.name
      config.gems.each { |gem| self.<< Leftovers::Config.new(gem) }
    end

    def project_config
      Leftovers::Config.new(:'.leftovers.yml', path: Leftovers.pwd + '.leftovers.yml')
    end

    def unmemoize
      remove_instance_variable(:@exclude_paths) if defined?(@exclude_paths)
      remove_instance_variable(:@include_paths) if defined?(@include_paths)
      remove_instance_variable(:@test_paths) if defined?(@test_paths)
      remove_instance_variable(:@rules) if defined?(@rules)
    end

    def exclude_paths
      @exclude_paths ||= @configs.flat_map(&:exclude_paths)
    end

    def include_paths
      @include_paths ||= @configs.flat_map(&:include_paths)
    end

    def test_paths
      @test_paths ||= FastIgnore.new(
        include_rules: @configs.flat_map(&:test_paths),
        gitignore: false
      )
    end

    def skip_rules
      @skip_rules ||= rules.select(&:skip?)
    end

    def rules
      @rules ||= @configs.flat_map(&:rules)
    end

    private

    def load_bundled_gem_config
      Leftovers.try_require('bundler')
      return unless defined?(Bundler)

      Bundler.locked_gems.specs.each do |spec|
        self.<< Leftovers::Config.new(spec.name.to_sym)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
leftovers-0.2.3 lib/leftovers/merged_config.rb
leftovers-0.2.2 lib/leftovers/merged_config.rb
leftovers-0.2.1 lib/leftovers/merged_config.rb
leftovers-0.2.0 lib/leftovers/merged_config.rb
leftovers-0.1.0 lib/leftovers/merged_config.rb