Class: URI::FTP
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: 
          self,
          Generic
         | |
| Instance Chain: | |
| Inherits: | URI::Generic 
 | 
| Defined in: | lib/uri/ftp.rb | 
Overview
FTP URI syntax is defined by RFC1738 section 3.2.
This class will be redesigned because of difference of implementations; the structure of its path. draft-hoffman-ftp-uri-04 is a draft but it is a good summary about the de facto spec. tools.ietf.org/html/draft-hoffman-ftp-uri-04
Constant Summary
- 
    COMPONENT =
    # File 'lib/uri/ftp.rb', line 29An Array of the available components for FTP[ :scheme, :userinfo, :host, :port, :path, :typecode ].freeze 
- 
    DEFAULT_PORT =
    # File 'lib/uri/ftp.rb', line 24A Default port of 21 for FTP21
- 
    TYPECODE =
    # File 'lib/uri/ftp.rb', line 42Typecode is “a”, “i” or “d”. - 
“a” indicates a text file (the FTPcommand was ASCII)
- 
“i” indicates a binary file (FTP command IMAGE) 
- 
“d” indicates the contents of a directory should be displayed 
 ['a', 'i', 'd'].freeze 
- 
- 
    TYPECODE_PREFIX =
    # File 'lib/uri/ftp.rb', line 46Typecode prefix ';type='';type='.freeze 
::URI - Included
DEFAULT_PARSER, Parser, REGEXP, RFC3986_PARSER
Generic - Inherited
Class Method Summary
- 
    
      .build(args)  
    
    Description. 
- 
    
      .new(scheme, userinfo, host, port, registry, path, opaque, query, fragment, parser = nil, arg_check = false)  ⇒ FTP 
    
    constructor
    Description. 
- .new2(user, password, host, port, path, typecode = nil, arg_check = true)
Generic - Inherited
| .build | Synopsis. | 
| .build2 | Synopsis. | 
| .component | Components of the ::URI in the order. | 
| .default_port | Returns default port. | 
| .new | Args. | 
Instance Attribute Summary
- 
    
      #typecode  
    
    rw
    typecode accessor. 
- 
    
      #typecode=(typecode)  
    
    rw
    Args. 
Generic - Inherited
| #fragment | returns the fragment component of the ::URI. | 
| #fragment= | check the fragment  | 
| #host | returns the host component of the ::URI. | 
| #host= | Args. | 
| #hostname | extract the host part of the ::URI and unwrap brackets for IPv6 addresses. | 
| #hostname= | set the host part of the ::URI as the argument with brackets for IPv6 addresses. | 
| #opaque | returns the opaque part of the ::URI. | 
| #opaque= | Args. | 
| #password | returns the password component. | 
| #password= | Args. | 
| #path | returns the path component of the ::URI. | 
| #path= | Args. | 
| #port | returns the port component of the ::URI. | 
| #port= | Args. | 
| #query | returns the query component of the ::URI. | 
| #query= | Args. | 
| #registry=, | |
| #scheme | returns the scheme component of the ::URI. | 
| #scheme= | Args. | 
| #user | returns the user component. | 
| #user= | Args. | 
| #userinfo | returns the userinfo, either as 'user' or 'user:password'. | 
| #userinfo= | Sets userinfo, argument is string like 'name:pass'. | 
| #absolute | Alias for Generic#absolute?. | 
| #hierarchical? | Checks if ::URI has a path. | 
| #relative? | Checks if ::URI is relative. | 
Instance Method Summary
- 
    
      #path  
    
    Returns the path from an FTPURI.
- 
    
      #to_s  
    
    Returns a String representation of the FTP
- 
    
      #set_path(v)  
    
    protected
    Private setter for the path of the FTP
- 
    
      #set_typecode(v)  
    
    protected
    Private setter for the typecode v
- 
    
      #check_typecode(v)  
    
    private
    validates typecode v, returns atrueorfalseboolean.
Generic - Inherited
| #+ | Alias for Generic#merge. | 
| #- | Alias for Generic#route_from. | 
| #== | Compares to URI's. | 
| #absolute? | Checks if ::URI is an absolute one. | 
| #coerce | Args. | 
| #component | Components of the ::URI in the order. | 
| #default_port | Returns default port. | 
| #eql?, | |
| #find_proxy | returns a proxy ::URI. | 
| #hash, #inspect, | |
| #merge | Args. | 
| #merge! | Args. | 
| #normalize | Returns normalized ::URI. | 
| #normalize! | Destructive version of  | 
| #parser | returns the parser to be used. | 
| #route_from | Args. | 
| #route_to | Args. | 
| #select | Args. | 
| #to_s | Constructs String from ::URI. | 
| #component_ary | returns an Array of the components defined from the COMPONENT Array. | 
| #set_host | protected setter for the host component  | 
| #set_opaque | protected setter for the opaque component  | 
| #set_password | protected setter for the password component  | 
| #set_path | protected setter for the path component  | 
| #set_port | protected setter for the port component  | 
| #set_scheme | protected setter for the scheme component  | 
| #set_user | protected setter for the user component  | 
| #set_userinfo | protect setter for the  | 
| #check_host | check the host  | 
| #check_opaque | check the opaque  | 
| #check_password | check the password  | 
| #check_path | check the path  | 
| #check_port | check the port  | 
| #check_scheme | check the scheme  | 
| #check_user | check the user  | 
| #check_userinfo | check the  | 
| #escape_userpass | escapes 'user:password'  | 
| #merge0 | return base and rel. | 
| #merge_path | Merges a base path  | 
| #replace! | replace self by other ::URI object. | 
| #route_from0, | |
| #split_path | returns an Array of the path split on '/'. | 
| #split_userinfo | returns the userinfo  | 
Constructor Details
    .new(scheme, userinfo, host, port, registry, path, opaque, query, fragment, parser = nil, arg_check = false)  ⇒ FTP 
  
