# File lib/rake_remote_task.rb, line 341
  def self.role role_name, host = nil, args = {}
    if block_given? then
      raise ArgumentError, 'host not allowed with block' unless host.nil?

      begin
        current_roles << role_name
        yield
      ensure
        current_roles.delete role_name
      end
    else
      raise ArgumentError, 'host required' if host.nil?

      [*host].each do |hst|
        raise ArgumentError, "invalid host: #{hst}" if hst.nil? or hst.empty?
      end
      @@roles[role_name] = {} if @@def_role_hash.eql? @@roles[role_name]
      @@roles[role_name][host] = args
    end
  end