module Toys::StandardMixins::Gems

Provides methods for installing and activating third-party gems. When this mixin is included, it provides a `gem` method that has the same effect as {Toys::Utils::Gems#activate}, so you can ensure a gem is present when running a tool. A `gem` directive is likewise added to the tool DSL itself, so you can also ensure a gem is present when defining a tool.

You may make these methods available to your tool by including the following directive in your tool configuration:

include :gems

If you pass additional options to the include directive, those are used to initialize settings for the gem install process. For example:

include :gems, on_missing: :error

See {Toys::Utils::Gems#initialize} for a list of supported options.

Public Class Methods

gem(name, *requirements) click to toggle source

@private

# File lib/toys/standard_mixins/gems.rb, line 40
def self.gem(name, *requirements)
  gems.activate(name, *requirements)
end
gems() click to toggle source

@private

# File lib/toys/standard_mixins/gems.rb, line 32
def self.gems
  require "toys/utils/gems"
  # rubocop:disable Naming/MemoizedInstanceVariableName
  @__gems ||= Utils::Gems.new(**@__gems_opts)
  # rubocop:enable Naming/MemoizedInstanceVariableName
end

Public Instance Methods

gem(name, *requirements) click to toggle source

Activate the given gem.

@param name [String] Name of the gem @param requirements [String…] Version requirements @return [void]

# File lib/toys/standard_mixins/gems.rb, line 60
def gem(name, *requirements)
  self.class.gems.activate(name, *requirements)
end
gems() click to toggle source

A tool-wide instance of {Toys::Utils::Gems}. @return [Toys::Utils::Gems]

# File lib/toys/standard_mixins/gems.rb, line 49
def gems
  self.class.gems
end