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 =
'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
24 25 26 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 24 def available? defined?(::Gem) == 'constant' end |
#available_packages(pattern) ⇒ Array<Hash>
Search for available gems matching a pattern.
61 62 63 64 65 66 67 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 61 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
19 20 21 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 19 def backend_name 'gem' end |
#install(package_name) ⇒ Boolean
Install a gem.
32 33 34 35 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 32 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.
50 51 52 53 54 55 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 50 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.
41 42 43 44 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 41 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).
72 73 74 |
# File 'lib/rosett_ai/package_manager/gem_backend.rb', line 72 def update_index # rubocop:disable Naming/PredicateMethod -- imperative action (Base interface), not a predicate true end |