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
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
5
5
  require 'rake/testtask'
6
6
 
7
7
  NAME = 'net-ftp-list'
8
- VERS = '0.5'
8
+ VERS = '0.7'
9
9
 
10
10
  CLEAN.include ['**/*.log', '*.gem']
11
11
  CLOBBER.include ['**/*.log']
@@ -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
@@ -3,7 +3,7 @@ require 'net/ftp/list/parser'
3
3
  module Net
4
4
  class FTP
5
5
  module List
6
-
6
+
7
7
  # Parse Unix like FTP LIST entries.
8
8
  #
9
9
  # == MATCHES
@@ -53,4 +53,4 @@ module Net
53
53
 
54
54
  end
55
55
  end
56
- end
56
+ end
@@ -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
@@ -1,7 +1,7 @@
1
1
  require 'test/unit'
2
2
  require 'net/ftp/list'
3
3
 
4
- class TestNetFTPList < Test::Unit::TestCase
4
+ class TestNetFTPListUnix < Test::Unit::TestCase
5
5
 
6
6
  def setup
7
7
  @dir = Net::FTP::List.parse('drwxr-xr-x 4 user group 4096 Dec 10 20:23 etc')
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.5"
7
- date: 2008-01-17 00:00:00 +11:00
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/test_net_ftp_list.rb
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