According to the local cop (rubocop), my method has too many lines.
lib/awesomelibrary/tunnelable.rb:4:5: C: Method has too many lines. [17/10]
def tunnel_run(cmd) ...
^^^^^^^^^^^^^^^^^^^
Below is the method. How do I refactor it?
module AwesomeLibrary
# Gives object the ability to execute bash commands on itself via ssh
module Tunnelable
def tunnel_run(cmd)
retries = 0
code = nil
Net::SSH.start(@tunnel_ip, @tunnel_username, keys: @tunnel_key_name, verify_host_key: false) do |ssh|
the_channel = ssh.open_channel do |channel|
channel.exec cmd do |ch, success|
raise "could not execute command" unless success
ch.on_data { |_c, data| print data }
ch.on_extended_data { |_c, _type, data| print data }
ch.on_request("exit-status") { |_ch, data| code = data.read_long }
end
end
the_channel.wait
end
abort "#{cmd} returned #{code} !!" if code != 0
rescue Net::SSH::ConnectionTimeout
puts "Net::SSH::ConnectionTimeout"
retry if (retries += 1) < 3
end
end
end
I'm using this is the library: Net::SSH 4.x.
retry
will start the method over, settingretries = 0
each time... \$\endgroup\$