Module: Deprecool::Registry

Extended by:
Registry
Included in:
Registry
Defined in:
lib/deprecool/registry.rb

Overview

Selects which finders should run for a given application, based on the gems (and Ruby) it actually uses and at what versions.

Instance Method Summary collapse

Instance Method Details

#all_findersObject

Every registered finder.



10
11
12
# File 'lib/deprecool/registry.rb', line 10

def all_finders
  Finder.registry
end

#applicable(gems: [], gem_versions: [], include_all: false) ⇒ Object

Gets finders that apply to the given versions. gems - an array of gem names gem_versions - an array of hashes like: { gem:, version: }



17
18
19
20
21
# File 'lib/deprecool/registry.rb', line 17

def applicable(gems: [], gem_versions: [], include_all: false)
  return all_finders if include_all
  return finders_by_gem(gems) if gems.any?
  return finders_by_gem_version(gem_versions) if gem_versions.any?
end

#finders_by_gem(gems) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/deprecool/registry.rb', line 23

def finders_by_gem(gems)
  targets = []
  gems.each do |gem|
    targets << all_finders.select { it.to_s.match(/#{gem.capitalize}/) }
  end
  targets.flatten
end

#finders_by_gem_version(gem_versions) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/deprecool/registry.rb', line 31

def finders_by_gem_version(gem_versions)
  finder_targets = []

  gem_versions.each do |gem_version|
    jem     = gem_version[:gem].to_sym
    version = Gem::Version.new(gem_version[:version])

    # match when:
    # 1) finder is for the current gem,
    # 2) gem's version is higher than finder's deprecated,
    # and 3) gems version is lower or equal to the removed_in
    targets = all_finders.select do |finder|
      (finder.gem == jem) &&
        (finder.deprecated_in <= version) && (version <= finder.removed_in)
    end

    if !targets.empty?
      finder_targets << targets
    else
      # this unfortunately floods the terminal for now, but one day maybe it won't
      # puts "Oops, I don't have a Finder that applies to #{jem} v#{version}"
    end
  end

  finder_targets.flatten
end