aboutsummaryrefslogtreecommitdiffstats
path: root/lib/uri/ftp.rb
diff options
context:
space:
mode:
authorakira <akira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-01-10 08:00:51 +0000
committerakira <akira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-01-10 08:00:51 +0000
commit8a277783abde4824ab9f92a083dc6221c5fa4098 (patch)
tree67820073efcecd2ab006fff86b72c4f5020a7682 /lib/uri/ftp.rb
parentd92e9de3b862af630aea7583bd4d45709c5d9085 (diff)
downloadruby-8a277783abde4824ab9f92a083dc6221c5fa4098.tar.gz
added uri library (uri-0.9.4)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/uri/ftp.rb')
-rw-r--r--lib/uri/ftp.rb149
1 files changed, 149 insertions, 0 deletions
diff --git a/lib/uri/ftp.rb b/lib/uri/ftp.rb
new file mode 100644
index 0000000000..391cd550e9
--- /dev/null
+++ b/lib/uri/ftp.rb
@@ -0,0 +1,149 @@
+#
+# $Id$
+#
+# Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
+# You can redistribute it and/or modify it under the same term as Ruby.
+#
+
+require 'uri/generic'
+
+module URI
+
+=begin
+
+== URI::FTP
+
+=== Super Class
+
+((<URI::Generic>))
+
+=end
+
+ # RFC1738 section 3.2.
+ class FTP < Generic
+ DEFAULT_PORT = 21
+
+ COMPONENT = [
+ :scheme,
+ :userinfo, :host, :port,
+ :path, :typecode
+ ].freeze
+
+ TYPECODE = ['a', 'i', 'd'].freeze
+ TYPECODE_PREFIX = ';type='.freeze
+
+=begin
+
+=== Class Methods
+
+--- URI::FTP::build
+ Create a new URI::FTP object from components of URI::FTP with
+ check. It is scheme, userinfo, host, port, path and typecode. It
+ provided by an Array or a Hash. typecode is "a", "i" or "d".
+
+--- URI::FTP::new
+ Create a new URI::FTP object from ``generic'' components with no
+ check.
+
+=end
+
+ def self.new2(user, password, host, port, path,
+ typecode = nil, arg_check = true)
+ typecode = nil if typecode.size == 0
+ if typecode && !TYPECODE.include?(typecode)
+ raise ArgumentError,
+ "bad typecode is specified: #{typecode}"
+ end
+
+ # do escape
+
+ self.new('ftp',
+ [user, password],
+ host, port, nil,
+ typecode ? path + TYPECODE_PREFIX + typecode : path,
+ nil, nil, nil, arg_check)
+ end
+
+ def self.build(args)
+ tmp = Util::make_components_hash(self, args)
+
+ if tmp[:typecode]
+ if tmp[:typecode].size == 1
+ tmp[:typecode] = TYPECODE_PREFIX + tmp[:typecode]
+ end
+ tmp[:path] << tmp[:typecode]
+ end
+
+ return super(tmp)
+ end
+
+ def initialize(*arg)
+ super(*arg)
+ @typecode = nil
+ tmp = @path.index(TYPECODE_PREFIX)
+ if tmp
+ typecode = @path[tmp + TYPECODE_PREFIX.size..-1]
+ self.set_path(@path[0..tmp - 1])
+
+ if arg[-1]
+ self.typecode = typecode
+ else
+ self.set_typecode(typecode)
+ end
+ end
+ end
+ attr_reader :typecode
+
+ #
+ # methods for typecode
+ #
+
+ def check_typecode(v)
+ if TYPECODE.include?(v)
+ return true
+ else
+ raise InvalidComponentError,
+ "bad typecode(expected #{TYPECODE.join(', ')}): #{v}"
+ end
+ end
+ private :check_typecode
+
+ def set_typecode(v)
+ @typecode = v
+ end
+ protected :set_typecode
+
+ def typecode=(typecode)
+ check_typecode(typecode)
+ set_typecode(typecode)
+ end
+
+=begin
+=end
+ def merge(oth)
+ tmp = super(oth)
+ if self != tmp
+ tmp.set_typecode(oth.typecode)
+ end
+
+ return tmp
+ end
+
+=begin
+=end
+ def to_str
+ save_path = nil
+ if @typecode
+ save_path = @path
+ @path = @path + TYPECODE_PREFIX + @typecode
+ end
+ str = super
+ if @typecode
+ @path = save_path
+ end
+
+ return str
+ end
+ end # FTP
+ @@schemes['FTP'] = FTP
+end # URI