Class: RosettAi::PackageManager::GemBackend
- Defined in:
- lib/rosett_ai/package_manager/gem_backend.rb
Overview
RubyGems package manager backend.
Does NOT require privilege escalation. Installs gems into the user's gem directory or the system gem path.
Constant Summary collapse
- GEM_COMMAND =
Returns Path to the gem binary.
'gem'
Instance Method Summary collapse
- #available? ⇒ Boolean
-
#available_packages(pattern) ⇒ Array<Hash>
Search for available gems matching a pattern.
- #backend_name ⇒ String
-
#install(package_name) ⇒ Boolean
Install a gem.
-
#installed?(package_name) ⇒ Boolean
Check if a gem is installed.
-
#remove(package_name) ⇒ Boolean
Remove a gem.
-
#update_index ⇒ Boolean
No-op for gems (no index to update).
Instance Method Details
#available? ⇒ Boolean
25 26 27 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 25 def available? defined?(::Gem) == 'constant' end |
#available_packages(pattern) ⇒ Array<Hash>
Search for available gems matching a pattern.
62 63 64 65 66 67 68 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 62 def available_packages(pattern) validate_gem_name!(pattern) specs = Gem::Specification.find_all_by_name(/#{Regexp.escape(pattern)}/) specs.map { |s| { name: s.name, version: s.version.to_s } } rescue Gem::MissingSpecError [] end |
#backend_name ⇒ String
20 21 22 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 20 def backend_name 'gem' end |
#install(package_name) ⇒ Boolean
Install a gem.
33 34 35 36 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 33 def install(package_name) validate_gem_name!(package_name) system(GEM_COMMAND, 'install', package_name, '--no-document', out: File::NULL) end |
#installed?(package_name) ⇒ Boolean
Check if a gem is installed.
51 52 53 54 55 56 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 51 def installed?(package_name) validate_gem_name!(package_name) !Gem::Specification.find_all_by_name(package_name).empty? rescue Gem::MissingSpecError false end |
#remove(package_name) ⇒ Boolean
Remove a gem.
42 43 44 45 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 42 def remove(package_name) validate_gem_name!(package_name) system(GEM_COMMAND, 'uninstall', package_name, '-x', out: File::NULL) end |
#update_index ⇒ Boolean
No-op for gems (no index to update).
73 74 75 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 73 def update_index # rubocop:disable Naming/PredicateMethod -- imperative action (Base interface), not a predicate true end |