net-ftp-list 2.0.0 → 2.1.1
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/.gitignore +7 -0
- data/README.txt +4 -2
- data/VERSION.yml +3 -2
- data/lib/net/ftp/list/microsoft.rb +4 -0
- data/lib/net/ftp/list/netware.rb +4 -0
- data/lib/net/ftp/list/parser.rb +11 -3
- data/lib/net/ftp/list/unix.rb +4 -1
- data/net-ftp-list.gemspec +53 -0
- data/test/test_net_ftp_list_microsoft.rb +9 -0
- data/test/test_net_ftp_list_netware.rb +10 -0
- data/test/test_net_ftp_list_unix.rb +20 -5
- metadata +6 -4
data/.gitignore
ADDED
data/README.txt
CHANGED
@@ -30,13 +30,15 @@ See the RFC for more guff on LIST and NLST: http://www.ietf.org/rfc/rfc0959.txt
|
|
30
30
|
ftp = Net::FTP.open('somehost.com', 'user', 'pass')
|
31
31
|
ftp.list('/some/path') do |e|
|
32
32
|
entry = Net::FTP::List.parse(e)
|
33
|
-
|
33
|
+
|
34
34
|
# Ignore everything that's not a file (so symlinks, directories and devices etc.)
|
35
35
|
next unless entry.file?
|
36
36
|
|
37
37
|
# If entry isn't a kind_of Net::FTP::List::Unknown then there is a bug in Net::FTP::List if this isn't the
|
38
38
|
# same name as ftp.nlist('/some/path') would have returned.
|
39
|
-
|
39
|
+
# Format the entry showing its file size and modification time
|
40
|
+
puts "#{entry.basename}, #{entry.filesize}, #{entry.mtime}"
|
41
|
+
|
40
42
|
end
|
41
43
|
|
42
44
|
== CREDITS
|
data/VERSION.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'net/ftp/list/parser'
|
2
|
+
require 'date'
|
2
3
|
|
3
4
|
module Net
|
4
5
|
class FTP
|
@@ -33,9 +34,12 @@ module Net
|
|
33
34
|
super(raw)
|
34
35
|
match = REGEXP.match(raw.strip) or raise ParserError
|
35
36
|
|
37
|
+
@mtime = DateTime.strptime("#{match[1]} #{match[2]}", "%m-%d-%y %I:%M%p")
|
38
|
+
|
36
39
|
if match[3] == '<DIR>'
|
37
40
|
@dir = true
|
38
41
|
else
|
42
|
+
@filesize = match[4].to_i
|
39
43
|
@file = true
|
40
44
|
end
|
41
45
|
|
data/lib/net/ftp/list/netware.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'net/ftp/list/parser'
|
2
|
+
require 'time'
|
2
3
|
|
3
4
|
module Net
|
4
5
|
class FTP
|
@@ -33,6 +34,9 @@ module Net
|
|
33
34
|
super(raw)
|
34
35
|
match = REGEXP.match(raw.strip) or raise ParserError
|
35
36
|
|
37
|
+
@mtime = Time.parse(match[5])
|
38
|
+
@filesize = match[4].to_i
|
39
|
+
|
36
40
|
if match[1] == 'd'
|
37
41
|
@dir = true
|
38
42
|
else
|
data/lib/net/ftp/list/parser.rb
CHANGED
@@ -43,17 +43,25 @@ module Net
|
|
43
43
|
|
44
44
|
# Looks like a directory, try CWD.
|
45
45
|
def dir?
|
46
|
-
|
46
|
+
!!(@dir ||= false)
|
47
47
|
end
|
48
48
|
|
49
49
|
# Looks like a file, try RETR.
|
50
50
|
def file?
|
51
|
-
|
51
|
+
!!(@file ||= false)
|
52
52
|
end
|
53
53
|
|
54
54
|
# Looks like a symbolic link.
|
55
55
|
def symlink?
|
56
|
-
|
56
|
+
!!(@symlink ||= false)
|
57
|
+
end
|
58
|
+
|
59
|
+
def mtime
|
60
|
+
@mtime
|
61
|
+
end
|
62
|
+
|
63
|
+
def filesize
|
64
|
+
@filesize
|
57
65
|
end
|
58
66
|
|
59
67
|
class << self
|
data/lib/net/ftp/list/unix.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'time'
|
1
2
|
require 'net/ftp/list/parser'
|
2
3
|
|
3
4
|
module Net
|
@@ -7,7 +8,7 @@ module Net
|
|
7
8
|
# Parse Unix like FTP LIST entries.
|
8
9
|
#
|
9
10
|
# == MATCHES
|
10
|
-
#
|
11
|
+
#
|
11
12
|
# drwxr-xr-x 4 steve group 4096 Dec 10 20:23 etc
|
12
13
|
# -rw-r--r-- 1 root other 531 Jan 29 03:26 README.txt
|
13
14
|
#
|
@@ -46,6 +47,8 @@ module Net
|
|
46
47
|
end
|
47
48
|
|
48
49
|
# TODO: Permissions, users, groups, date/time.
|
50
|
+
@filesize = match[18].to_i
|
51
|
+
@mtime = Time.parse("#{match[19]} #{match[20]}")
|
49
52
|
|
50
53
|
@basename = match[21].strip
|
51
54
|
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{net-ftp-list}
|
8
|
+
s.version = "2.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Stateless Systems"]
|
12
|
+
s.date = %q{2010-07-30}
|
13
|
+
s.email = %q{enquiries@statelesssystems.com}
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
"README.txt"
|
16
|
+
]
|
17
|
+
s.files = [
|
18
|
+
".gitignore",
|
19
|
+
"README.txt",
|
20
|
+
"Rakefile",
|
21
|
+
"VERSION.yml",
|
22
|
+
"lib/net/ftp/list.rb",
|
23
|
+
"lib/net/ftp/list/microsoft.rb",
|
24
|
+
"lib/net/ftp/list/netware.rb",
|
25
|
+
"lib/net/ftp/list/parser.rb",
|
26
|
+
"lib/net/ftp/list/unix.rb",
|
27
|
+
"net-ftp-list.gemspec",
|
28
|
+
"test/test_net_ftp_list_microsoft.rb",
|
29
|
+
"test/test_net_ftp_list_netware.rb",
|
30
|
+
"test/test_net_ftp_list_unix.rb"
|
31
|
+
]
|
32
|
+
s.homepage = %q{http://github.com/stateless-systems/net-ftp-list}
|
33
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
s.rubygems_version = %q{1.3.5}
|
36
|
+
s.summary = %q{Parse FTP LIST command output.}
|
37
|
+
s.test_files = [
|
38
|
+
"test/test_net_ftp_list_microsoft.rb",
|
39
|
+
"test/test_net_ftp_list_unix.rb",
|
40
|
+
"test/test_net_ftp_list_netware.rb"
|
41
|
+
]
|
42
|
+
|
43
|
+
if s.respond_to? :specification_version then
|
44
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
45
|
+
s.specification_version = 3
|
46
|
+
|
47
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
48
|
+
else
|
49
|
+
end
|
50
|
+
else
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
@@ -18,6 +18,11 @@ class TestNetFTPListMicrosoft < Test::Unit::TestCase
|
|
18
18
|
assert_instance_of Net::FTP::List::Unknown, Net::FTP::List.parse("++ bah! ++")
|
19
19
|
end
|
20
20
|
|
21
|
+
def test_ruby_microsoft_mtime
|
22
|
+
assert_equal DateTime.strptime('06-25-07 01:08PM', "%m-%d-%y %I:%M%p"), @dir.mtime
|
23
|
+
assert_equal DateTime.strptime('11-27-07 08:45PM', "%m-%d-%y %I:%M%p"), @file.mtime
|
24
|
+
end
|
25
|
+
|
21
26
|
def test_ruby_microsoft_like_dir
|
22
27
|
assert_equal 'etc', @dir.basename
|
23
28
|
assert @dir.dir?
|
@@ -30,4 +35,8 @@ class TestNetFTPListMicrosoft < Test::Unit::TestCase
|
|
30
35
|
assert !@file.dir?
|
31
36
|
end
|
32
37
|
|
38
|
+
def test_filesize
|
39
|
+
assert @dir.filesize.nil?
|
40
|
+
assert_equal 23437, @file.filesize
|
41
|
+
end
|
33
42
|
end
|
@@ -17,6 +17,11 @@ class TestNetFTPListNetware < Test::Unit::TestCase
|
|
17
17
|
assert_instance_of Net::FTP::List::Unknown, Net::FTP::List.parse("++ bah! ++")
|
18
18
|
end
|
19
19
|
|
20
|
+
def test_ruby_netware_mtime
|
21
|
+
assert_equal @dir.mtime, Time.parse('Jun 27 23:46')
|
22
|
+
assert_equal @file.mtime, Time.parse('Jun 22 06:22')
|
23
|
+
end
|
24
|
+
|
20
25
|
def test_ruby_netware_like_dir
|
21
26
|
assert_equal 'public.www', @dir.basename
|
22
27
|
assert @dir.dir?
|
@@ -29,4 +34,9 @@ class TestNetFTPListNetware < Test::Unit::TestCase
|
|
29
34
|
assert !@file.dir?
|
30
35
|
end
|
31
36
|
|
37
|
+
def test_filesize
|
38
|
+
assert_equal 512, @dir.filesize
|
39
|
+
assert_equal 2767, @file.filesize
|
40
|
+
end
|
41
|
+
|
32
42
|
end
|
@@ -4,11 +4,12 @@ require 'net/ftp/list'
|
|
4
4
|
class TestNetFTPListUnix < Test::Unit::TestCase
|
5
5
|
|
6
6
|
def setup
|
7
|
-
@dir = Net::FTP::List.parse
|
8
|
-
@file = Net::FTP::List.parse
|
9
|
-
@other_dir = Net::FTP::List.parse
|
10
|
-
@spaces = Net::FTP::List.parse
|
11
|
-
@symlink = Net::FTP::List.parse
|
7
|
+
@dir = Net::FTP::List.parse 'drwxr-xr-x 4 user group 4096 Dec 10 20:23 etc'
|
8
|
+
@file = Net::FTP::List.parse '-rw-r--r-- 1 root other 531 Jan 29 03:26 README'
|
9
|
+
@other_dir = Net::FTP::List.parse 'drwxr-xr-x 8 1791 600 4096 Mar 11 07:57 forums'
|
10
|
+
@spaces = Net::FTP::List.parse 'drwxrwxr-x 2 danial danial 72 May 23 12:52 spaces suck'
|
11
|
+
@symlink = Net::FTP::List.parse 'lrwxrwxrwx 1 danial danial 4 Apr 30 15:26 bar -> /etc'
|
12
|
+
@older_date = Net::FTP::List.parse '-rwxrwxrwx 1 owner group 154112 Feb 15 2008 participando.xls'
|
12
13
|
end
|
13
14
|
|
14
15
|
def test_parse_new
|
@@ -23,6 +24,12 @@ class TestNetFTPListUnix < Test::Unit::TestCase
|
|
23
24
|
assert_instance_of Net::FTP::List::Unknown, Net::FTP::List.parse("++ bah! ++")
|
24
25
|
end
|
25
26
|
|
27
|
+
def test_ruby_unix_like_date
|
28
|
+
assert_equal Time.parse("Mar 11 07:57"), @other_dir.mtime
|
29
|
+
assert_equal Time.parse("Apr 30 15:26"), @symlink.mtime
|
30
|
+
assert_equal Time.parse("Feb 15 2008"), @older_date.mtime
|
31
|
+
end
|
32
|
+
|
26
33
|
def test_ruby_unix_like_dir
|
27
34
|
assert_equal 'etc', @dir.basename
|
28
35
|
assert @dir.dir?
|
@@ -52,4 +59,12 @@ class TestNetFTPListUnix < Test::Unit::TestCase
|
|
52
59
|
assert !@file.dir?
|
53
60
|
end
|
54
61
|
|
62
|
+
def test_filesize
|
63
|
+
assert_equal 4096, @dir.filesize
|
64
|
+
assert_equal 531, @file.filesize
|
65
|
+
assert_equal 4096, @other_dir.filesize
|
66
|
+
assert_equal 72, @spaces.filesize
|
67
|
+
assert_equal 4, @symlink.filesize
|
68
|
+
assert_equal 154112, @older_date.filesize
|
69
|
+
end
|
55
70
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ftp-list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stateless Systems
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-07-30 00:00:00 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -22,6 +22,7 @@ extensions: []
|
|
22
22
|
extra_rdoc_files:
|
23
23
|
- README.txt
|
24
24
|
files:
|
25
|
+
- .gitignore
|
25
26
|
- README.txt
|
26
27
|
- Rakefile
|
27
28
|
- VERSION.yml
|
@@ -30,6 +31,7 @@ files:
|
|
30
31
|
- lib/net/ftp/list/netware.rb
|
31
32
|
- lib/net/ftp/list/parser.rb
|
32
33
|
- lib/net/ftp/list/unix.rb
|
34
|
+
- net-ftp-list.gemspec
|
33
35
|
- test/test_net_ftp_list_microsoft.rb
|
34
36
|
- test/test_net_ftp_list_netware.rb
|
35
37
|
- test/test_net_ftp_list_unix.rb
|
@@ -59,9 +61,9 @@ requirements: []
|
|
59
61
|
rubyforge_project:
|
60
62
|
rubygems_version: 1.3.5
|
61
63
|
signing_key:
|
62
|
-
specification_version:
|
64
|
+
specification_version: 3
|
63
65
|
summary: Parse FTP LIST command output.
|
64
66
|
test_files:
|
67
|
+
- test/test_net_ftp_list_microsoft.rb
|
65
68
|
- test/test_net_ftp_list_unix.rb
|
66
69
|
- test/test_net_ftp_list_netware.rb
|
67
|
-
- test/test_net_ftp_list_microsoft.rb
|