Class: Toys::Utils::Gems
- Inherits:
-
Object
- Object
- Toys::Utils::Gems
- Defined in:
- lib/toys/utils/gems.rb
Overview
A helper class that activates and installs gems and sets up bundler.
This class is not loaded by default. Before using it directly, you should
require "toys/utils/gems"
Defined Under Namespace
Classes: ActivationFailedError, AlreadyBundledError, BundleNotInstalledError, BundlerFailedError, GemfileNotFoundError, GemfileUpdateNeededError, IncompatibleGemSourceError, IncompatibleToysError, InstallFailedError
Constant Summary collapse
- DEFAULT_GEMFILE_NAMES =
The gemfile names that are searched by default.
[".gems.rb", "gems.rb", "Gemfile"].freeze
Class Method Summary collapse
-
.activate(name, *requirements) ⇒ :activated, ...
Activate the given gem.
Instance Method Summary collapse
-
#activate(name, *requirements) ⇒ :activated, ...
Activate the given gem.
-
#bundle(groups: nil, gemfile_path: nil, search_dirs: nil, gemfile_names: nil, retries: nil) ⇒ :setup, ...
Search for an appropriate Gemfile, and set up the bundle.
-
#initialize(on_missing: nil, on_conflict: nil, terminal: nil, input: nil, output: nil, suppress_confirm: nil, default_confirm: nil) ⇒ Gems
constructor
Create a new gem activator.
Constructor Details
#initialize(on_missing: nil, on_conflict: nil, terminal: nil, input: nil, output: nil, suppress_confirm: nil, default_confirm: nil) ⇒ Gems
Create a new gem activator.
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/toys/utils/gems.rb', line 180 def initialize(on_missing: nil, on_conflict: nil, terminal: nil, input: nil, output: nil, suppress_confirm: nil, default_confirm: nil) require "rubygems" unless suppress_confirm.nil? warn("The :suppress_confirm argument to Toys::Utils::Gems is deprecated. " \ "Use :on_missing instead.") end default_confirm = true if default_confirm.nil? @default_confirm = default_confirm ? true : false @on_missing = on_missing || if suppress_confirm @default_confirm ? :install : :error else :confirm end @on_conflict = on_conflict || :error @terminal = terminal @input = input || $stdin @output = output || $stdout end |
Class Method Details
.activate(name, *requirements) ⇒ :activated, ...
Activate the given gem. If it is not present, attempt to install it (or inform the user to update the bundle).
148 149 150 |
# File 'lib/toys/utils/gems.rb', line 148 def self.activate(name, *requirements) new.activate(name, *requirements) end |
Instance Method Details
#activate(name, *requirements) ⇒ :activated, ...
Activate the given gem. If it is not present, attempt to install it (or inform the user to update the bundle).
219 220 221 222 223 224 225 |
# File 'lib/toys/utils/gems.rb', line 219 def activate(name, *requirements) Gems.synchronize do gem(name, *requirements) ? :activated : false rescue ::Gem::LoadError => e handle_activation_error(e, name, requirements) end end |
#bundle(groups: nil, gemfile_path: nil, search_dirs: nil, gemfile_names: nil, retries: nil) ⇒ :setup, ...
Search for an appropriate Gemfile, and set up the bundle.
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/toys/utils/gems.rb', line 253 def bundle(groups: nil, gemfile_path: nil, search_dirs: nil, gemfile_names: nil, retries: nil) Array(search_dirs).each do |dir| break if gemfile_path gemfile_path = Gems.find_gemfile(dir, gemfile_names: gemfile_names) end raise GemfileNotFoundError, "Gemfile not found" unless gemfile_path gemfile_path = ::File.absolute_path(gemfile_path) Gems.synchronize do setup_bundle(gemfile_path, groups: Array(groups), retries: retries) end end |