instance method gem

Ruby on Rails 8.1.2

Since v3.0.20

Available in: v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.9 v5.2.8.1 v6.0.6 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

gem(*args)

Adds a gem declaration to the Gemfile for the specified gem.

gem "rspec", group: :test
gem "technoweenie-restful-authentication", lib: "restful-authentication", source: "http://gems.github.com/"
gem "rails", "3.0", git: "https://github.com/rails/rails"
gem "RedCloth", ">= 4.1.0", "< 4.2.0"
gem "rspec", comment: "Put this comment above the gem declaration"

Note that this method only adds the gem to the Gemfile; it does not install the gem.

Options

:version

The version constraints for the gem, specified as a string or an array of strings:

gem "my_gem", version: "~> 1.1"
gem "my_gem", version: [">= 1.1", "< 2.0"]

Alternatively, can be specified as one or more arguments following the gem name:

gem "my_gem", ">= 1.1", "< 2.0"
:comment

Outputs a comment above the gem declaration in the Gemfile.

gem "my_gem", comment: "First line.\nSecond line."

Outputs:

# First line.
# Second line.
gem "my_gem"
:group

The gem group in the Gemfile that the gem belongs to.

:git

The URL of the git repository for the gem.

Any additional options passed to this method will be appended to the gem declaration in the Gemfile. For example:

gem "my_gem", comment: "Edge my_gem", git: "https://example.com/my_gem.git", branch: "master"

Outputs:

# Edge my_gem
gem "my_gem", git: "https://example.com/my_gem.git", branch: "master"

Parameters

args rest
Source
# File railties/lib/rails/generators/actions.rb, line 67
      def gem(*args)
        options = args.extract_options!
        name, *versions = args

        # Set the message to be shown in logs. Uses the git repo if one is given,
        # otherwise use name (version).
        parts, message = [ quote(name) ], name.dup

        # Output a comment above the gem declaration.
        comment = options.delete(:comment)

        if versions = versions.any? ? versions : options.delete(:version)
          _versions = Array(versions)
          _versions.each do |version|
            parts << quote(version)
          end
          message << " (#{_versions.join(", ")})"
        end
        message = options[:git] if options[:git]

        log :gemfile, message

        parts << quote(options) unless options.empty?

        in_root do
          str = []
          if comment
            comment.each_line do |comment_line|
              str << indentation
              str << "# #{comment_line}"
            end
            str << "\n"
          end
          str << indentation
          str << "gem #{parts.join(", ")}"
          append_file_with_newline "Gemfile", str.join, verbose: false
        end
      end

Defined in railties/lib/rails/generators/actions.rb line 67 · View on GitHub · Improve this page · Find usages on GitHub

Defined in Rails::Generators::Actions

Type at least 2 characters to search.

↑↓ navigate · open · esc close