Class: Toys::Utils::Gems

Inherits:
Object
  • Object
show all
Defined in:
lib/toys/utils/gems.rb

Overview

A helper module that activates and installs gems

Defined Under Namespace

Classes: ActivationFailedError, GemfileUpdateNeededError, InstallFailedError

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input: $stdin, output: $stderr, suppress_confirm: false, default_confirm: true) ⇒ Gems

Create a new gem activator.

Parameters:

  • input (IO) (defaults to: $stdin)

    Input IO

  • output (IO) (defaults to: $stderr)

    Output IO

  • suppress_confirm (Boolean) (defaults to: false)

    Suppress the confirmation prompt and just use the given default_confirm value. Default is false, indicating the confirmation prompt appears by default.

  • default_confirm (Boolean) (defaults to: true)

    Default response for the confirmation prompt. Default is true.



82
83
84
85
86
87
88
89
90
# File 'lib/toys/utils/gems.rb', line 82

def initialize(input: $stdin,
               output: $stderr,
               suppress_confirm: false,
               default_confirm: true)
  @terminal = Terminal.new(input: input, output: output)
  @exec = Exec.new
  @suppress_confirm = suppress_confirm ? true : false
  @default_confirm = default_confirm ? true : false
end

Class Method Details

.activate(name, *requirements) ⇒ Object

Activate the given gem. If it is not present, attempt to install it (or inform the user to update the bundle).

Parameters:

  • name (String)

    Name of the gem

  • requirements (String...)

    Version requirements



67
68
69
# File 'lib/toys/utils/gems.rb', line 67

def self.activate(name, *requirements)
  new.activate(name, *requirements)
end

Instance Method Details

#activate(name, *requirements) ⇒ Object

Activate the given gem. If it is not present, attempt to install it (or inform the user to update the bundle).

Parameters:

  • name (String)

    Name of the gem

  • requirements (String...)

    Version requirements



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/toys/utils/gems.rb', line 99

def activate(name, *requirements)
  gem(name, *requirements)
rescue ::Gem::LoadError => e1
  is_missing_spec =
    if defined?(::Gem::MissingSpecError)
      e1.is_a?(::Gem::MissingSpecError)
    else
      e1.message.include?("Could not find")
    end
  if is_missing_spec
    install_gem(name, requirements)
    begin
      gem(name, *requirements)
    rescue ::Gem::LoadError => e2
      report_error(name, requirements, e2)
    end
  else
    report_error(name, requirements, e1)
  end
end