Method: Bundler::URI::FTP.build

Defined in:
lib/bundler/vendor/uri/lib/uri/ftp.rb

.build(args) ⇒ Object

Description

Creates a new Bundler::URI::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 Bundler::URI.

Examples:

require 'bundler/vendor/uri/lib/uri'

uri1 = Bundler::URI::FTP.build(['user:password', 'ftp.example.com', nil,
  '/path/file.zip', 'i'])
uri1.to_s  # => "ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=i"

uri2 = Bundler::URI::FTP.build({:host => 'ftp.example.com',
  :path => 'ruby/src'})
uri2.to_s  # => "ftp://ftp.example.com/ruby/src"

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/bundler/vendor/uri/lib/uri/ftp.rb', line 96

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