module Rails::Generators::Actions
def gem(*args)
gem "my_gem", git: "https://example.com/my_gem.git", branch: "master"
# Edge my_gem
Outputs:
gem "my_gem", comment: "Edge my_gem", git: "https://example.com/my_gem.git", branch: "master"
+gem+ declaration in the +Gemfile+. For example:
Any additional options passed to this method will be appended to the
The URL of the git repository for the gem.
[+:git+]
The gem group in the +Gemfile+ that the gem belongs to.
[+:group+]
gem "my_gem"
# Second line.
# First line.
Outputs:
gem "my_gem", comment: "First line.\nSecond line."
Outputs a comment above the +gem+ declaration in the +Gemfile+.
[+:comment+]
gem "my_gem", ">= 1.1", "< 2.0"
gem name:
Alternatively, can be specified as one or more arguments following the
gem "my_gem", version: [">= 1.1", "< 2.0"]
gem "my_gem", version: "~> 1.1"
array of strings:
The version constraints for the gem, specified as a string or an
[+:version+]
==== Options
install the gem.
Note that this method only adds the gem to the +Gemfile+; it does not
gem "rspec", comment: "Put this comment above the gem declaration"
gem "RedCloth", ">= 4.1.0", "< 4.2.0"
gem "rails", "3.0", git: "https://github.com/rails/rails"
gem "technoweenie-restful-authentication", lib: "restful-authentication", source: "http://gems.github.com/"
gem "rspec", group: :test
Adds a +gem+ declaration to the +Gemfile+ for the specified gem.
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