Description
Creates a new FTP object from generic URL components with no syntax checking.
Unlike build(), this method does not escape the path component as required by RFC1738; instead it is treated as per RFC2396.
Arguments are scheme, userinfo, host, port, registry, #path, opaque, query and fragment, in that order.
# File 'lib/uri/ftp.rb', line 132
def initialize(scheme, userinfo, host, port, registry, path, opaque, query, fragment, parser = nil, arg_check = false) raise InvalidURIError unless path path = path.sub(/^\//,'') path.sub!(/^%2F/,'/') super(scheme, userinfo, host, port, registry, path, opaque, query, fragment, parser, arg_check) @typecode = nil if tmp = @path.index(TYPECODE_PREFIX) typecode = @path[tmp + TYPECODE_PREFIX.size..-1] @path = @path[0..tmp - 1] if arg_check self.typecode = typecode else self.set_typecode(typecode) end end end
Class Method Details
.build(args)
Description
Creates a new FTP object from components, with syntax checking.
The components accepted are userinfo, host, port, #path and #typecode.
The components should be provided either as an Array, or as a Hash with keys formed by preceding the component names with a colon.
If an Array is used, the components must be passed in the order
- userinfo, host, port, path, typecode
- 
If the path supplied is absolute, it will be escaped in order to make it absolute in the ::URI. Examples: require 'uri' uri = URI::FTP.build(['user:password', 'ftp.example.com', nil, '/path/file.> zip', 'i']) puts uri.to_s -> ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=a uri2 = URI::FTP.build({:host => 'ftp.example.com', :path => 'ruby/src'}) puts uri2.to_s -> ftp://ftp.example.com/ruby/src
# File 'lib/uri/ftp.rb', line 95
def self.build(args) # Fix the incoming path to be generic URL syntax # FTP path -> URL path # foo/bar /foo/bar # /foo/bar /%2Ffoo/bar # if args.kind_of?(Array) args[3] = '/' + args[3].sub(/^\//, '%2F') else args[:path] = '/' + args[:path].sub(/^\//, '%2F') end 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
.new2(user, password, host, port, path, typecode = nil, arg_check = true)
[ GitHub ]# File 'lib/uri/ftp.rb', line 48
def self.new2(user, password, host, port, path, typecode = nil, arg_check = true) # :nodoc: # Do not use this method! Not tested. [Bug #7301] # This methods remains just for compatibility, # Keep it undocumented until the active maintainer is assigned. 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
Instance Attribute Details
#typecode (rw)
typecode accessor
see COMPONENT
# File 'lib/uri/ftp.rb', line 160
attr_reader :typecode
#typecode=(typecode) (rw)
Args
- v
- 
String 
Description
public setter for the typecode v. (with validation)
see also #check_typecode
Usage
require 'uri'
uri = URI.parse("ftp://john@ftp.example.com/my_file.img")
#=> #<URI::FTP:0x00000000923650 URL:ftp://john@ftp.example.com/my_file.img>
uri.typecode = "i"
# =>  "i"
uri
#=> #<URI::FTP:0x00000000923650 URL:ftp://john@ftp.example.com/my_file.img;type=i># File 'lib/uri/ftp.rb', line 208
def typecode=(typecode) check_typecode(typecode) set_typecode(typecode) typecode end
Instance Method Details
#check_typecode(v) (private)
validates typecode v, returns a true or false boolean
# File 'lib/uri/ftp.rb', line 165
def check_typecode(v) if TYPECODE.include?(v) return true else raise InvalidComponentError, "bad typecode(expected #{TYPECODE.join(', ')}): #{v}" end end
#path
Returns the path from an FTP URI.
RFC 1738 specifically states that the path for an FTP URI does not include the / which separates the ::URI path from the ::URI host. Example:
ftp://ftp.example.com/pub/rubyThe above ::URI indicates that the client should connect to ftp.example.com then cd pub/ruby from the initial login directory.
If you want to cd to an absolute directory, you must include an escaped / (%2F) in the path. Example:
ftp://ftp.example.com/%2Fpub/rubyThis method will then return “/pub/ruby”
# File 'lib/uri/ftp.rb', line 240
def path return @path.sub(/^\//,'').sub(/^%2F/,'/') end
#set_path(v) (protected)
Private setter for the path of the FTP
# File 'lib/uri/ftp.rb', line 245
def set_path(v) super("/" + v.sub(/^\//, "%2F")) end
#set_typecode(v) (protected)
Private setter for the typecode v
see also #typecode=
# File 'lib/uri/ftp.rb', line 179
def set_typecode(v) @typecode = v end
#to_s
Returns a String representation of the FTP
# File 'lib/uri/ftp.rb', line 251
def to_s 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