A class representing the attributes of a file or directory on the server. It may be used to specify new attributes, or to query existing attributes.
To specify new attributes, just pass a hash as the argument to the constructor. The following keys are supported:
- :size
- 
            the size of the file 
 
- :uid
- 
            the user-id that owns the file (integer) 
 
- :gid
- 
            the group-id that owns the file (integer) 
 
- :owner
- 
            the name of the user that owns the file (string) 
 
- :group
- 
            the name of the group that owns the file (string) 
 
- :permissions
- 
            the permissions on the file (integer, e.g. 0755) 
 
- :atime
- 
            the access time of the file (integer, seconds since epoch) 
 
- :mtime
- 
            the modification time of the file (integer, seconds since epoch) 
 
- :extended
- 
            a hash of name/value pairs identifying extended info 
 
Likewise, when the server sends an Attributes object, all of the above attributes are exposed as methods (though not all will be set with non-nil values from the server).
Methods
Public Class
Public Instance
Constants
| F_ACMODTIME | = | 0x00000008 | ||
| F_EXTENDED | = | 0x80000000 | ||
| F_PERMISSIONS | = | 0x00000004 | ||
| F_SIZE | = | 0x00000001 | ||
| F_UIDGID | = | 0x00000002 | ||
| T_BLOCK_DEVICE | = | 8 | ||
| T_CHAR_DEVICE | = | 7 | ||
| T_DIRECTORY | = | 2 | ||
| T_FIFO | = | 9 | ||
| T_REGULAR | = | 1 | ||
| T_SOCKET | = | 6 | ||
| T_SPECIAL | = | 4 | ||
| T_SYMLINK | = | 3 | ||
| T_UNKNOWN | = | 5 | 
Attributes
| atime | [RW] | The last access time of the file | 
| attributes | [R] | The hash of name/value pairs that backs this Attributes instance | 
| extended | [RW] | The hash of name/value pairs identifying extended information about the file | 
| gid | [W] | The group-id of the user that owns the file | 
| mtime | [RW] | The modification time of the file | 
| permissions | [RW] | The permissions on the file | 
| size | [RW] | The size of the file. | 
| uid | [W] | The user-id of the user that owns the file | 
Public Class methods
Parses the given buffer and returns an Attributes object compsed from the data extracted from it.
# File lib/net/sftp/protocol/01/attributes.rb, line 59 def from_buffer(buffer) flags = buffer.read_long data = {} elements.each do |name, type, condition| if flags & condition == condition if type == :special data[name] = send("parse_#{name}", buffer) else data[name] = buffer.send("read_#{type}") end end end new(data) end
Create a new Attributes instance with the given attributes. The following keys are supported:
- :size
- 
                  the size of the file 
 
- :uid
- 
                  the user-id that owns the file (integer) 
 
- :gid
- 
                  the group-id that owns the file (integer) 
 
- :owner
- 
                  the name of the user that owns the file (string) 
 
- :group
- 
                  the name of the group that owns the file (string) 
 
- :permissions
- 
                  the permissions on the file (integer, e.g. 0755) 
 
- :atime
- 
                  the access time of the file (integer, seconds since epoch) 
 
- :mtime
- 
                  the modification time of the file (integer, seconds since epoch) 
 
- :extended
- 
                  a hash of name/value pairs identifying extended info 
 
# File lib/net/sftp/protocol/01/attributes.rb, line 152 def initialize(attributes={}) @attributes = attributes end
Public Instance methods
Returns true if these attributes appear to describe a directory.
# File lib/net/sftp/protocol/01/attributes.rb, line 244 def directory? case type when T_DIRECTORY then true when T_UNKNOWN then nil else false end end
Returns true if these attributes appear to describe a regular file.
# File lib/net/sftp/protocol/01/attributes.rb, line 262 def file? case type when T_REGULAR then true when T_UNKNOWN then nil else false end end
Returns the group-id of the group that owns the file, or nil
                  if that information is not available. If a :group key exists, but not a
                  :gid key, the Etc module will be used to reverse lookup the id from the
                  name. This might fail on some systems (e.g., Windows).
