1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/net/ftp.rb (file?, directory?, appendable?, creatable?,

deletable?, enterable?, renamable?, listable?, directory_makable?,
  purgeable?, readable?, writable?): new methods.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51843 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2015-09-12 14:09:45 +00:00
parent 2ec793ab27
commit 2478c7bc33
4 changed files with 210 additions and 2 deletions

View file

@ -1,3 +1,9 @@
Sat Sep 12 23:06:51 2015 Shugo Maeda <shugo@ruby-lang.org>
* lib/net/ftp.rb (file?, directory?, appendable?, creatable?,
deletable?, enterable?, renamable?, listable?, directory_makable?,
purgeable?, readable?, writable?): new methods.
Sat Sep 12 21:27:22 2015 Shugo Maeda <shugo@ruby-lang.org>
* lib/net/ftp.rb (FACT_PARSERS): support system dependent facts

View file

@ -768,7 +768,113 @@ module Net
alias ls list
alias dir list
MLSxEntry = Struct.new(:facts, :pathname)
#
# MLSxEntry represents an entry in responses of MLST/MLSD.
# Each entry has the facts (e.g., size, last modification time, etc.)
# and the pathname.
#
class MLSxEntry
attr_reader :facts, :pathname
def initialize(facts, pathname)
@facts = facts
@pathname = pathname
end
#
# Returns +true+ if the entry is a file (i.e., the value of the type
# fact is file).
#
def file?
return facts["type"] == "file"
end
#
# Returns +true+ if the entry is a directory (i.e., the value of the
# type fact is dir, cdir, or pdir).
#
def directory?
if /\A[cp]?dir\z/.match(facts["type"])
return true
else
return false
end
end
#
# Returns +true+ if the APPE command may be applied to the file.
#
def appendable?
return facts["perm"].include?(?a)
end
#
# Returns +true+ if files may be created in the directory by STOU,
# STOR, APPE, and RNTO.
#
def creatable?
return facts["perm"].include?(?c)
end
#
# Returns +true+ if the file or directory may be deleted by DELE/RMD.
#
def deletable?
return facts["perm"].include?(?d)
end
#
# Returns +true+ if the directory may be entered by CWD/CDUP.
#
def enterable?
return facts["perm"].include?(?e)
end
#
# Returns +true+ if the file or directory may be renamed by RNFR.
#
def renamable?
return facts["perm"].include?(?f)
end
#
# Returns +true+ if the listing commands, LIST, NLST, and MLSD are
# applied to the directory.
#
def listable?
return facts["perm"].include?(?l)
end
#
# Returns +true+ if the MKD command may be used to create a new
# directory within the directory.
#
def directory_makable?
return facts["perm"].include?(?m)
end
#
# Returns +true+ if the objects in the directory may be deleted, or
# the directory may be purged.
#
def purgeable?
return facts["perm"].include?(?p)
end
#
# Returns +true+ if the RETR command may be applied to the file.
#
def readable?
return facts["perm"].include?(?r)
end
#
# Returns +true+ if the STOR command may be applied to the file.
#
def writable?
return facts["perm"].include?(?w)
end
end
CASE_DEPENDENT_PARSER = ->(value) { value }
CASE_INDEPENDENT_PARSER = ->(value) { value.downcase }

View file

@ -3,7 +3,7 @@ require "test/unit"
require "ostruct"
require "stringio"
class FTPTest < Test::Unit::TestCase
class BufferedSocketTest < Test::Unit::TestCase
def test_gets_empty
sock = create_buffered_socket("")
assert_equal(nil, sock.gets)

View file

@ -0,0 +1,96 @@
require "net/ftp"
require "test/unit"
require "ostruct"
require "stringio"
class MLSxEntryTest < Test::Unit::TestCase
def test_file?
assert_equal(true, Net::FTP::MLSxEntry.new({"type"=>"file"}, "foo").file?)
assert_equal(false, Net::FTP::MLSxEntry.new({"type"=>"dir"}, "foo").file?)
assert_equal(false, Net::FTP::MLSxEntry.new({"type"=>"cdir"}, "foo").file?)
assert_equal(false, Net::FTP::MLSxEntry.new({"type"=>"pdir"}, "foo").file?)
end
def test_directory?
assert_equal(false,
Net::FTP::MLSxEntry.new({"type"=>"file"}, "foo").directory?)
assert_equal(true,
Net::FTP::MLSxEntry.new({"type"=>"dir"}, "foo").directory?)
assert_equal(true,
Net::FTP::MLSxEntry.new({"type"=>"cdir"}, "foo").directory?)
assert_equal(true,
Net::FTP::MLSxEntry.new({"type"=>"pdir"}, "foo").directory?)
end
def test_appendable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"a"}, "foo").appendable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").appendable?)
end
def test_creatable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"c"}, "foo").creatable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").creatable?)
end
def test_deletable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"d"}, "foo").deletable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").deletable?)
end
def test_enterable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"e"}, "foo").enterable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").enterable?)
end
def test_renamable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"f"}, "foo").renamable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").renamable?)
end
def test_listable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"l"}, "foo").listable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").listable?)
end
def test_directory_makable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"m"}, "foo").
directory_makable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").
directory_makable?)
end
def test_purgeable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"p"}, "foo").purgeable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").purgeable?)
end
def test_readable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"r"}, "foo").readable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").readable?)
end
def test_writable?
assert_equal(true,
Net::FTP::MLSxEntry.new({"perm"=>"w"}, "foo").writable?)
assert_equal(false,
Net::FTP::MLSxEntry.new({"perm"=>""}, "foo").writable?)
end
end