net-ftp-list 0.5 → 0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
    
        data/Rakefile
    CHANGED
    
    
    
        data/lib/net/ftp/list.rb
    CHANGED
    
    | 
         @@ -4,6 +4,7 @@ require 'net/ftp/list/parser' 
     | 
|
| 
       4 
4 
     | 
    
         
             
            # The order here is important for the time being. Corse grained parsers should appear before specializations because
         
     | 
| 
       5 
5 
     | 
    
         
             
            # the whole thing is searched in reverse order.
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'net/ftp/list/unix'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'net/ftp/list/microsoft'
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
            module Net #:nodoc:
         
     | 
| 
       9 
10 
     | 
    
         
             
              class FTP #:nodoc:
         
     | 
| 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'net/ftp/list/parser'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Net
         
     | 
| 
      
 4 
     | 
    
         
            +
              class FTP
         
     | 
| 
      
 5 
     | 
    
         
            +
                module List
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  # Parse M$ like FTP LIST entries.
         
     | 
| 
      
 8 
     | 
    
         
            +
                  #
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # == MATCHES
         
     | 
| 
      
 10 
     | 
    
         
            +
                  #
         
     | 
| 
      
 11 
     | 
    
         
            +
                  #   06-25-07  01:08PM       <DIR>          etc
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #   11-27-07  08:45PM                23437 README.TXT
         
     | 
| 
      
 13 
     | 
    
         
            +
                  #
         
     | 
| 
      
 14 
     | 
    
         
            +
                  # == SYNOPSIS
         
     | 
| 
      
 15 
     | 
    
         
            +
                  #
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #   entry = Net::FTP::List::Microsoft.new('06-25-07  01:08PM       <DIR>          etc')
         
     | 
| 
      
 17 
     | 
    
         
            +
                  #   entry.dir?     # => true
         
     | 
| 
      
 18 
     | 
    
         
            +
                  #   entry.basename # => 'etc'
         
     | 
| 
      
 19 
     | 
    
         
            +
                  class Microsoft < Parser
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    # Stolen straight from the ASF's commons Java FTP LIST parser library.
         
     | 
| 
      
 22 
     | 
    
         
            +
                    # http://svn.apache.org/repos/asf/commons/proper/net/trunk/src/java/org/apache/commons/net/ftp/
         
     | 
| 
      
 23 
     | 
    
         
            +
                    REGEXP = %r{
         
     | 
| 
      
 24 
     | 
    
         
            +
                      ^\s*
         
     | 
| 
      
 25 
     | 
    
         
            +
                      (\S+)\s+(\S+)\s+
         
     | 
| 
      
 26 
     | 
    
         
            +
                      (?:(<DIR>)|([0-9]+))\s+
         
     | 
| 
      
 27 
     | 
    
         
            +
                      (\S.*)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      \s*$
         
     | 
| 
      
 29 
     | 
    
         
            +
                    }x
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                    # Parse a M$ like FTP LIST entries.
         
     | 
| 
      
 32 
     | 
    
         
            +
                    def initialize(raw)
         
     | 
| 
      
 33 
     | 
    
         
            +
                      super(raw)
         
     | 
| 
      
 34 
     | 
    
         
            +
                      match = REGEXP.match(raw.strip) or raise ParserError
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                      if match[3] == '<DIR>'
         
     | 
| 
      
 37 
     | 
    
         
            +
                        @dir = true
         
     | 
| 
      
 38 
     | 
    
         
            +
                      else
         
     | 
| 
      
 39 
     | 
    
         
            +
                        @file = true
         
     | 
| 
      
 40 
     | 
    
         
            +
                      end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                      # TODO: Permissions, users, groups, date/time.
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                      @basename = match[5]
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/net/ftp/list/unix.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'net/ftp/list'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class TestNetFTPListMicrosoft < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 7 
     | 
    
         
            +
                #                             DATE      TIME          DIR      SIZE  NAME
         
     | 
| 
      
 8 
     | 
    
         
            +
                @dir  = Net::FTP::List.parse('06-25-07  01:08PM       <DIR>          etc')
         
     | 
| 
      
 9 
     | 
    
         
            +
                @file = Net::FTP::List.parse('11-27-07  08:45PM                23437 README.TXT')
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def test_parse_new
         
     | 
| 
      
 13 
     | 
    
         
            +
                assert_instance_of Net::FTP::List::Microsoft, @dir, 'LIST M$ directory'
         
     | 
| 
      
 14 
     | 
    
         
            +
                assert_instance_of Net::FTP::List::Microsoft, @file, 'LIST M$ file'
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def test_rubbish_lines
         
     | 
| 
      
 18 
     | 
    
         
            +
                assert_instance_of Net::FTP::List::Unknown, Net::FTP::List.parse("++ bah! ++")
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              def test_ruby_microsoft_like_dir
         
     | 
| 
      
 22 
     | 
    
         
            +
                assert_equal 'etc', @dir.basename
         
     | 
| 
      
 23 
     | 
    
         
            +
                assert @dir.dir?
         
     | 
| 
      
 24 
     | 
    
         
            +
                assert !@dir.file?
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def test_ruby_microsoft_like_file
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert_equal 'README.TXT', @file.basename
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert @file.file?
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert !@file.dir?
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -3,8 +3,8 @@ rubygems_version: 0.9.4 
     | 
|
| 
       3 
3 
     | 
    
         
             
            specification_version: 1
         
     | 
| 
       4 
4 
     | 
    
         
             
            name: net-ftp-list
         
     | 
| 
       5 
5 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       6 
     | 
    
         
            -
              version: "0. 
     | 
| 
       7 
     | 
    
         
            -
            date: 2008- 
     | 
| 
      
 6 
     | 
    
         
            +
              version: "0.7"
         
     | 
| 
      
 7 
     | 
    
         
            +
            date: 2008-04-15 00:00:00 +10:00
         
     | 
| 
       8 
8 
     | 
    
         
             
            summary: Parse FTP LIST command output.
         
     | 
| 
       9 
9 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -30,10 +30,12 @@ authors: 
     | 
|
| 
       30 
30 
     | 
    
         
             
            - Shane Hanna
         
     | 
| 
       31 
31 
     | 
    
         
             
            files: 
         
     | 
| 
       32 
32 
     | 
    
         
             
            - Rakefile
         
     | 
| 
      
 33 
     | 
    
         
            +
            - lib/net/ftp/list/microsoft.rb
         
     | 
| 
       33 
34 
     | 
    
         
             
            - lib/net/ftp/list/parser.rb
         
     | 
| 
       34 
35 
     | 
    
         
             
            - lib/net/ftp/list/unix.rb
         
     | 
| 
       35 
36 
     | 
    
         
             
            - lib/net/ftp/list.rb
         
     | 
| 
       36 
     | 
    
         
            -
            - test/ 
     | 
| 
      
 37 
     | 
    
         
            +
            - test/test_net_ftp_list_microsoft.rb
         
     | 
| 
      
 38 
     | 
    
         
            +
            - test/test_net_ftp_list_unix.rb
         
     | 
| 
       37 
39 
     | 
    
         
             
            - README.txt
         
     | 
| 
       38 
40 
     | 
    
         
             
            test_files: []
         
     | 
| 
       39 
41 
     | 
    
         |