# File lib/net/sftp/protocol/01/attributes.rb, line 172 def gid if attributes[:group] && !attributes.key?(:gid) require 'etc' attributes[:gid] = Etc.getgrnam(attributes[:group]).gid end attributes[:gid] end
Returns the group name of the group that owns the file, or nil
                  if that information is not available. If the :gid is given, but not the
                  :group, the Etc module will be used to lookup the name from the id. This
                  might fail on some systems (e.g. Windows).
# File lib/net/sftp/protocol/01/attributes.rb, line 196 def group if attributes[:gid] && !attributes[:group] require 'etc' attributes[:group] = Etc.getgrgid(attributes[:gid].to_i).name end attributes[:group] end
Returns the username of the user that owns the file, or nil if
                  that information is not available. If the :uid is given, but not the
                  :owner, the Etc module will be used to lookup the name from the id. This
                  might fail on some systems (e.g. Windows).
# File lib/net/sftp/protocol/01/attributes.rb, line 184 def owner if attributes[:uid] && !attributes[:owner] require 'etc' attributes[:owner] = Etc.getpwuid(attributes[:uid].to_i).name end attributes[:owner] end
Returns the type as a symbol, rather than an integer, for easier use in Ruby programs.
# File lib/net/sftp/protocol/01/attributes.rb, line 228 def symbolic_type case type when T_SOCKET then :socket when T_SYMLINK then :symlink when T_REGULAR then :regular when T_BLOCK_DEVICE then :block_device when T_DIRECTORY then :directory when T_CHAR_DEVICE then :char_device when T_FIFO then :fifo when T_SPECIAL then :special when T_UNKNOWN then :unknown else raise NotImplementedError, "unknown file type #{type} (bug?)" end end
Returns true if these attributes appear to describe a symlink.
# File lib/net/sftp/protocol/01/attributes.rb, line 253 def symlink? case type when T_SYMLINK then true when T_UNKNOWN then nil else false end end
Convert the object to a string suitable for passing in an SFTP packet. This is the raw representation of the attribute packet payload, and is not intended to be human readable.
# File lib/net/sftp/protocol/01/attributes.rb, line 273 def to_s prepare_serialization! flags = 0 self.class.elements.each do |name, type, condition| flags |= condition if attributes[name] end buffer = Net::SSH::Buffer.from(:long, flags) self.class.elements.each do |name, type, condition| if flags & condition == condition if type == :special send("encode_#{name}", buffer) else buffer.send("write_#{type}", attributes[name]) end end end buffer.to_s end
Inspects the permissions bits to determine what type of entity this attributes object represents. If will return one of the T_ constants.
# File lib/net/sftp/protocol/01/attributes.rb, line 206 def type if permissions & 0140000 == 0140000 then T_SOCKET elsif permissions & 0120000 == 0120000 then T_SYMLINK elsif permissions & 0100000 == 0100000 then T_REGULAR elsif permissions & 060000 == 060000 then T_BLOCK_DEVICE elsif permissions & 040000 == 040000 then T_DIRECTORY elsif permissions & 020000 == 020000 then T_CHAR_DEVICE elsif permissions & 010000 == 010000 then T_FIFO else T_UNKNOWN end end
Returns the user-id of the user that owns the file, or nil if
                  that information is not available. If an :owner key exists, but not a :uid
                  key, the Etc module will be used to reverse lookup the id from the name.
                  This might fail on some systems (e.g., Windows).
# File lib/net/sftp/protocol/01/attributes.rb, line 160 def uid if attributes[:owner] && !attributes.key?(:uid) require 'etc' attributes[:uid] = Etc.getpwnam(attributes[:owner]).uid end attributes[:uid] end