Object
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).
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
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
Generated with the Darkfish Rdoc Generator 2.