summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Fazekas <mfazekas@szemafor.com>2016-03-26 11:07:51 +0100
committerMiklos Fazekas <mfazekas@szemafor.com>2016-03-26 11:10:36 +0100
commitc1714d7512514fd2a09c9c7931451cd5ab1f159a (patch)
treeea44d20d6acf75a709b384198fbfcd81c6ac5e95
parentca7f517efc68866d8cd5e60dc53aabef51f8755c (diff)
downloadnet-ssh-c1714d7512514fd2a09c9c7931451cd5ab1f159a.tar.gz
Updatd rakefile to use bundler instead of jeweler
-rw-r--r--CHANGES.txt4
-rw-r--r--Gemfile17
-rw-r--r--README.rdoc43
-rw-r--r--Rakefile62
-rw-r--r--lib/net/ssh/version.rb2
-rw-r--r--net-ssh.gemspec259
-rw-r--r--test/integration/playbook.yml1
7 files changed, 53 insertions, 335 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index f7e7c0b..350a224 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,7 @@
+=== 4.0.0.alpha2
+
+* when transport closes we're cleaning up channels [Miklos Fazekas]
+
=== 4.0.0.alpha1
* ed25519 key support [Miklos Fazekas]
diff --git a/Gemfile b/Gemfile
index f83eecd..e5ce235 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,17 +1,4 @@
source 'https://rubygems.org'
-# Note: this is run at package time not install time so if you are
-# running on jruby, you need to install jruby-pageant manually.
-gem 'jruby-pageant', ">=1.1.1" if RUBY_PLATFORM == "java"
-
-gem 'rbnacl-libsodium', ">=1.0.2"
-gem 'rbnacl', ">=3.1.2"
-gem 'bcrypt_pbkdf', '1.0.0.alpha1' unless RUBY_PLATFORM == "java"
-
-
-group :development do
- gem 'rake'
- gem 'test-unit', ">= 0.8.5"
- gem 'mocha'
- gem 'jeweler'
-end
+# Specify your gem's dependencies in mygem.gemspec
+gemspec \ No newline at end of file
diff --git a/README.rdoc b/README.rdoc
index c12ca41..1fcd289 100644
--- a/README.rdoc
+++ b/README.rdoc
@@ -1,17 +1,12 @@
= Net::SSH 4.x
-<em><b>Please note: this project is in maintenance mode. It is not under active development but pull requests are very much welcome. Just be sure to include tests! -- delano</b></em>
-
-
* Docs: http://net-ssh.github.com/net-ssh
* Issues: https://github.com/net-ssh/net-ssh/issues
* Codes: https://github.com/net-ssh/net-ssh
* Email: net-ssh@solutious.com
-
<em>As of v2.6.4, all gem releases are signed. See INSTALL.</em>
-
== DESCRIPTION:
Net::SSH is a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.
@@ -86,18 +81,13 @@ If that spits out something like "OpenSSL 0.9.8g 19 Oct 2007", then you're set.
Additionally: if you are going to be having Net::SSH prompt you for things like passwords or certificate passphrases, you'll want to have either the Highline (recommended) or Termios (unix systems only) gem installed, so that the passwords don't echo in clear text.
-Lastly, if you want to run the tests or use any of the Rake tasks, you'll need:
-
-* Echoe (for the Rakefile)
-* Mocha (for the tests)
+Lastly, if you want to run the tests or use any of the Rake tasks, you'll need Mocha and other dependencies listed in Gemfile
== INSTALL:
* gem install net-ssh (might need sudo privileges)
-NOTE: If you are running on jruby you need to install jruby-pageant manually (gemspec doesn't allow for platform specific dependencies).
-
However, in order to be sure the code you're installing hasn't been tampered with, it's recommended that you verify the signature[http://docs.rubygems.org/read/chapter/21]. To do this, you need to add my public key as a trusted certificate (you only need to do this once):
# Add the public key as a trusted certificate
@@ -111,7 +101,7 @@ Then, when install the gem, do so with high security:
If you don't add the public key, you'll see an error like "Couldn't verify data signature". If you're still having trouble let me know and I'll give you a hand.
-== RUBY 1.x SUPPORT
+== RUBY SUPPORT
* Ruby 1.8.x is supported up until the net-ssh 2.5.1 release.
* Ruby 1.9.x is supported up until the net-ssh 2.9.x release.
@@ -121,40 +111,19 @@ If you don't add the public key, you'll see an error like "Couldn't verify data
Run the test suite from the net-ssh directory with the following command:
- bash -c 'unset HOME && ruby -Ilib -Itest -rrubygems test/test_all.rb'
+ bundle exec rake test
Run a single test file like this:
- ruby -Ilib -Itest -rrubygems test/transport/test_server_version.rb
+ ruby -Ilib -Itest test/transport/test_server_version.rb
To run integration tests see test/integration/README.txt
=== BUILDING GEM
-Since building the gem requires the private key if you want to build a .gem locally please use the NET_SSH_NOKEY=1 envirnoment variable:
-
- rake build NET_SSH_NOKEY=1
-
-=== PORT FORWARDING TESTS
-
- ruby -Ilib -Itest -rrubygems test/manual/test_forward.rb
-
-test_forward.rb must be run separately from the test suite because
-it requires authorizing your public SSH keys on you localhost.
-
-If you already have keys you can do this:
-
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
-
-If you don't have keys see:
-
- http://kimmo.suominen.com/docs/ssh/#ssh-keygen
-
-You should now be able to login to your localhost with out
-bring prompted for a password:
-
- ssh localhost
+Since building the gem requires the private key if you want to build a .gem locally please use the NET_SSH_BUILDGEM_UNSIGNED=1 envirnoment variable:
+ rake build NET_SSH_BUILDGEM_UNSIGNED=1
== LICENSE:
diff --git a/Rakefile b/Rakefile
index 8b3a552..bba07b8 100644
--- a/Rakefile
+++ b/Rakefile
@@ -8,7 +8,8 @@
require "rubygems"
require "rake"
require "rake/clean"
-if RUBY_VERSION >= '1.9.0'
+require "bundler/gem_tasks"
+
require "rdoc/task"
task :default => ["build"]
@@ -19,51 +20,6 @@ $:.unshift File.join(File.dirname(__FILE__), 'lib')
require "net/ssh"
version = Net::SSH::Version::CURRENT
-begin
- require "jeweler"
- Jeweler::Tasks.new do |s|
- s.version = version
- s.name = name
- s.rubyforge_project = s.name
- s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
- s.description = s.summary + " It allows you to write programs that invoke and interact with processes on remote servers, via SSH2."
- s.email = "net-ssh@solutious.com"
- s.homepage = "https://github.com/net-ssh/net-ssh"
- s.authors = ["Jamis Buck", "Delano Mandelbaum", "Miklós Fazekas"]
- s.required_ruby_version = '>= 2.0'
-
- # dependencies defined in Gemfile
- s.license = "MIT"
-
- unless ENV['NET_SSH_NOKEY']
- signing_key = File.join('/mnt/gem/', 'net-ssh-private_key.pem')
- s.signing_key = File.join('/mnt/gem/', 'net-ssh-private_key.pem')
- s.cert_chain = ['net-ssh-public_cert.pem']
- unless (Rake.application.top_level_tasks & ['build','install']).empty?
- raise "No key found at #{signing_key} for signing, use rake <taskname> NET_SSH_NOKEY=1 to build without key" unless File.exist?(signing_key)
- end
- end
- def s.to_ruby
- # see https://github.com/technicalpickles/jeweler/issues/170
- result = super
- result = result.chomp("\n").split("\n").map do |line|
- if line =~ /%q<bcrypt_pbkdf>/
- line += ' unless RUBY_PLATFORM == "java"'
- else
- line
- end
- end.join("\n") << "\n"
- fail "Unexpected gemspec:#{result.inspect}" unless result.chomp!("\nend\n")
- result << "\n s.add_dependency('jruby-pageant', ['>= 1.1.1']) if RUBY_PLATFORM == 'jruby'"
- result << "\nend\n"
- result
- end
- end
- Jeweler::RubygemsDotOrgTasks.new
-rescue LoadError
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
-end
-
extra_files = %w[LICENSE.txt THANKS.txt CHANGES.txt ]
RDoc::Task.new do |rdoc|
rdoc.rdoc_dir = "rdoc"
@@ -77,7 +33,6 @@ RDoc::Task.new do |rdoc|
rdoc.rdoc_files.include(file) if File.exists?(file)
}
end
-end
namespace :rdoc do
desc "Update gh-pages branch"
@@ -105,15 +60,8 @@ end
end
require 'rake/testtask'
-Rake::TestTask.new do |t|
- if ENV['NET_SSH_RUN_INTEGRATION_TESTS']
- t.libs = ["lib","test","test/integration"]
- else
- t.libs = ["lib", "test"]
- end
-end
-Rake::TestTask.new(:'integration-test') do |t|
- t.libs = ["lib", "test/integration"]
- t.pattern = 'test/integration/test_*.rb'
+Rake::TestTask.new do |t|
+ t.libs = ["lib", "test"]
+ t.libs << "test/integration" if ENV['NET_SSH_RUN_INTEGRATION_TESTS']
end
diff --git a/lib/net/ssh/version.rb b/lib/net/ssh/version.rb
index c1b1134..e4477f2 100644
--- a/lib/net/ssh/version.rb
+++ b/lib/net/ssh/version.rb
@@ -55,7 +55,7 @@ module Net; module SSH
# The prerelease component of this version of the Net::SSH library
# nil allowed
- PRE = "alpha1"
+ PRE = "alpha2"
# The current version of the Net::SSH library as a Version instance
CURRENT = new(*[MAJOR, MINOR, TINY, PRE].compact)
diff --git a/net-ssh.gemspec b/net-ssh.gemspec
index 64f8873..e2f7a87 100644
--- a/net-ssh.gemspec
+++ b/net-ssh.gemspec
@@ -1,233 +1,42 @@
-# Generated by jeweler
-# DO NOT EDIT THIS FILE DIRECTLY
-# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
-# -*- encoding: utf-8 -*-
-# stub: net-ssh 4.0.0.alpha1 ruby lib
+# coding: utf-8
+require_relative 'lib/net/ssh/version'
-Gem::Specification.new do |s|
- s.name = "net-ssh"
- s.version = "4.0.0.alpha1"
+Gem::Specification.new do |spec|
+ spec.name = "net-ssh"
+ spec.version = Net::SSH::Version::STRING
+ spec.authors = ["Jamis Buck", "Delano Mandelbaum", "Mikl\u{f3}s Fazekas"]
+ spec.email = ["net-ssh@solutious.com"]
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
- s.require_paths = ["lib"]
- s.authors = ["Jamis Buck", "Delano Mandelbaum", "Mikl\u{f3}s Fazekas"]
- s.cert_chain = ["net-ssh-public_cert.pem"]
- s.date = "2016-03-19"
- s.description = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2."
- s.email = "net-ssh@solutious.com"
- s.extra_rdoc_files = [
+ unless ENV['NET_SSH_BUILDGEM_UNSIGNED']
+ spec.cert_chain = ["net-ssh-public_cert.pem"]
+ spec.signing_key = "/mnt/gem/net-ssh-private_key.pem"
+ end
+
+ spec.summary = %q{Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.}
+ spec.description = %q{Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.}
+ spec.homepage = "https://github.com/net-ssh/net-ssh"
+ spec.license = "MIT"
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.0")
+
+ spec.extra_rdoc_files = [
"LICENSE.txt",
"README.rdoc"
]
- s.files = [
- ".travis.yml",
- "CHANGES.txt",
- "Gemfile",
- "LICENSE.txt",
- "Manifest",
- "README.rdoc",
- "Rakefile",
- "THANKS.txt",
- "lib/net/ssh.rb",
- "lib/net/ssh/authentication/agent.rb",
- "lib/net/ssh/authentication/agent/java_pageant.rb",
- "lib/net/ssh/authentication/agent/socket.rb",
- "lib/net/ssh/authentication/constants.rb",
- "lib/net/ssh/authentication/ed25519.rb",
- "lib/net/ssh/authentication/key_manager.rb",
- "lib/net/ssh/authentication/methods/abstract.rb",
- "lib/net/ssh/authentication/methods/hostbased.rb",
- "lib/net/ssh/authentication/methods/keyboard_interactive.rb",
- "lib/net/ssh/authentication/methods/none.rb",
- "lib/net/ssh/authentication/methods/password.rb",
- "lib/net/ssh/authentication/methods/publickey.rb",
- "lib/net/ssh/authentication/pageant.rb",
- "lib/net/ssh/authentication/session.rb",
- "lib/net/ssh/buffer.rb",
- "lib/net/ssh/buffered_io.rb",
- "lib/net/ssh/config.rb",
- "lib/net/ssh/connection/channel.rb",
- "lib/net/ssh/connection/constants.rb",
- "lib/net/ssh/connection/keepalive.rb",
- "lib/net/ssh/connection/session.rb",
- "lib/net/ssh/connection/term.rb",
- "lib/net/ssh/errors.rb",
- "lib/net/ssh/key_factory.rb",
- "lib/net/ssh/known_hosts.rb",
- "lib/net/ssh/loggable.rb",
- "lib/net/ssh/packet.rb",
- "lib/net/ssh/prompt.rb",
- "lib/net/ssh/proxy/command.rb",
- "lib/net/ssh/proxy/errors.rb",
- "lib/net/ssh/proxy/http.rb",
- "lib/net/ssh/proxy/socks4.rb",
- "lib/net/ssh/proxy/socks5.rb",
- "lib/net/ssh/ruby_compat.rb",
- "lib/net/ssh/service/forward.rb",
- "lib/net/ssh/test.rb",
- "lib/net/ssh/test/channel.rb",
- "lib/net/ssh/test/extensions.rb",
- "lib/net/ssh/test/kex.rb",
- "lib/net/ssh/test/local_packet.rb",
- "lib/net/ssh/test/packet.rb",
- "lib/net/ssh/test/remote_packet.rb",
- "lib/net/ssh/test/script.rb",
- "lib/net/ssh/test/socket.rb",
- "lib/net/ssh/transport/algorithms.rb",
- "lib/net/ssh/transport/cipher_factory.rb",
- "lib/net/ssh/transport/constants.rb",
- "lib/net/ssh/transport/ctr.rb",
- "lib/net/ssh/transport/hmac.rb",
- "lib/net/ssh/transport/hmac/abstract.rb",
- "lib/net/ssh/transport/hmac/md5.rb",
- "lib/net/ssh/transport/hmac/md5_96.rb",
- "lib/net/ssh/transport/hmac/none.rb",
- "lib/net/ssh/transport/hmac/ripemd160.rb",
- "lib/net/ssh/transport/hmac/sha1.rb",
- "lib/net/ssh/transport/hmac/sha1_96.rb",
- "lib/net/ssh/transport/hmac/sha2_256.rb",
- "lib/net/ssh/transport/hmac/sha2_256_96.rb",
- "lib/net/ssh/transport/hmac/sha2_512.rb",
- "lib/net/ssh/transport/hmac/sha2_512_96.rb",
- "lib/net/ssh/transport/identity_cipher.rb",
- "lib/net/ssh/transport/kex.rb",
- "lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb",
- "lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb",
- "lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb",
- "lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb",
- "lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb",
- "lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb",
- "lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb",
- "lib/net/ssh/transport/key_expander.rb",
- "lib/net/ssh/transport/openssl.rb",
- "lib/net/ssh/transport/packet_stream.rb",
- "lib/net/ssh/transport/server_version.rb",
- "lib/net/ssh/transport/session.rb",
- "lib/net/ssh/transport/state.rb",
- "lib/net/ssh/verifiers/lenient.rb",
- "lib/net/ssh/verifiers/null.rb",
- "lib/net/ssh/verifiers/secure.rb",
- "lib/net/ssh/verifiers/strict.rb",
- "lib/net/ssh/version.rb",
- "net-ssh-public_cert.pem",
- "net-ssh.gemspec",
- "setup.rb",
- "support/arcfour_check.rb",
- "support/ssh_tunnel_bug.rb",
- "test/README.txt",
- "test/authentication/methods/common.rb",
- "test/authentication/methods/test_abstract.rb",
- "test/authentication/methods/test_hostbased.rb",
- "test/authentication/methods/test_keyboard_interactive.rb",
- "test/authentication/methods/test_none.rb",
- "test/authentication/methods/test_password.rb",
- "test/authentication/methods/test_publickey.rb",
- "test/authentication/test_agent.rb",
- "test/authentication/test_ed25519.rb",
- "test/authentication/test_key_manager.rb",
- "test/authentication/test_session.rb",
- "test/common.rb",
- "test/configs/auth_off",
- "test/configs/auth_on",
- "test/configs/empty",
- "test/configs/eqsign",
- "test/configs/exact_match",
- "test/configs/host_plus",
- "test/configs/multihost",
- "test/configs/negative_match",
- "test/configs/nohost",
- "test/configs/numeric_host",
- "test/configs/proxy_remote_user",
- "test/configs/send_env",
- "test/configs/substitutes",
- "test/configs/wild_cards",
- "test/connection/test_channel.rb",
- "test/connection/test_session.rb",
- "test/integration/README.md",
- "test/integration/Vagrantfile",
- "test/integration/common.rb",
- "test/integration/playbook.yml",
- "test/integration/test_ed25519_pkeys.rb",
- "test/integration/test_forward.rb",
- "test/integration/test_id_rsa_keys.rb",
- "test/integration/test_proxy.rb",
- "test/known_hosts/github",
- "test/known_hosts/github_hash",
- "test/manual/test_pageant.rb",
- "test/start/test_connection.rb",
- "test/start/test_options.rb",
- "test/start/test_transport.rb",
- "test/start/test_user_nil.rb",
- "test/test_all.rb",
- "test/test_buffer.rb",
- "test/test_buffered_io.rb",
- "test/test_config.rb",
- "test/test_key_factory.rb",
- "test/test_known_hosts.rb",
- "test/transport/hmac/test_md5.rb",
- "test/transport/hmac/test_md5_96.rb",
- "test/transport/hmac/test_none.rb",
- "test/transport/hmac/test_ripemd160.rb",
- "test/transport/hmac/test_sha1.rb",
- "test/transport/hmac/test_sha1_96.rb",
- "test/transport/hmac/test_sha2_256.rb",
- "test/transport/hmac/test_sha2_256_96.rb",
- "test/transport/hmac/test_sha2_512.rb",
- "test/transport/hmac/test_sha2_512_96.rb",
- "test/transport/kex/test_diffie_hellman_group14_sha1.rb",
- "test/transport/kex/test_diffie_hellman_group1_sha1.rb",
- "test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb",
- "test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb",
- "test/transport/kex/test_ecdh_sha2_nistp256.rb",
- "test/transport/kex/test_ecdh_sha2_nistp384.rb",
- "test/transport/kex/test_ecdh_sha2_nistp521.rb",
- "test/transport/test_algorithms.rb",
- "test/transport/test_cipher_factory.rb",
- "test/transport/test_hmac.rb",
- "test/transport/test_identity_cipher.rb",
- "test/transport/test_packet_stream.rb",
- "test/transport/test_server_version.rb",
- "test/transport/test_session.rb",
- "test/transport/test_state.rb",
- "test/verifiers/test_secure.rb"
- ]
- s.homepage = "https://github.com/net-ssh/net-ssh"
- s.licenses = ["MIT"]
- s.required_ruby_version = Gem::Requirement.new(">= 2.0")
- s.rubyforge_project = "net-ssh"
- s.rubygems_version = "2.4.6"
- s.signing_key = "/mnt/gem/net-ssh-private_key.pem"
- s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
+
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
+ spec.bindir = "exe"
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
+ spec.require_paths = ["lib"]
- if s.respond_to? :specification_version then
- s.specification_version = 4
+ spec.add_runtime_dependency("rbnacl-libsodium", ">= 1.0.2")
+ spec.add_runtime_dependency("rbnacl", ">= 3.1.2")
+ spec.add_runtime_dependency("bcrypt_pbkdf", "= 1.0.0.alpha1") unless RUBY_PLATFORM == "java"
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
- s.add_runtime_dependency(%q<rbnacl-libsodium>, [">= 1.0.2"])
- s.add_runtime_dependency(%q<rbnacl>, [">= 3.1.2"])
- s.add_runtime_dependency(%q<bcrypt_pbkdf>, ["= 1.0.0.alpha1"]) unless RUBY_PLATFORM == "java"
- s.add_development_dependency(%q<rake>, [">= 0"])
- s.add_development_dependency(%q<test-unit>, [">= 0.8.5"])
- s.add_development_dependency(%q<mocha>, [">= 0"])
- s.add_development_dependency(%q<jeweler>, [">= 0"])
- else
- s.add_dependency(%q<rbnacl-libsodium>, [">= 1.0.2"])
- s.add_dependency(%q<rbnacl>, [">= 3.1.2"])
- s.add_dependency(%q<bcrypt_pbkdf>, ["= 1.0.0.alpha1"]) unless RUBY_PLATFORM == "java"
- s.add_dependency(%q<rake>, [">= 0"])
- s.add_dependency(%q<test-unit>, [">= 0.8.5"])
- s.add_dependency(%q<mocha>, [">= 0"])
- s.add_dependency(%q<jeweler>, [">= 0"])
- end
- else
- s.add_dependency(%q<rbnacl-libsodium>, [">= 1.0.2"])
- s.add_dependency(%q<rbnacl>, [">= 3.1.2"])
- s.add_dependency(%q<bcrypt_pbkdf>, ["= 1.0.0.alpha1"]) unless RUBY_PLATFORM == "java"
- s.add_dependency(%q<rake>, [">= 0"])
- s.add_dependency(%q<test-unit>, [">= 0.8.5"])
- s.add_dependency(%q<mocha>, [">= 0"])
- s.add_dependency(%q<jeweler>, [">= 0"])
- end
- s.add_dependency('jruby-pageant', ['>= 1.1.1']) if RUBY_PLATFORM == 'jruby'
-end
+ spec.add_development_dependency "bundler", "~> 1.11"
+ spec.add_development_dependency "rake", "~> 11.1"
+ spec.add_development_dependency "minitest", "~> 5.0"
+ spec.add_development_dependency("mocha", ">= 1.1.0")
+
+ spec.add_dependency('jruby-pageant', '>= 1.1.1') if RUBY_PLATFORM == 'jruby'
+end
diff --git a/test/integration/playbook.yml b/test/integration/playbook.yml
index 52e8a2d..40f7ec3 100644
--- a/test/integration/playbook.yml
+++ b/test/integration/playbook.yml
@@ -48,6 +48,7 @@
with_items:
- pv
- libgmp3-dev
+ - git
- gem: name="{{ item[1] }}" state=present user_install=no executable=/usr/local/rvm/wrappers/ruby-{{ item[0] }}/gem
with_nested:
- "{{ruby_versions}}"