From 8a277783abde4824ab9f92a083dc6221c5fa4098 Mon Sep 17 00:00:00 2001 From: akira Date: Thu, 10 Jan 2002 08:00:51 +0000 Subject: added uri library (uri-0.9.4) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/uri/ftp.rb | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 lib/uri/ftp.rb (limited to 'lib/uri/ftp.rb') 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 +# You can redistribute it and/or modify it under the same term as Ruby. +# + +require 'uri/generic' + +module URI + +=begin + +== URI::FTP + +=== Super Class + +(()) + +=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 -- cgit v1.2.3