Module: Deprecool::Registry
Overview
Selects which finders should run for a given application
Instance Method Summary collapse
-
#all_finders ⇒ Object
All the subclasses of Finder.
-
#applicable(gems: [], gem_versions: [], include_all: false) ⇒ Object
Gets finders that apply to the given versions.
- #finders_by_gem(gems) ⇒ Object
- #finders_by_gem_version(gem_versions) ⇒ Object
Instance Method Details
#all_finders ⇒ Object
All the subclasses of Finder
9 10 11 |
# File 'lib/deprecool/registry.rb', line 9 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: }
16 17 18 19 20 |
# File 'lib/deprecool/registry.rb', line 16 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
22 23 24 25 26 27 28 |
# File 'lib/deprecool/registry.rb', line 22 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
30 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 |
# File 'lib/deprecool/registry.rb', line 30 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 |