[前][次][番号順一覧][スレッド一覧]

ruby-changes:39762

From: shugo <ko1@a...>
Date: Sat, 12 Sep 2015 23:10:06 +0900 (JST)
Subject: [ruby-changes:39762] shugo:r51843 (trunk): * lib/net/ftp.rb (file?, directory?, appendable?, creatable?,

shugo	2015-09-12 23:09:45 +0900 (Sat, 12 Sep 2015)

  New Revision: 51843

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51843

  Log:
    * lib/net/ftp.rb (file?, directory?, appendable?, creatable?,
      deletable?, enterable?, renamable?, listable?, directory_makable?,
      purgeable?, readable?, writable?): new methods.

  Added files:
    trunk/test/net/ftp/test_mlsx_entry.rb
  Modified files:
    trunk/ChangeLog
    trunk/lib/net/ftp.rb
    trunk/test/net/ftp/test_buffered_socket.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 51842)
+++ ChangeLog	(revision 51843)
@@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sat Sep 12 23:06:51 2015  Shugo Maeda  <shugo@r...>
+
+	* 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@r...>
 
 	* lib/net/ftp.rb (FACT_PARSERS): support system dependent facts
Index: lib/net/ftp.rb
===================================================================
--- lib/net/ftp.rb	(revision 51842)
+++ lib/net/ftp.rb	(revision 51843)
@@ -768,7 +768,113 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/ftp.rb#L768
     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 }
Index: test/net/ftp/test_mlsx_entry.rb
===================================================================
--- test/net/ftp/test_mlsx_entry.rb	(revision 0)
+++ test/net/ftp/test_mlsx_entry.rb	(revision 51843)
@@ -0,0 +1,96 @@ https://github.com/ruby/ruby/blob/trunk/test/net/ftp/test_mlsx_entry.rb#L1
+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
Index: test/net/ftp/test_buffered_socket.rb
===================================================================
--- test/net/ftp/test_buffered_socket.rb	(revision 51842)
+++ test/net/ftp/test_buffered_socket.rb	(revision 51843)
@@ -3,7 +3,7 @@ require "test/unit" https://github.com/ruby/ruby/blob/trunk/test/net/ftp/test_buffered_socket.rb#L3
 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)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]