Class: Yoker::Detectors::VersionManagerDetector
- Inherits:
-
Object
- Object
- Yoker::Detectors::VersionManagerDetector
- Defined in:
- lib/yoker/detectors/version_manager_detector.rb
Constant Summary collapse
- PREFERENCE_ORDER =
Preference order for version managers
%w[mise rvm rbenv].freeze
Class Method Summary collapse
- .command_exists?(command) ⇒ Boolean
- .current_ruby_version ⇒ Object
- .detect ⇒ Object
- .detect_from_files ⇒ Object
- .detect_installed_managers ⇒ Object
- .ruby_version_from_file ⇒ Object
Class Method Details
.command_exists?(command) ⇒ Boolean
55 56 57 |
# File 'lib/yoker/detectors/version_manager_detector.rb', line 55 def self.command_exists?(command) system("which #{command} > /dev/null 2>&1") end |
.current_ruby_version ⇒ Object
59 60 61 |
# File 'lib/yoker/detectors/version_manager_detector.rb', line 59 def self.current_ruby_version RUBY_VERSION end |
.detect ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/yoker/detectors/version_manager_detector.rb', line 9 def self.detect # First, check which version managers are actually installed installed_managers = detect_installed_managers return "none" if installed_managers.empty? # Check for configuration files that match installed managers file_based_detection = detect_from_files # If we found a config file for an installed manager, use it return file_based_detection if file_based_detection && installed_managers.include?(file_based_detection) # Otherwise, return the highest priority installed manager PREFERENCE_ORDER.each do |manager| return manager if installed_managers.include?(manager) end "none" end |
.detect_from_files ⇒ Object
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/yoker/detectors/version_manager_detector.rb', line 44 def self.detect_from_files # Check for version manager configuration files return "mise" if File.exist?("mise.toml") || File.exist?(".mise.toml") return "mise" if File.exist?(".tool-versions") # mise/asdf format return "rvm" if File.exist?(".rvmrc") || File.exist?(".ruby-gemset") # .ruby-version alone suggests rbenv return "rbenv" if File.exist?(".ruby-version") && !File.exist?(".ruby-gemset") nil end |
.detect_installed_managers ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/yoker/detectors/version_manager_detector.rb', line 29 def self.detect_installed_managers managers = [] # Check for mise managers << "mise" if command_exists?("mise") # Check for rvm managers << "rvm" if command_exists?("rvm") # Check for rbenv managers << "rbenv" if command_exists?("rbenv") managers end |
.ruby_version_from_file ⇒ Object
63 64 65 66 67 68 69 70 71 |
# File 'lib/yoker/detectors/version_manager_detector.rb', line 63 def self.ruby_version_from_file if File.exist?("mise.toml") extract_ruby_from_mise_toml elsif File.exist?(".ruby-version") File.read(".ruby-version").strip elsif File.exist?(".tool-versions") extract_ruby_from_tool_versions end end |