mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Prepare to release bundler-2.1.0
This commit is contained in:
		
							parent
							
								
									e2b192f7d5
								
							
						
					
					
						commit
						38002a8adb
					
				
				
				Notes:
				
					git
				
				2019-12-15 16:41:38 +09:00 
				
			
			
			
		
		
					 146 changed files with 4685 additions and 459 deletions
				
			
		| 
						 | 
				
			
			@ -50,7 +50,6 @@ module Bundler
 | 
			
		|||
  autoload :FeatureFlag,            File.expand_path("bundler/feature_flag", __dir__)
 | 
			
		||||
  autoload :GemHelper,              File.expand_path("bundler/gem_helper", __dir__)
 | 
			
		||||
  autoload :GemHelpers,             File.expand_path("bundler/gem_helpers", __dir__)
 | 
			
		||||
  autoload :GemRemoteFetcher,       File.expand_path("bundler/gem_remote_fetcher", __dir__)
 | 
			
		||||
  autoload :GemVersionPromoter,     File.expand_path("bundler/gem_version_promoter", __dir__)
 | 
			
		||||
  autoload :Graph,                  File.expand_path("bundler/graph", __dir__)
 | 
			
		||||
  autoload :Index,                  File.expand_path("bundler/index", __dir__)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -783,7 +783,7 @@ module Bundler
 | 
			
		|||
      return unless SharedHelpers.md5_available?
 | 
			
		||||
 | 
			
		||||
      latest = Fetcher::CompactIndex.
 | 
			
		||||
               new(nil, Source::Rubygems::Remote.new(URI("https://rubygems.org")), nil).
 | 
			
		||||
               new(nil, Source::Rubygems::Remote.new(Bundler::URI("https://rubygems.org")), nil).
 | 
			
		||||
               send(:compact_index_client).
 | 
			
		||||
               instance_variable_get(:@cache).
 | 
			
		||||
               dependencies("bundler").
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ module Bundler
 | 
			
		|||
          ["config", "get", ARGV[1]]
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      SharedHelpers.major_deprecation 2,
 | 
			
		||||
      SharedHelpers.major_deprecation 3,
 | 
			
		||||
        "Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle #{new_args.join(" ")}` instead."
 | 
			
		||||
 | 
			
		||||
      Base.new(options, name, value, self).run
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,12 +25,12 @@ module Bundler
 | 
			
		|||
      SharedHelpers.set_bundle_environment
 | 
			
		||||
      if bin_path = Bundler.which(cmd)
 | 
			
		||||
        if !Bundler.settings[:disable_exec_load] && ruby_shebang?(bin_path)
 | 
			
		||||
          return kernel_load(bin_path, *args)
 | 
			
		||||
          return with_verbose_rubygems { kernel_load(bin_path, *args) }
 | 
			
		||||
        end
 | 
			
		||||
        kernel_exec(bin_path, *args)
 | 
			
		||||
        with_verbose_rubygems { kernel_exec(bin_path, *args) }
 | 
			
		||||
      else
 | 
			
		||||
        # exec using the given command
 | 
			
		||||
        kernel_exec(cmd, *args)
 | 
			
		||||
        with_verbose_rubygems { kernel_exec(cmd, *args) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -89,5 +89,14 @@ module Bundler
 | 
			
		|||
      first_line = File.open(file, "rb") {|f| f.read(possibilities.map(&:size).max) }
 | 
			
		||||
      possibilities.any? {|shebang| first_line.start_with?(shebang) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def with_verbose_rubygems
 | 
			
		||||
      old_ui = Gem::DefaultUserInteraction.ui
 | 
			
		||||
      Gem::DefaultUserInteraction.ui = nil
 | 
			
		||||
 | 
			
		||||
      yield
 | 
			
		||||
    ensure
 | 
			
		||||
      Gem::DefaultUserInteraction.ui = old_ui
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ module Bundler
 | 
			
		|||
        if Bundler.feature_flag.update_requires_all_flag?
 | 
			
		||||
          raise InvalidOption, "To update everything, pass the `--all` flag."
 | 
			
		||||
        end
 | 
			
		||||
        SharedHelpers.major_deprecation 2, "Pass --all to `bundle update` to update everything"
 | 
			
		||||
        SharedHelpers.major_deprecation 3, "Pass --all to `bundle update` to update everything"
 | 
			
		||||
      elsif !full_update && options[:all]
 | 
			
		||||
        raise InvalidOption, "Cannot specify --all along with specific options."
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ module Bundler
 | 
			
		|||
    settings_flag(:specific_platform) { bundler_3_mode? }
 | 
			
		||||
    settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
 | 
			
		||||
    settings_flag(:unlock_source_unlocks_spec) { !bundler_3_mode? }
 | 
			
		||||
    settings_flag(:update_requires_all_flag) { bundler_3_mode? }
 | 
			
		||||
    settings_flag(:update_requires_all_flag) { bundler_4_mode? }
 | 
			
		||||
    settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_3_mode? }
 | 
			
		||||
 | 
			
		||||
    settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ module Bundler
 | 
			
		|||
      spec -= [nil, "ruby", ""]
 | 
			
		||||
      spec_file_name = "#{spec.join "-"}.gemspec"
 | 
			
		||||
 | 
			
		||||
      uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
 | 
			
		||||
      uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
 | 
			
		||||
      if uri.scheme == "file"
 | 
			
		||||
        path = Bundler.rubygems.correct_for_windows_path(uri.path)
 | 
			
		||||
        Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
 | 
			
		||||
| 
						 | 
				
			
			@ -244,7 +244,7 @@ module Bundler
 | 
			
		|||
 | 
			
		||||
        con = PersistentHTTP.new :name => "bundler", :proxy => :ENV
 | 
			
		||||
        if gem_proxy = Bundler.rubygems.configuration[:http_proxy]
 | 
			
		||||
          con.proxy = URI.parse(gem_proxy) if gem_proxy != :no_proxy
 | 
			
		||||
          con.proxy = Bundler::URI.parse(gem_proxy) if gem_proxy != :no_proxy
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        if remote_uri.scheme == "https"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@ module Bundler
 | 
			
		|||
        when Net::HTTPSuccess, Net::HTTPNotModified
 | 
			
		||||
          response
 | 
			
		||||
        when Net::HTTPRedirection
 | 
			
		||||
          new_uri = URI.parse(response["location"])
 | 
			
		||||
          new_uri = Bundler::URI.parse(response["location"])
 | 
			
		||||
          if new_uri.host == uri.host
 | 
			
		||||
            new_uri.user = uri.user
 | 
			
		||||
            new_uri.password = uri.password
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ module Bundler
 | 
			
		|||
        spec -= [nil, "ruby", ""]
 | 
			
		||||
        spec_file_name = "#{spec.join "-"}.gemspec"
 | 
			
		||||
 | 
			
		||||
        uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
 | 
			
		||||
        uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
 | 
			
		||||
        if uri.scheme == "file"
 | 
			
		||||
          path = Bundler.rubygems.correct_for_windows_path(uri.path)
 | 
			
		||||
          Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "cgi"
 | 
			
		||||
require_relative "vendored_thor"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
| 
						 | 
				
			
			@ -114,6 +113,7 @@ module Bundler
 | 
			
		|||
    def issues_url(exception)
 | 
			
		||||
      message = exception.message.lines.first.tr(":", " ").chomp
 | 
			
		||||
      message = message.split("-").first if exception.is_a?(Errno)
 | 
			
		||||
      require "cgi"
 | 
			
		||||
      "https://github.com/bundler/bundler/search?q=" \
 | 
			
		||||
        "#{CGI.escape(message)}&type=Issues"
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,8 +73,7 @@ module Bundler
 | 
			
		|||
 | 
			
		||||
    def build_gem
 | 
			
		||||
      file_name = nil
 | 
			
		||||
      gem = ENV["GEM_COMMAND"] ? ENV["GEM_COMMAND"] : "gem"
 | 
			
		||||
      sh("#{gem} build -V #{spec_path}".shellsplit) do
 | 
			
		||||
      sh("#{gem_command} build -V #{spec_path}".shellsplit) do
 | 
			
		||||
        file_name = File.basename(built_gem_path)
 | 
			
		||||
        SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) }
 | 
			
		||||
        FileUtils.mv(built_gem_path, "pkg")
 | 
			
		||||
| 
						 | 
				
			
			@ -85,11 +84,10 @@ module Bundler
 | 
			
		|||
 | 
			
		||||
    def install_gem(built_gem_path = nil, local = false)
 | 
			
		||||
      built_gem_path ||= build_gem
 | 
			
		||||
      gem = ENV["GEM_COMMAND"] ? ENV["GEM_COMMAND"] : "gem"
 | 
			
		||||
      cmd = "#{gem} install #{built_gem_path}"
 | 
			
		||||
      cmd = "#{gem_command} install #{built_gem_path}"
 | 
			
		||||
      cmd += " --local" if local
 | 
			
		||||
      out, status = sh_with_status(cmd.shellsplit)
 | 
			
		||||
      unless status.success? && out[/Successfully installed/]
 | 
			
		||||
      _, status = sh_with_status(cmd.shellsplit)
 | 
			
		||||
      unless status.success?
 | 
			
		||||
        raise "Couldn't install gem, run `gem install #{built_gem_path}' for more detailed output"
 | 
			
		||||
      end
 | 
			
		||||
      Bundler.ui.confirm "#{name} (#{version}) installed."
 | 
			
		||||
| 
						 | 
				
			
			@ -98,13 +96,13 @@ module Bundler
 | 
			
		|||
  protected
 | 
			
		||||
 | 
			
		||||
    def rubygem_push(path)
 | 
			
		||||
      gem_command = %W[gem push #{path}]
 | 
			
		||||
      gem_command << "--key" << gem_key if gem_key
 | 
			
		||||
      gem_command << "--host" << allowed_push_host if allowed_push_host
 | 
			
		||||
      cmd = %W[#{gem_command} push #{path}]
 | 
			
		||||
      cmd << "--key" << gem_key if gem_key
 | 
			
		||||
      cmd << "--host" << allowed_push_host if allowed_push_host
 | 
			
		||||
      unless allowed_push_host || Bundler.user_home.join(".gem/credentials").file?
 | 
			
		||||
        raise "Your rubygems.org credentials aren't set. Run `gem push` to set them."
 | 
			
		||||
      end
 | 
			
		||||
      sh_with_input(gem_command)
 | 
			
		||||
      sh_with_input(cmd)
 | 
			
		||||
      Bundler.ui.confirm "Pushed #{name} #{version} to #{gem_push_host}"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -211,5 +209,9 @@ module Bundler
 | 
			
		|||
    def gem_push?
 | 
			
		||||
      !%w[n no nil false off 0].include?(ENV["gem_push"].to_s.downcase)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def gem_command
 | 
			
		||||
      ENV["GEM_COMMAND"] ? ENV["GEM_COMMAND"] : "gem"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,12 +37,14 @@ def gemfile(install = false, options = {}, &gemfile)
 | 
			
		|||
  ui.level = "silent" if opts.delete(:quiet)
 | 
			
		||||
  raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
 | 
			
		||||
 | 
			
		||||
  begin
 | 
			
		||||
    old_root = Bundler.method(:root)
 | 
			
		||||
    bundler_module = class << Bundler; self; end
 | 
			
		||||
    bundler_module.send(:remove_method, :root)
 | 
			
		||||
    def Bundler.root
 | 
			
		||||
      Bundler::SharedHelpers.pwd.expand_path
 | 
			
		||||
    end
 | 
			
		||||
    old_gemfile = ENV["BUNDLE_GEMFILE"]
 | 
			
		||||
    Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"
 | 
			
		||||
 | 
			
		||||
    Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins?
 | 
			
		||||
| 
						 | 
				
			
			@ -54,12 +56,8 @@ def gemfile(install = false, options = {}, &gemfile)
 | 
			
		|||
      def definition.lock(*); end
 | 
			
		||||
      definition.validate_runtime!
 | 
			
		||||
 | 
			
		||||
    missing_specs = proc do
 | 
			
		||||
      definition.missing_specs?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
      Bundler.ui = install ? ui : Bundler::UI::Silent.new
 | 
			
		||||
    if install || missing_specs.call
 | 
			
		||||
      if install || definition.missing_specs?
 | 
			
		||||
        Bundler.settings.temporary(:inline => true, :disable_platform_warnings => true) do
 | 
			
		||||
          installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
 | 
			
		||||
          installer.post_install_messages.each do |name, message|
 | 
			
		||||
| 
						 | 
				
			
			@ -71,9 +69,16 @@ def gemfile(install = false, options = {}, &gemfile)
 | 
			
		|||
      runtime = Bundler::Runtime.new(nil, definition)
 | 
			
		||||
      runtime.setup.require
 | 
			
		||||
    end
 | 
			
		||||
ensure
 | 
			
		||||
  ensure
 | 
			
		||||
    if bundler_module
 | 
			
		||||
      bundler_module.send(:remove_method, :root)
 | 
			
		||||
      bundler_module.send(:define_method, :root, old_root)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if old_gemfile
 | 
			
		||||
      ENV["BUNDLE_GEMFILE"] = old_gemfile
 | 
			
		||||
    else
 | 
			
		||||
      ENV.delete("BUNDLE_GEMFILE")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "uri"
 | 
			
		||||
require_relative "match_platform"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ module Bundler
 | 
			
		|||
 | 
			
		||||
      def fetch_valid_mirror_for(uri)
 | 
			
		||||
        downcased = uri.to_s.downcase
 | 
			
		||||
        mirror = @mirrors[downcased] || @mirrors[URI(downcased).host] || Mirror.new(uri)
 | 
			
		||||
        mirror = @mirrors[downcased] || @mirrors[Bundler::URI(downcased).host] || Mirror.new(uri)
 | 
			
		||||
        mirror.validate!(@prober)
 | 
			
		||||
        mirror = Mirror.new(uri) unless mirror.valid?
 | 
			
		||||
        mirror
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ module Bundler
 | 
			
		|||
        @uri = if uri.nil?
 | 
			
		||||
          nil
 | 
			
		||||
        else
 | 
			
		||||
          URI(uri.to_s)
 | 
			
		||||
          Bundler::URI(uri.to_s)
 | 
			
		||||
        end
 | 
			
		||||
        @valid = nil
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +126,7 @@ module Bundler
 | 
			
		|||
        if uri == "all"
 | 
			
		||||
          @all = true
 | 
			
		||||
        else
 | 
			
		||||
          @uri = URI(uri).absolute? ? Settings.normalize_uri(uri) : uri
 | 
			
		||||
          @uri = Bundler::URI(uri).absolute? ? Settings.normalize_uri(uri) : uri
 | 
			
		||||
        end
 | 
			
		||||
        @value = value
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,5 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "uri"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
  module Plugin
 | 
			
		||||
    class API
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +106,7 @@ module Bundler
 | 
			
		|||
        def install_path
 | 
			
		||||
          @install_path ||=
 | 
			
		||||
            begin
 | 
			
		||||
              base_name = File.basename(URI.parse(uri).normalize.path)
 | 
			
		||||
              base_name = File.basename(Bundler::URI.parse(uri).normalize.path)
 | 
			
		||||
 | 
			
		||||
              gem_install_dir.join("#{base_name}-#{uri_hash[0..11]}")
 | 
			
		||||
            end
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +168,7 @@ module Bundler
 | 
			
		|||
        #
 | 
			
		||||
        # This is used by `app_cache_path`
 | 
			
		||||
        def app_cache_dirname
 | 
			
		||||
          base_name = File.basename(URI.parse(uri).normalize.path)
 | 
			
		||||
          base_name = File.basename(Bundler::URI.parse(uri).normalize.path)
 | 
			
		||||
          "#{base_name}-#{uri_hash}"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,5 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "uri"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
  # Represents a lazily loaded gem specification, where the full specification
 | 
			
		||||
  # is on the source server in rubygems' "quick" index. The proxy object is to
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -247,12 +247,6 @@ module Bundler
 | 
			
		|||
      EXT_LOCK
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def fetch_prerelease_specs
 | 
			
		||||
      fetch_specs(false, true)
 | 
			
		||||
    rescue Gem::RemoteFetcher::FetchError
 | 
			
		||||
      {} # if we can't download them, there aren't any
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def with_build_args(args)
 | 
			
		||||
      ext_lock.synchronize do
 | 
			
		||||
        old_args = build_args
 | 
			
		||||
| 
						 | 
				
			
			@ -531,8 +525,8 @@ module Bundler
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def fetch_specs(source, remote, name)
 | 
			
		||||
      path = source + "#{name}.#{Gem.marshal_version}.gz"
 | 
			
		||||
    def fetch_specs(remote, name)
 | 
			
		||||
      path = remote.uri.to_s + "#{name}.#{Gem.marshal_version}.gz"
 | 
			
		||||
      fetcher = gem_remote_fetcher
 | 
			
		||||
      fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
 | 
			
		||||
      string = fetcher.fetch_path(path)
 | 
			
		||||
| 
						 | 
				
			
			@ -543,10 +537,8 @@ module Bundler
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    def fetch_all_remote_specs(remote)
 | 
			
		||||
      source = remote.uri.is_a?(URI) ? remote.uri : URI.parse(source.to_s)
 | 
			
		||||
 | 
			
		||||
      specs = fetch_specs(source, remote, "specs")
 | 
			
		||||
      pres = fetch_specs(source, remote, "prerelease_specs") || []
 | 
			
		||||
      specs = fetch_specs(remote, "specs")
 | 
			
		||||
      pres = fetch_specs(remote, "prerelease_specs") || []
 | 
			
		||||
 | 
			
		||||
      specs.concat(pres)
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			@ -564,7 +556,7 @@ module Bundler
 | 
			
		|||
      require "resolv"
 | 
			
		||||
      proxy = configuration[:http_proxy]
 | 
			
		||||
      dns = Resolv::DNS.new
 | 
			
		||||
      Bundler::GemRemoteFetcher.new(proxy, dns)
 | 
			
		||||
      Gem::RemoteFetcher.new(proxy, dns)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def gem_from_path(path, policy = nil)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,5 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "uri"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
  class Settings
 | 
			
		||||
    autoload :Mirror,  File.expand_path("mirror", __dir__)
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +150,11 @@ module Bundler
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    def mirror_for(uri)
 | 
			
		||||
      uri = URI(uri.to_s) unless uri.is_a?(URI)
 | 
			
		||||
      if uri.is_a?(String)
 | 
			
		||||
        require_relative "vendored_uri"
 | 
			
		||||
        uri = Bundler::URI(uri)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      gem_mirrors.for(uri.to_s).uri
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -421,7 +423,8 @@ module Bundler
 | 
			
		|||
        suffix = $3
 | 
			
		||||
      end
 | 
			
		||||
      uri = "#{uri}/" unless uri.end_with?("/")
 | 
			
		||||
      uri = URI(uri)
 | 
			
		||||
      require_relative "vendored_uri"
 | 
			
		||||
      uri = Bundler::URI(uri)
 | 
			
		||||
      unless uri.absolute?
 | 
			
		||||
        raise ArgumentError, format("Gem sources must be absolute. You provided '%s'.", uri)
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,13 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require_relative "../vendored_fileutils"
 | 
			
		||||
require "uri"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
  class Source
 | 
			
		||||
    class Git < Path
 | 
			
		||||
      autoload :GitProxy, File.expand_path("git/git_proxy", __dir__)
 | 
			
		||||
 | 
			
		||||
      attr_reader :uri, :ref, :branch, :options, :submodules
 | 
			
		||||
      attr_reader :uri, :ref, :branch, :options, :glob, :submodules
 | 
			
		||||
 | 
			
		||||
      def initialize(options)
 | 
			
		||||
        @options = options
 | 
			
		||||
| 
						 | 
				
			
			@ -48,13 +47,14 @@ module Bundler
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      def hash
 | 
			
		||||
        [self.class, uri, ref, branch, name, version, submodules].hash
 | 
			
		||||
        [self.class, uri, ref, branch, name, version, glob, submodules].hash
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def eql?(other)
 | 
			
		||||
        other.is_a?(Git) && uri == other.uri && ref == other.ref &&
 | 
			
		||||
          branch == other.branch && name == other.name &&
 | 
			
		||||
          version == other.version && submodules == other.submodules
 | 
			
		||||
          version == other.version && glob == other.glob &&
 | 
			
		||||
          submodules == other.submodules
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      alias_method :==, :eql?
 | 
			
		||||
| 
						 | 
				
			
			@ -284,7 +284,7 @@ module Bundler
 | 
			
		|||
        if uri =~ %r{^\w+://(\w+@)?}
 | 
			
		||||
          # Downcase the domain component of the URI
 | 
			
		||||
          # and strip off a trailing slash, if one is present
 | 
			
		||||
          input = URI.parse(uri).normalize.to_s.sub(%r{/$}, "")
 | 
			
		||||
          input = Bundler::URI.parse(uri).normalize.to_s.sub(%r{/$}, "")
 | 
			
		||||
        else
 | 
			
		||||
          # If there is no URI scheme, assume it is an ssh/git URI
 | 
			
		||||
          input = uri
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "open3"
 | 
			
		||||
require "shellwords"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
| 
						 | 
				
			
			@ -218,7 +217,7 @@ module Bundler
 | 
			
		|||
        # Adds credentials to the URI as Fetcher#configured_uri_for does
 | 
			
		||||
        def configured_uri_for(uri)
 | 
			
		||||
          if /https?:/ =~ uri
 | 
			
		||||
            remote = URI(uri)
 | 
			
		||||
            remote = Bundler::URI(uri)
 | 
			
		||||
            config_auth = Bundler.settings[remote.to_s] || Bundler.settings[remote.host]
 | 
			
		||||
            remote.userinfo ||= config_auth
 | 
			
		||||
            remote.to_s
 | 
			
		||||
| 
						 | 
				
			
			@ -243,12 +242,14 @@ module Bundler
 | 
			
		|||
        end
 | 
			
		||||
 | 
			
		||||
        def capture_and_filter_stderr(uri, cmd)
 | 
			
		||||
          require "open3"
 | 
			
		||||
          return_value, captured_err, status = Open3.capture3(cmd)
 | 
			
		||||
          Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
 | 
			
		||||
          [return_value, status]
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def capture_and_ignore_stderr(cmd)
 | 
			
		||||
          require "open3"
 | 
			
		||||
          return_value, _, status = Open3.capture3(cmd)
 | 
			
		||||
          [return_value, status]
 | 
			
		||||
        end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "uri"
 | 
			
		||||
require "rubygems/user_interaction"
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
| 
						 | 
				
			
			@ -328,9 +327,10 @@ module Bundler
 | 
			
		|||
      def normalize_uri(uri)
 | 
			
		||||
        uri = uri.to_s
 | 
			
		||||
        uri = "#{uri}/" unless uri =~ %r{/$}
 | 
			
		||||
        uri = URI(uri)
 | 
			
		||||
        require_relative "../vendored_uri"
 | 
			
		||||
        uri = Bundler::URI(uri)
 | 
			
		||||
        raise ArgumentError, "The source must be an absolute URI. For example:\n" \
 | 
			
		||||
          "source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(URI::HTTP) && uri.host.nil?)
 | 
			
		||||
          "source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(Bundler::URI::HTTP) && uri.host.nil?)
 | 
			
		||||
        uri
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ module Bundler
 | 
			
		|||
          end
 | 
			
		||||
 | 
			
		||||
          uri
 | 
			
		||||
        rescue URI::InvalidComponentError
 | 
			
		||||
        rescue Bundler::URI::InvalidComponentError
 | 
			
		||||
          error_message = "Please CGI escape your usernames and passwords before " \
 | 
			
		||||
                          "setting them for authentication."
 | 
			
		||||
          raise HTTPError.new(error_message)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,11 @@ module Bundler
 | 
			
		|||
    def credential_filtered_uri(uri_to_anonymize)
 | 
			
		||||
      return uri_to_anonymize if uri_to_anonymize.nil?
 | 
			
		||||
      uri = uri_to_anonymize.dup
 | 
			
		||||
      uri = URI(uri.to_s) unless uri.is_a?(URI)
 | 
			
		||||
      if uri.is_a?(String)
 | 
			
		||||
        require_relative "vendored_uri"
 | 
			
		||||
        uri = Bundler::URI(uri)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      if uri.userinfo
 | 
			
		||||
        # oauth authentication
 | 
			
		||||
        if uri.password == "x-oauth-basic" || uri.password == "x"
 | 
			
		||||
| 
						 | 
				
			
			@ -17,9 +21,9 @@ module Bundler
 | 
			
		|||
        end
 | 
			
		||||
        uri.password = nil
 | 
			
		||||
      end
 | 
			
		||||
      return uri if uri_to_anonymize.is_a?(URI)
 | 
			
		||||
      return uri.to_s if uri_to_anonymize.is_a?(String)
 | 
			
		||||
    rescue URI::InvalidURIError # uri is not canonical uri scheme
 | 
			
		||||
      uri
 | 
			
		||||
    rescue Bundler::URI::InvalidURIError # uri is not canonical uri scheme
 | 
			
		||||
      uri
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,8 +6,6 @@ rescue LoadError
 | 
			
		|||
  # for make mjit-headers
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
require_relative "fileutils/version"
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# = fileutils.rb
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -104,6 +102,7 @@ require_relative "fileutils/version"
 | 
			
		|||
# <tt>:verbose</tt> flags to methods in Bundler::FileUtils.
 | 
			
		||||
#
 | 
			
		||||
module Bundler::FileUtils
 | 
			
		||||
  VERSION = "1.4.1"
 | 
			
		||||
 | 
			
		||||
  def self.private_module_function(name)   #:nodoc:
 | 
			
		||||
    module_function name
 | 
			
		||||
| 
						 | 
				
			
			@ -1300,7 +1299,8 @@ module Bundler::FileUtils
 | 
			
		|||
           .reject {|n| n == '.' or n == '..' }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      files.map {|n| Entry_.new(prefix(), join(rel(), n.tap{|x| x.untaint if RUBY_VERSION < "2.7" })) }
 | 
			
		||||
      untaint = RUBY_VERSION < '2.7'
 | 
			
		||||
      files.map {|n| Entry_.new(prefix(), join(rel(), untaint ? n.untaint : n)) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def stat
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
require 'net/http'
 | 
			
		||||
require 'uri'
 | 
			
		||||
require_relative '../../../../uri/lib/uri'
 | 
			
		||||
require 'cgi' # for escaping
 | 
			
		||||
require_relative '../../../../connection_pool/lib/connection_pool'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ autoload :OpenSSL, 'openssl'
 | 
			
		|||
#
 | 
			
		||||
#   require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
 | 
			
		||||
#
 | 
			
		||||
#   uri = URI 'http://example.com/awesome/web/service'
 | 
			
		||||
#   uri = Bundler::URI 'http://example.com/awesome/web/service'
 | 
			
		||||
#
 | 
			
		||||
#   http = Bundler::Persistent::Net::HTTP::Persistent.new name: 'my_app_name'
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -48,17 +48,17 @@ autoload :OpenSSL, 'openssl'
 | 
			
		|||
#   post = Net::HTTP::Post.new post_uri.path
 | 
			
		||||
#   post.set_form_data 'some' => 'cool data'
 | 
			
		||||
#
 | 
			
		||||
#   # perform the POST, the URI is always required
 | 
			
		||||
#   # perform the POST, the Bundler::URI is always required
 | 
			
		||||
#   response http.request post_uri, post
 | 
			
		||||
#
 | 
			
		||||
# Note that for GET, HEAD and other requests that do not have a body you want
 | 
			
		||||
# to use URI#request_uri not URI#path.  The request_uri contains the query
 | 
			
		||||
# to use Bundler::URI#request_uri not Bundler::URI#path.  The request_uri contains the query
 | 
			
		||||
# params which are sent in the body for other requests.
 | 
			
		||||
#
 | 
			
		||||
# == SSL
 | 
			
		||||
#
 | 
			
		||||
# SSL connections are automatically created depending upon the scheme of the
 | 
			
		||||
# URI.  SSL connections are automatically verified against the default
 | 
			
		||||
# Bundler::URI.  SSL connections are automatically verified against the default
 | 
			
		||||
# certificate store for your computer.  You can override this by changing
 | 
			
		||||
# verify_mode or by specifying an alternate cert_store.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ autoload :OpenSSL, 'openssl'
 | 
			
		|||
# == Proxies
 | 
			
		||||
#
 | 
			
		||||
# A proxy can be set through #proxy= or at initialization time by providing a
 | 
			
		||||
# second argument to ::new.  The proxy may be the URI of the proxy server or
 | 
			
		||||
# second argument to ::new.  The proxy may be the Bundler::URI of the proxy server or
 | 
			
		||||
# <code>:ENV</code> which will consult environment variables.
 | 
			
		||||
#
 | 
			
		||||
# See #proxy= and #proxy_from_env for details.
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ autoload :OpenSSL, 'openssl'
 | 
			
		|||
#
 | 
			
		||||
#   require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
 | 
			
		||||
#
 | 
			
		||||
#   uri = URI 'http://example.com/awesome/web/service'
 | 
			
		||||
#   uri = Bundler::URI 'http://example.com/awesome/web/service'
 | 
			
		||||
#   post_uri = uri + 'create'
 | 
			
		||||
#
 | 
			
		||||
#   http = Bundler::Persistent::Net::HTTP::Persistent.new name: 'my_app_name'
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +249,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
  # NOTE:  This may not work on ruby > 1.9.
 | 
			
		||||
 | 
			
		||||
  def self.detect_idle_timeout uri, max = 10
 | 
			
		||||
    uri = URI uri unless URI::Generic === uri
 | 
			
		||||
    uri = Bundler::URI uri unless Bundler::URI::Generic === uri
 | 
			
		||||
    uri += '/'
 | 
			
		||||
 | 
			
		||||
    req = Net::HTTP::Head.new uri.request_uri
 | 
			
		||||
| 
						 | 
				
			
			@ -513,13 +513,13 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
  # required currently, but highly recommended.  Your library name should be
 | 
			
		||||
  # good enough.  This parameter will be required in a future version.
 | 
			
		||||
  #
 | 
			
		||||
  # +proxy+ may be set to a URI::HTTP or :ENV to pick up proxy options from
 | 
			
		||||
  # +proxy+ may be set to a Bundler::URI::HTTP or :ENV to pick up proxy options from
 | 
			
		||||
  # the environment.  See proxy_from_env for details.
 | 
			
		||||
  #
 | 
			
		||||
  # In order to use a URI for the proxy you may need to do some extra work
 | 
			
		||||
  # beyond URI parsing if the proxy requires a password:
 | 
			
		||||
  # In order to use a Bundler::URI for the proxy you may need to do some extra work
 | 
			
		||||
  # beyond Bundler::URI parsing if the proxy requires a password:
 | 
			
		||||
  #
 | 
			
		||||
  #   proxy = URI 'http://proxy.example'
 | 
			
		||||
  #   proxy = Bundler::URI 'http://proxy.example'
 | 
			
		||||
  #   proxy.user     = 'AzureDiamond'
 | 
			
		||||
  #   proxy.password = 'hunter2'
 | 
			
		||||
  #
 | 
			
		||||
| 
						 | 
				
			
			@ -566,7 +566,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
    @verify_mode        = nil
 | 
			
		||||
    @cert_store         = nil
 | 
			
		||||
 | 
			
		||||
    @generation         = 0 # incremented when proxy URI changes
 | 
			
		||||
    @generation         = 0 # incremented when proxy Bundler::URI changes
 | 
			
		||||
 | 
			
		||||
    if HAVE_OPENSSL then
 | 
			
		||||
      @verify_mode        = OpenSSL::SSL::VERIFY_PEER
 | 
			
		||||
| 
						 | 
				
			
			@ -688,14 +688,14 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
  # URI::escape wrapper
 | 
			
		||||
  # Bundler::URI::escape wrapper
 | 
			
		||||
 | 
			
		||||
  def escape str
 | 
			
		||||
    CGI.escape str if str
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
  # URI::unescape wrapper
 | 
			
		||||
  # Bundler::URI::unescape wrapper
 | 
			
		||||
 | 
			
		||||
  def unescape str
 | 
			
		||||
    CGI.unescape str if str
 | 
			
		||||
| 
						 | 
				
			
			@ -803,12 +803,12 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
  alias key= private_key=
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
  # Sets the proxy server.  The +proxy+ may be the URI of the proxy server,
 | 
			
		||||
  # Sets the proxy server.  The +proxy+ may be the Bundler::URI of the proxy server,
 | 
			
		||||
  # the symbol +:ENV+ which will read the proxy from the environment or nil to
 | 
			
		||||
  # disable use of a proxy.  See #proxy_from_env for details on setting the
 | 
			
		||||
  # proxy from the environment.
 | 
			
		||||
  #
 | 
			
		||||
  # If the proxy URI is set after requests have been made, the next request
 | 
			
		||||
  # If the proxy Bundler::URI is set after requests have been made, the next request
 | 
			
		||||
  # will shut-down and re-open all connections.
 | 
			
		||||
  #
 | 
			
		||||
  # The +no_proxy+ query parameter can be used to specify hosts which shouldn't
 | 
			
		||||
| 
						 | 
				
			
			@ -819,9 +819,9 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
  def proxy= proxy
 | 
			
		||||
    @proxy_uri = case proxy
 | 
			
		||||
                 when :ENV      then proxy_from_env
 | 
			
		||||
                 when URI::HTTP then proxy
 | 
			
		||||
                 when Bundler::URI::HTTP then proxy
 | 
			
		||||
                 when nil       then # ignore
 | 
			
		||||
                 else raise ArgumentError, 'proxy must be :ENV or a URI::HTTP'
 | 
			
		||||
                 else raise ArgumentError, 'proxy must be :ENV or a Bundler::URI::HTTP'
 | 
			
		||||
                 end
 | 
			
		||||
 | 
			
		||||
    @no_proxy.clear
 | 
			
		||||
| 
						 | 
				
			
			@ -846,13 +846,13 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
  # Creates a URI for an HTTP proxy server from ENV variables.
 | 
			
		||||
  # Creates a Bundler::URI for an HTTP proxy server from ENV variables.
 | 
			
		||||
  #
 | 
			
		||||
  # If +HTTP_PROXY+ is set a proxy will be returned.
 | 
			
		||||
  #
 | 
			
		||||
  # If +HTTP_PROXY_USER+ or +HTTP_PROXY_PASS+ are set the URI is given the
 | 
			
		||||
  # If +HTTP_PROXY_USER+ or +HTTP_PROXY_PASS+ are set the Bundler::URI is given the
 | 
			
		||||
  # indicated user and password unless HTTP_PROXY contains either of these in
 | 
			
		||||
  # the URI.
 | 
			
		||||
  # the Bundler::URI.
 | 
			
		||||
  #
 | 
			
		||||
  # The +NO_PROXY+ ENV variable can be used to specify hosts which shouldn't
 | 
			
		||||
  # be reached via proxy; if set it should be a comma separated list of
 | 
			
		||||
| 
						 | 
				
			
			@ -868,7 +868,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
 | 
			
		||||
    return nil if env_proxy.nil? or env_proxy.empty?
 | 
			
		||||
 | 
			
		||||
    uri = URI normalize_uri env_proxy
 | 
			
		||||
    uri = Bundler::URI normalize_uri env_proxy
 | 
			
		||||
 | 
			
		||||
    env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -951,7 +951,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
    retried      = false
 | 
			
		||||
    bad_response = false
 | 
			
		||||
 | 
			
		||||
    uri      = URI uri
 | 
			
		||||
    uri      = Bundler::URI uri
 | 
			
		||||
    req      = request_setup req || uri
 | 
			
		||||
    response = nil
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1024,13 +1024,13 @@ class Bundler::Persistent::Net::HTTP::Persistent
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
  # Creates a GET request if +req_or_uri+ is a URI and adds headers to the
 | 
			
		||||
  # Creates a GET request if +req_or_uri+ is a Bundler::URI and adds headers to the
 | 
			
		||||
  # request.
 | 
			
		||||
  #
 | 
			
		||||
  # Returns the request.
 | 
			
		||||
 | 
			
		||||
  def request_setup req_or_uri # :nodoc:
 | 
			
		||||
    req = if URI === req_or_uri then
 | 
			
		||||
    req = if Bundler::URI === req_or_uri then
 | 
			
		||||
            Net::HTTP::Get.new req_or_uri.request_uri
 | 
			
		||||
          else
 | 
			
		||||
            req_or_uri
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								lib/bundler/vendor/thor/lib/thor.rb
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								lib/bundler/vendor/thor/lib/thor.rb
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -344,6 +344,13 @@ class Bundler::Thor
 | 
			
		|||
      command && disable_required_check.include?(command.name.to_sym)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def deprecation_warning(message) #:nodoc:
 | 
			
		||||
      unless ENV['THOR_SILENCE_DEPRECATION']
 | 
			
		||||
        warn "Deprecation warning: #{message}\n" +
 | 
			
		||||
          'You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION.'
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  protected
 | 
			
		||||
 | 
			
		||||
    def stop_on_unknown_option #:nodoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								lib/bundler/vendor/thor/lib/thor/actions.rb
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								lib/bundler/vendor/thor/lib/thor/actions.rb
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
require "uri"
 | 
			
		||||
require_relative "core_ext/io_binary_read"
 | 
			
		||||
require_relative "actions/create_file"
 | 
			
		||||
require_relative "actions/create_link"
 | 
			
		||||
require_relative "actions/directory"
 | 
			
		||||
| 
						 | 
				
			
			@ -258,13 +256,19 @@ class Bundler::Thor
 | 
			
		|||
 | 
			
		||||
      return if options[:pretend]
 | 
			
		||||
 | 
			
		||||
      result = config[:capture] ? `#{command}` : system(command.to_s)
 | 
			
		||||
      env_splat = [config[:env]] if config[:env]
 | 
			
		||||
 | 
			
		||||
      if config[:abort_on_failure]
 | 
			
		||||
        success = config[:capture] ? $?.success? : result
 | 
			
		||||
        abort unless success
 | 
			
		||||
      if config[:capture]
 | 
			
		||||
        require "open3"
 | 
			
		||||
        result, status = Open3.capture2e(*env_splat, command.to_s)
 | 
			
		||||
        success = status.success?
 | 
			
		||||
      else
 | 
			
		||||
        result = system(*env_splat, command.to_s)
 | 
			
		||||
        success = result
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      abort if !success && config.fetch(:abort_on_failure, self.class.exit_on_failure?)
 | 
			
		||||
 | 
			
		||||
      result
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										26
									
								
								lib/bundler/vendor/thor/lib/thor/base.rb
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								lib/bundler/vendor/thor/lib/thor/base.rb
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -153,17 +153,20 @@ class Bundler::Thor
 | 
			
		|||
 | 
			
		||||
      # If you want to raise an error when the default value of an option does not match
 | 
			
		||||
      # the type call check_default_type!
 | 
			
		||||
      # This is disabled by default for compatibility.
 | 
			
		||||
      # This will be the default; for compatibility a deprecation warning is issued if necessary.
 | 
			
		||||
      def check_default_type!
 | 
			
		||||
        @check_default_type = true
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def check_default_type #:nodoc:
 | 
			
		||||
        @check_default_type ||= from_superclass(:check_default_type, false)
 | 
			
		||||
      # If you want to use defaults that don't match the type of an option,
 | 
			
		||||
      # either specify `check_default_type: false` or call `allow_incompatible_default_type!`
 | 
			
		||||
      def allow_incompatible_default_type!
 | 
			
		||||
        @check_default_type = false
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def check_default_type? #:nodoc:
 | 
			
		||||
        !!check_default_type
 | 
			
		||||
      def check_default_type #:nodoc:
 | 
			
		||||
        @check_default_type = from_superclass(:check_default_type, nil) unless defined?(@check_default_type)
 | 
			
		||||
        @check_default_type
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # If true, option parsing is suspended as soon as an unknown option or a
 | 
			
		||||
| 
						 | 
				
			
			@ -506,6 +509,12 @@ class Bundler::Thor
 | 
			
		|||
        raise InvocationError, msg
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # A flag that makes the process exit with status 1 if any error happens.
 | 
			
		||||
      def exit_on_failure?
 | 
			
		||||
        Bundler::Thor.deprecation_warning "Bundler::Thor exit with status 0 on errors. To keep this behavior, you must define `exit_on_failure?` in `#{self.name}`"
 | 
			
		||||
        false
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    protected
 | 
			
		||||
 | 
			
		||||
      # Prints the class options per group. If an option does not belong to
 | 
			
		||||
| 
						 | 
				
			
			@ -563,7 +572,7 @@ class Bundler::Thor
 | 
			
		|||
      # options<Hash>:: Described in both class_option and method_option.
 | 
			
		||||
      # scope<Hash>:: Options hash that is being built up
 | 
			
		||||
      def build_option(name, options, scope) #:nodoc:
 | 
			
		||||
        scope[name] = Bundler::Thor::Option.new(name, options.merge(:check_default_type => check_default_type?))
 | 
			
		||||
        scope[name] = Bundler::Thor::Option.new(name, {:check_default_type => check_default_type}.merge!(options))
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Receives a hash of options, parse them and add to the scope. This is a
 | 
			
		||||
| 
						 | 
				
			
			@ -643,11 +652,6 @@ class Bundler::Thor
 | 
			
		|||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # A flag that makes the process exit with status 1 if any error happens.
 | 
			
		||||
      def exit_on_failure?
 | 
			
		||||
        false
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      #
 | 
			
		||||
      # The basename of the program invoking the thor class.
 | 
			
		||||
      #
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ class Bundler::Thor
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    def current_is_value?
 | 
			
		||||
      peek && peek.to_s !~ /^-/
 | 
			
		||||
      peek && peek.to_s !~ /^-{1,2}\S+/
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Runs through the argument array getting strings that contains ":" and
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -112,7 +112,7 @@ class Bundler::Thor
 | 
			
		|||
 | 
			
		||||
    def validate!
 | 
			
		||||
      raise ArgumentError, "An option cannot be boolean and required." if boolean? && required?
 | 
			
		||||
      validate_default_type! if @check_default_type
 | 
			
		||||
      validate_default_type!
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def validate_default_type!
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,18 @@ class Bundler::Thor
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      expected_type = (@repeatable && @type != :hash) ? :array : @type
 | 
			
		||||
      raise ArgumentError, "Expected #{expected_type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})" unless default_type == expected_type
 | 
			
		||||
 | 
			
		||||
      if default_type != expected_type
 | 
			
		||||
        err = "Expected #{expected_type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})"
 | 
			
		||||
 | 
			
		||||
        if @check_default_type
 | 
			
		||||
          raise ArgumentError, err
 | 
			
		||||
        elsif @check_default_type == nil
 | 
			
		||||
          Bundler::Thor.deprecation_warning "#{err}.\n" +
 | 
			
		||||
            'This will be rejected in the future unless you explicitly pass the options `check_default_type: false`' +
 | 
			
		||||
            ' or call `allow_incompatible_default_type!` in your code'
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def dasherized?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										17
									
								
								lib/bundler/vendor/thor/lib/thor/runner.rb
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								lib/bundler/vendor/thor/lib/thor/runner.rb
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
require_relative "../thor"
 | 
			
		||||
require_relative "group"
 | 
			
		||||
require_relative "core_ext/io_binary_read"
 | 
			
		||||
 | 
			
		||||
require "yaml"
 | 
			
		||||
require "digest/md5"
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +66,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
 | 
			
		|||
      raise Error, "Error opening file '#{name}'"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    say "Your Bundler::Thorfile contains:"
 | 
			
		||||
    say "Your Thorfile contains:"
 | 
			
		||||
    say contents
 | 
			
		||||
 | 
			
		||||
    unless options["force"]
 | 
			
		||||
| 
						 | 
				
			
			@ -206,7 +205,7 @@ private
 | 
			
		|||
    File.open(yaml_file, "w") { |f| f.puts yaml.to_yaml }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Load the Bundler::Thorfiles. If relevant_to is supplied, looks for specific files
 | 
			
		||||
  # Load the Thorfiles. If relevant_to is supplied, looks for specific files
 | 
			
		||||
  # in the thor_root instead of loading them all.
 | 
			
		||||
  #
 | 
			
		||||
  # By default, it also traverses the current path until find Bundler::Thor files, as
 | 
			
		||||
| 
						 | 
				
			
			@ -219,11 +218,11 @@ private
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Finds Bundler::Thorfiles by traversing from your current directory down to the root
 | 
			
		||||
  # Finds Thorfiles by traversing from your current directory down to the root
 | 
			
		||||
  # directory of your system. If at any time we find a Bundler::Thor file, we stop.
 | 
			
		||||
  #
 | 
			
		||||
  # We also ensure that system-wide Bundler::Thorfiles are loaded first, so local
 | 
			
		||||
  # Bundler::Thorfiles can override them.
 | 
			
		||||
  # We also ensure that system-wide Thorfiles are loaded first, so local
 | 
			
		||||
  # Thorfiles can override them.
 | 
			
		||||
  #
 | 
			
		||||
  # ==== Example
 | 
			
		||||
  #
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +230,7 @@ private
 | 
			
		|||
  #
 | 
			
		||||
  # 1. /Users/wycats/dev/thor
 | 
			
		||||
  # 2. /Users/wycats/dev
 | 
			
		||||
  # 3. /Users/wycats <-- we find a Bundler::Thorfile here, so we stop
 | 
			
		||||
  # 3. /Users/wycats <-- we find a Thorfile here, so we stop
 | 
			
		||||
  #
 | 
			
		||||
  # Suppose we start at c:\Documents and Settings\james\dev\thor ...
 | 
			
		||||
  #
 | 
			
		||||
| 
						 | 
				
			
			@ -239,7 +238,7 @@ private
 | 
			
		|||
  # 2. c:\Documents and Settings\james\dev
 | 
			
		||||
  # 3. c:\Documents and Settings\james
 | 
			
		||||
  # 4. c:\Documents and Settings
 | 
			
		||||
  # 5. c:\ <-- no Bundler::Thorfiles found!
 | 
			
		||||
  # 5. c:\ <-- no Thorfiles found!
 | 
			
		||||
  #
 | 
			
		||||
  def thorfiles(relevant_to = nil, skip_lookup = false)
 | 
			
		||||
    thorfiles = []
 | 
			
		||||
| 
						 | 
				
			
			@ -260,7 +259,7 @@ private
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Load Bundler::Thorfiles relevant to the given method. If you provide "foo:bar" it
 | 
			
		||||
  # Load Thorfiles relevant to the given method. If you provide "foo:bar" it
 | 
			
		||||
  # will load all thor files in the thor.yaml that has "foo" e "foo:bar"
 | 
			
		||||
  # namespaces registered.
 | 
			
		||||
  #
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								lib/bundler/vendor/thor/lib/thor/shell/basic.rb
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								lib/bundler/vendor/thor/lib/thor/shell/basic.rb
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -451,16 +451,25 @@ class Bundler::Thor
 | 
			
		|||
 | 
			
		||||
      def ask_filtered(statement, color, options)
 | 
			
		||||
        answer_set = options[:limited_to]
 | 
			
		||||
        case_insensitive = options.fetch(:case_insensitive, false)
 | 
			
		||||
        correct_answer = nil
 | 
			
		||||
        until correct_answer
 | 
			
		||||
          answers = answer_set.join(", ")
 | 
			
		||||
          answer = ask_simply("#{statement} [#{answers}]", color, options)
 | 
			
		||||
          correct_answer = answer_set.include?(answer) ? answer : nil
 | 
			
		||||
          correct_answer = answer_match(answer_set, answer, case_insensitive)
 | 
			
		||||
          say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
 | 
			
		||||
        end
 | 
			
		||||
        correct_answer
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def answer_match(possibilities, answer, case_insensitive)
 | 
			
		||||
        if case_insensitive
 | 
			
		||||
          possibilities.detect{ |possibility| possibility.downcase == answer.downcase }
 | 
			
		||||
        else
 | 
			
		||||
          possibilities.detect{ |possibility| possibility == answer }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def merge(destination, content) #:nodoc:
 | 
			
		||||
        require "tempfile"
 | 
			
		||||
        Tempfile.open([File.basename(destination), File.extname(destination)], File.dirname(destination)) do |temp|
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,13 +51,13 @@ class Bundler::Thor
 | 
			
		|||
      def set_color(string, *colors)
 | 
			
		||||
        if colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) }
 | 
			
		||||
          html_colors = colors.map { |color| lookup_color(color) }
 | 
			
		||||
          "<span style=\"#{html_colors.join('; ')};\">#{string}</span>"
 | 
			
		||||
          "<span style=\"#{html_colors.join('; ')};\">#{Bundler::Thor::Util.escape_html(string)}</span>"
 | 
			
		||||
        else
 | 
			
		||||
          color, bold = colors
 | 
			
		||||
          html_color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol)
 | 
			
		||||
          styles = [html_color]
 | 
			
		||||
          styles << BOLD if bold
 | 
			
		||||
          "<span style=\"#{styles.join('; ')};\">#{string}</span>"
 | 
			
		||||
          "<span style=\"#{styles.join('; ')};\">#{Bundler::Thor::Util.escape_html(string)}</span>"
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								lib/bundler/vendor/thor/lib/thor/util.rb
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								lib/bundler/vendor/thor/lib/thor/util.rb
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -211,7 +211,7 @@ class Bundler::Thor
 | 
			
		|||
      #
 | 
			
		||||
      def globs_for(path)
 | 
			
		||||
        path = escape_globs(path)
 | 
			
		||||
        ["#{path}/Bundler::Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/*.thor"]
 | 
			
		||||
        ["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/*.thor"]
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Return the path to the ruby interpreter taking into account multiple
 | 
			
		||||
| 
						 | 
				
			
			@ -263,6 +263,22 @@ class Bundler::Thor
 | 
			
		|||
      def escape_globs(path)
 | 
			
		||||
        path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Returns a string that has had any HTML characters escaped.
 | 
			
		||||
      #
 | 
			
		||||
      # ==== Examples
 | 
			
		||||
      #
 | 
			
		||||
      #   Bundler::Thor::Util.escape_html('<div>')   # => "<div>"
 | 
			
		||||
      #
 | 
			
		||||
      # ==== Parameters
 | 
			
		||||
      # String
 | 
			
		||||
      #
 | 
			
		||||
      # ==== Returns
 | 
			
		||||
      # String
 | 
			
		||||
      #
 | 
			
		||||
      def escape_html(string)
 | 
			
		||||
        CGI.escapeHTML(string)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										104
									
								
								lib/bundler/vendor/uri/lib/uri.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								lib/bundler/vendor/uri/lib/uri.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
# Bundler::URI is a module providing classes to handle Uniform Resource Identifiers
 | 
			
		||||
# (RFC2396[http://tools.ietf.org/html/rfc2396]).
 | 
			
		||||
#
 | 
			
		||||
# == Features
 | 
			
		||||
#
 | 
			
		||||
# * Uniform way of handling URIs.
 | 
			
		||||
# * Flexibility to introduce custom Bundler::URI schemes.
 | 
			
		||||
# * Flexibility to have an alternate Bundler::URI::Parser (or just different patterns
 | 
			
		||||
#   and regexp's).
 | 
			
		||||
#
 | 
			
		||||
# == Basic example
 | 
			
		||||
#
 | 
			
		||||
#   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
#
 | 
			
		||||
#   uri = Bundler::URI("http://foo.com/posts?id=30&limit=5#time=1305298413")
 | 
			
		||||
#   #=> #<Bundler::URI::HTTP http://foo.com/posts?id=30&limit=5#time=1305298413>
 | 
			
		||||
#
 | 
			
		||||
#   uri.scheme    #=> "http"
 | 
			
		||||
#   uri.host      #=> "foo.com"
 | 
			
		||||
#   uri.path      #=> "/posts"
 | 
			
		||||
#   uri.query     #=> "id=30&limit=5"
 | 
			
		||||
#   uri.fragment  #=> "time=1305298413"
 | 
			
		||||
#
 | 
			
		||||
#   uri.to_s      #=> "http://foo.com/posts?id=30&limit=5#time=1305298413"
 | 
			
		||||
#
 | 
			
		||||
# == Adding custom URIs
 | 
			
		||||
#
 | 
			
		||||
#   module Bundler::URI
 | 
			
		||||
#     class RSYNC < Generic
 | 
			
		||||
#       DEFAULT_PORT = 873
 | 
			
		||||
#     end
 | 
			
		||||
#     @@schemes['RSYNC'] = RSYNC
 | 
			
		||||
#   end
 | 
			
		||||
#   #=> Bundler::URI::RSYNC
 | 
			
		||||
#
 | 
			
		||||
#   Bundler::URI.scheme_list
 | 
			
		||||
#   #=> {"FILE"=>Bundler::URI::File, "FTP"=>Bundler::URI::FTP, "HTTP"=>Bundler::URI::HTTP,
 | 
			
		||||
#   #    "HTTPS"=>Bundler::URI::HTTPS, "LDAP"=>Bundler::URI::LDAP, "LDAPS"=>Bundler::URI::LDAPS,
 | 
			
		||||
#   #    "MAILTO"=>Bundler::URI::MailTo, "RSYNC"=>Bundler::URI::RSYNC}
 | 
			
		||||
#
 | 
			
		||||
#   uri = Bundler::URI("rsync://rsync.foo.com")
 | 
			
		||||
#   #=> #<Bundler::URI::RSYNC rsync://rsync.foo.com>
 | 
			
		||||
#
 | 
			
		||||
# == RFC References
 | 
			
		||||
#
 | 
			
		||||
# A good place to view an RFC spec is http://www.ietf.org/rfc.html.
 | 
			
		||||
#
 | 
			
		||||
# Here is a list of all related RFC's:
 | 
			
		||||
# - RFC822[http://tools.ietf.org/html/rfc822]
 | 
			
		||||
# - RFC1738[http://tools.ietf.org/html/rfc1738]
 | 
			
		||||
# - RFC2255[http://tools.ietf.org/html/rfc2255]
 | 
			
		||||
# - RFC2368[http://tools.ietf.org/html/rfc2368]
 | 
			
		||||
# - RFC2373[http://tools.ietf.org/html/rfc2373]
 | 
			
		||||
# - RFC2396[http://tools.ietf.org/html/rfc2396]
 | 
			
		||||
# - RFC2732[http://tools.ietf.org/html/rfc2732]
 | 
			
		||||
# - RFC3986[http://tools.ietf.org/html/rfc3986]
 | 
			
		||||
#
 | 
			
		||||
# == Class tree
 | 
			
		||||
#
 | 
			
		||||
# - Bundler::URI::Generic (in uri/generic.rb)
 | 
			
		||||
#   - Bundler::URI::File - (in uri/file.rb)
 | 
			
		||||
#   - Bundler::URI::FTP - (in uri/ftp.rb)
 | 
			
		||||
#   - Bundler::URI::HTTP - (in uri/http.rb)
 | 
			
		||||
#     - Bundler::URI::HTTPS - (in uri/https.rb)
 | 
			
		||||
#   - Bundler::URI::LDAP - (in uri/ldap.rb)
 | 
			
		||||
#     - Bundler::URI::LDAPS - (in uri/ldaps.rb)
 | 
			
		||||
#   - Bundler::URI::MailTo - (in uri/mailto.rb)
 | 
			
		||||
# - Bundler::URI::Parser - (in uri/common.rb)
 | 
			
		||||
# - Bundler::URI::REGEXP - (in uri/common.rb)
 | 
			
		||||
#   - Bundler::URI::REGEXP::PATTERN - (in uri/common.rb)
 | 
			
		||||
# - Bundler::URI::Util - (in uri/common.rb)
 | 
			
		||||
# - Bundler::URI::Escape - (in uri/common.rb)
 | 
			
		||||
# - Bundler::URI::Error - (in uri/common.rb)
 | 
			
		||||
#   - Bundler::URI::InvalidURIError - (in uri/common.rb)
 | 
			
		||||
#   - Bundler::URI::InvalidComponentError - (in uri/common.rb)
 | 
			
		||||
#   - Bundler::URI::BadURIError - (in uri/common.rb)
 | 
			
		||||
#
 | 
			
		||||
# == Copyright Info
 | 
			
		||||
#
 | 
			
		||||
# Author:: Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# Documentation::
 | 
			
		||||
#   Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
#   Dmitry V. Sabanin <sdmitry@lrn.ru>
 | 
			
		||||
#   Vincent Batts <vbatts@hashbangbash.com>
 | 
			
		||||
# License::
 | 
			
		||||
#  Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
 | 
			
		||||
#  You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
require_relative 'uri/version'
 | 
			
		||||
require_relative 'uri/common'
 | 
			
		||||
require_relative 'uri/generic'
 | 
			
		||||
require_relative 'uri/file'
 | 
			
		||||
require_relative 'uri/ftp'
 | 
			
		||||
require_relative 'uri/http'
 | 
			
		||||
require_relative 'uri/https'
 | 
			
		||||
require_relative 'uri/ldap'
 | 
			
		||||
require_relative 'uri/ldaps'
 | 
			
		||||
require_relative 'uri/mailto'
 | 
			
		||||
							
								
								
									
										744
									
								
								lib/bundler/vendor/uri/lib/uri/common.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										744
									
								
								lib/bundler/vendor/uri/lib/uri/common.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,744 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
#--
 | 
			
		||||
# = uri/common.rb
 | 
			
		||||
#
 | 
			
		||||
# Author:: Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
# License::
 | 
			
		||||
#   You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require_relative "rfc2396_parser"
 | 
			
		||||
require_relative "rfc3986_parser"
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
  REGEXP = RFC2396_REGEXP
 | 
			
		||||
  Parser = RFC2396_Parser
 | 
			
		||||
  RFC3986_PARSER = RFC3986_Parser.new
 | 
			
		||||
 | 
			
		||||
  # Bundler::URI::Parser.new
 | 
			
		||||
  DEFAULT_PARSER = Parser.new
 | 
			
		||||
  DEFAULT_PARSER.pattern.each_pair do |sym, str|
 | 
			
		||||
    unless REGEXP::PATTERN.const_defined?(sym)
 | 
			
		||||
      REGEXP::PATTERN.const_set(sym, str)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  DEFAULT_PARSER.regexp.each_pair do |sym, str|
 | 
			
		||||
    const_set(sym, str)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  module Util # :nodoc:
 | 
			
		||||
    def make_components_hash(klass, array_hash)
 | 
			
		||||
      tmp = {}
 | 
			
		||||
      if array_hash.kind_of?(Array) &&
 | 
			
		||||
          array_hash.size == klass.component.size - 1
 | 
			
		||||
        klass.component[1..-1].each_index do |i|
 | 
			
		||||
          begin
 | 
			
		||||
            tmp[klass.component[i + 1]] = array_hash[i].clone
 | 
			
		||||
          rescue TypeError
 | 
			
		||||
            tmp[klass.component[i + 1]] = array_hash[i]
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      elsif array_hash.kind_of?(Hash)
 | 
			
		||||
        array_hash.each do |key, value|
 | 
			
		||||
          begin
 | 
			
		||||
            tmp[key] = value.clone
 | 
			
		||||
          rescue TypeError
 | 
			
		||||
            tmp[key] = value
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      else
 | 
			
		||||
        raise ArgumentError,
 | 
			
		||||
          "expected Array of or Hash of components of #{klass} (#{klass.component[1..-1].join(', ')})"
 | 
			
		||||
      end
 | 
			
		||||
      tmp[:scheme] = klass.to_s.sub(/\A.*::/, '').downcase
 | 
			
		||||
 | 
			
		||||
      return tmp
 | 
			
		||||
    end
 | 
			
		||||
    module_function :make_components_hash
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Module for escaping unsafe characters with codes.
 | 
			
		||||
  module Escape
 | 
			
		||||
    #
 | 
			
		||||
    # == Synopsis
 | 
			
		||||
    #
 | 
			
		||||
    #   Bundler::URI.escape(str [, unsafe])
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +str+::
 | 
			
		||||
    #   String to replaces in.
 | 
			
		||||
    # +unsafe+::
 | 
			
		||||
    #   Regexp that matches all symbols that must be replaced with codes.
 | 
			
		||||
    #   By default uses <tt>UNSAFE</tt>.
 | 
			
		||||
    #   When this argument is a String, it represents a character set.
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Escapes the string, replacing all unsafe characters with codes.
 | 
			
		||||
    #
 | 
			
		||||
    # This method is obsolete and should not be used. Instead, use
 | 
			
		||||
    # CGI.escape, Bundler::URI.encode_www_form or Bundler::URI.encode_www_form_component
 | 
			
		||||
    # depending on your specific use case.
 | 
			
		||||
    #
 | 
			
		||||
    # == Usage
 | 
			
		||||
    #
 | 
			
		||||
    #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
    #
 | 
			
		||||
    #   enc_uri = Bundler::URI.escape("http://example.com/?a=\11\15")
 | 
			
		||||
    #   # => "http://example.com/?a=%09%0D"
 | 
			
		||||
    #
 | 
			
		||||
    #   Bundler::URI.unescape(enc_uri)
 | 
			
		||||
    #   # => "http://example.com/?a=\t\r"
 | 
			
		||||
    #
 | 
			
		||||
    #   Bundler::URI.escape("@?@!", "!?")
 | 
			
		||||
    #   # => "@%3F@%21"
 | 
			
		||||
    #
 | 
			
		||||
    def escape(*arg)
 | 
			
		||||
      warn "Bundler::URI.escape is obsolete", uplevel: 1
 | 
			
		||||
      DEFAULT_PARSER.escape(*arg)
 | 
			
		||||
    end
 | 
			
		||||
    alias encode escape
 | 
			
		||||
    #
 | 
			
		||||
    # == Synopsis
 | 
			
		||||
    #
 | 
			
		||||
    #   Bundler::URI.unescape(str)
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +str+::
 | 
			
		||||
    #   String to unescape.
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # This method is obsolete and should not be used. Instead, use
 | 
			
		||||
    # CGI.unescape, Bundler::URI.decode_www_form or Bundler::URI.decode_www_form_component
 | 
			
		||||
    # depending on your specific use case.
 | 
			
		||||
    #
 | 
			
		||||
    # == Usage
 | 
			
		||||
    #
 | 
			
		||||
    #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
    #
 | 
			
		||||
    #   enc_uri = Bundler::URI.escape("http://example.com/?a=\11\15")
 | 
			
		||||
    #   # => "http://example.com/?a=%09%0D"
 | 
			
		||||
    #
 | 
			
		||||
    #   Bundler::URI.unescape(enc_uri)
 | 
			
		||||
    #   # => "http://example.com/?a=\t\r"
 | 
			
		||||
    #
 | 
			
		||||
    def unescape(*arg)
 | 
			
		||||
      warn "Bundler::URI.unescape is obsolete", uplevel: 1
 | 
			
		||||
      DEFAULT_PARSER.unescape(*arg)
 | 
			
		||||
    end
 | 
			
		||||
    alias decode unescape
 | 
			
		||||
  end # module Escape
 | 
			
		||||
 | 
			
		||||
  extend Escape
 | 
			
		||||
  include REGEXP
 | 
			
		||||
 | 
			
		||||
  @@schemes = {}
 | 
			
		||||
  # Returns a Hash of the defined schemes.
 | 
			
		||||
  def self.scheme_list
 | 
			
		||||
    @@schemes
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # Base class for all Bundler::URI exceptions.
 | 
			
		||||
  #
 | 
			
		||||
  class Error < StandardError; end
 | 
			
		||||
  #
 | 
			
		||||
  # Not a Bundler::URI.
 | 
			
		||||
  #
 | 
			
		||||
  class InvalidURIError < Error; end
 | 
			
		||||
  #
 | 
			
		||||
  # Not a Bundler::URI component.
 | 
			
		||||
  #
 | 
			
		||||
  class InvalidComponentError < Error; end
 | 
			
		||||
  #
 | 
			
		||||
  # Bundler::URI is valid, bad usage is not.
 | 
			
		||||
  #
 | 
			
		||||
  class BadURIError < Error; end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # == Synopsis
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI::split(uri)
 | 
			
		||||
  #
 | 
			
		||||
  # == Args
 | 
			
		||||
  #
 | 
			
		||||
  # +uri+::
 | 
			
		||||
  #   String with Bundler::URI.
 | 
			
		||||
  #
 | 
			
		||||
  # == Description
 | 
			
		||||
  #
 | 
			
		||||
  # Splits the string on following parts and returns array with result:
 | 
			
		||||
  #
 | 
			
		||||
  # * Scheme
 | 
			
		||||
  # * Userinfo
 | 
			
		||||
  # * Host
 | 
			
		||||
  # * Port
 | 
			
		||||
  # * Registry
 | 
			
		||||
  # * Path
 | 
			
		||||
  # * Opaque
 | 
			
		||||
  # * Query
 | 
			
		||||
  # * Fragment
 | 
			
		||||
  #
 | 
			
		||||
  # == Usage
 | 
			
		||||
  #
 | 
			
		||||
  #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI.split("http://www.ruby-lang.org/")
 | 
			
		||||
  #   # => ["http", nil, "www.ruby-lang.org", nil, nil, "/", nil, nil, nil]
 | 
			
		||||
  #
 | 
			
		||||
  def self.split(uri)
 | 
			
		||||
    RFC3986_PARSER.split(uri)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # == Synopsis
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI::parse(uri_str)
 | 
			
		||||
  #
 | 
			
		||||
  # == Args
 | 
			
		||||
  #
 | 
			
		||||
  # +uri_str+::
 | 
			
		||||
  #   String with Bundler::URI.
 | 
			
		||||
  #
 | 
			
		||||
  # == Description
 | 
			
		||||
  #
 | 
			
		||||
  # Creates one of the Bundler::URI's subclasses instance from the string.
 | 
			
		||||
  #
 | 
			
		||||
  # == Raises
 | 
			
		||||
  #
 | 
			
		||||
  # Bundler::URI::InvalidURIError::
 | 
			
		||||
  #   Raised if Bundler::URI given is not a correct one.
 | 
			
		||||
  #
 | 
			
		||||
  # == Usage
 | 
			
		||||
  #
 | 
			
		||||
  #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
  #
 | 
			
		||||
  #   uri = Bundler::URI.parse("http://www.ruby-lang.org/")
 | 
			
		||||
  #   # => #<Bundler::URI::HTTP http://www.ruby-lang.org/>
 | 
			
		||||
  #   uri.scheme
 | 
			
		||||
  #   # => "http"
 | 
			
		||||
  #   uri.host
 | 
			
		||||
  #   # => "www.ruby-lang.org"
 | 
			
		||||
  #
 | 
			
		||||
  # It's recommended to first ::escape the provided +uri_str+ if there are any
 | 
			
		||||
  # invalid Bundler::URI characters.
 | 
			
		||||
  #
 | 
			
		||||
  def self.parse(uri)
 | 
			
		||||
    RFC3986_PARSER.parse(uri)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # == Synopsis
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI::join(str[, str, ...])
 | 
			
		||||
  #
 | 
			
		||||
  # == Args
 | 
			
		||||
  #
 | 
			
		||||
  # +str+::
 | 
			
		||||
  #   String(s) to work with, will be converted to RFC3986 URIs before merging.
 | 
			
		||||
  #
 | 
			
		||||
  # == Description
 | 
			
		||||
  #
 | 
			
		||||
  # Joins URIs.
 | 
			
		||||
  #
 | 
			
		||||
  # == Usage
 | 
			
		||||
  #
 | 
			
		||||
  #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI.join("http://example.com/","main.rbx")
 | 
			
		||||
  #   # => #<Bundler::URI::HTTP http://example.com/main.rbx>
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI.join('http://example.com', 'foo')
 | 
			
		||||
  #   # => #<Bundler::URI::HTTP http://example.com/foo>
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI.join('http://example.com', '/foo', '/bar')
 | 
			
		||||
  #   # => #<Bundler::URI::HTTP http://example.com/bar>
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI.join('http://example.com', '/foo', 'bar')
 | 
			
		||||
  #   # => #<Bundler::URI::HTTP http://example.com/bar>
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI.join('http://example.com', '/foo/', 'bar')
 | 
			
		||||
  #   # => #<Bundler::URI::HTTP http://example.com/foo/bar>
 | 
			
		||||
  #
 | 
			
		||||
  def self.join(*str)
 | 
			
		||||
    RFC3986_PARSER.join(*str)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # == Synopsis
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI::extract(str[, schemes][,&blk])
 | 
			
		||||
  #
 | 
			
		||||
  # == Args
 | 
			
		||||
  #
 | 
			
		||||
  # +str+::
 | 
			
		||||
  #   String to extract URIs from.
 | 
			
		||||
  # +schemes+::
 | 
			
		||||
  #   Limit Bundler::URI matching to specific schemes.
 | 
			
		||||
  #
 | 
			
		||||
  # == Description
 | 
			
		||||
  #
 | 
			
		||||
  # Extracts URIs from a string. If block given, iterates through all matched URIs.
 | 
			
		||||
  # Returns nil if block given or array with matches.
 | 
			
		||||
  #
 | 
			
		||||
  # == Usage
 | 
			
		||||
  #
 | 
			
		||||
  #   require "bundler/vendor/uri/lib/uri"
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
 | 
			
		||||
  #   # => ["http://foo.example.com/bla", "mailto:test@example.com"]
 | 
			
		||||
  #
 | 
			
		||||
  def self.extract(str, schemes = nil, &block)
 | 
			
		||||
    warn "Bundler::URI.extract is obsolete", uplevel: 1 if $VERBOSE
 | 
			
		||||
    DEFAULT_PARSER.extract(str, schemes, &block)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # == Synopsis
 | 
			
		||||
  #
 | 
			
		||||
  #   Bundler::URI::regexp([match_schemes])
 | 
			
		||||
  #
 | 
			
		||||
  # == Args
 | 
			
		||||
  #
 | 
			
		||||
  # +match_schemes+::
 | 
			
		||||
  #   Array of schemes. If given, resulting regexp matches to URIs
 | 
			
		||||
  #   whose scheme is one of the match_schemes.
 | 
			
		||||
  #
 | 
			
		||||
  # == Description
 | 
			
		||||
  #
 | 
			
		||||
  # Returns a Regexp object which matches to Bundler::URI-like strings.
 | 
			
		||||
  # The Regexp object returned by this method includes arbitrary
 | 
			
		||||
  # number of capture group (parentheses).  Never rely on it's number.
 | 
			
		||||
  #
 | 
			
		||||
  # == Usage
 | 
			
		||||
  #
 | 
			
		||||
  #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
  #
 | 
			
		||||
  #   # extract first Bundler::URI from html_string
 | 
			
		||||
  #   html_string.slice(Bundler::URI.regexp)
 | 
			
		||||
  #
 | 
			
		||||
  #   # remove ftp URIs
 | 
			
		||||
  #   html_string.sub(Bundler::URI.regexp(['ftp']), '')
 | 
			
		||||
  #
 | 
			
		||||
  #   # You should not rely on the number of parentheses
 | 
			
		||||
  #   html_string.scan(Bundler::URI.regexp) do |*matches|
 | 
			
		||||
  #     p $&
 | 
			
		||||
  #   end
 | 
			
		||||
  #
 | 
			
		||||
  def self.regexp(schemes = nil)
 | 
			
		||||
    warn "Bundler::URI.regexp is obsolete", uplevel: 1 if $VERBOSE
 | 
			
		||||
    DEFAULT_PARSER.make_regexp(schemes)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  TBLENCWWWCOMP_ = {} # :nodoc:
 | 
			
		||||
  256.times do |i|
 | 
			
		||||
    TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
 | 
			
		||||
  end
 | 
			
		||||
  TBLENCWWWCOMP_[' '] = '+'
 | 
			
		||||
  TBLENCWWWCOMP_.freeze
 | 
			
		||||
  TBLDECWWWCOMP_ = {} # :nodoc:
 | 
			
		||||
  256.times do |i|
 | 
			
		||||
    h, l = i>>4, i&15
 | 
			
		||||
    TBLDECWWWCOMP_[-('%%%X%X' % [h, l])] = -i.chr
 | 
			
		||||
    TBLDECWWWCOMP_[-('%%%x%X' % [h, l])] = -i.chr
 | 
			
		||||
    TBLDECWWWCOMP_[-('%%%X%x' % [h, l])] = -i.chr
 | 
			
		||||
    TBLDECWWWCOMP_[-('%%%x%x' % [h, l])] = -i.chr
 | 
			
		||||
  end
 | 
			
		||||
  TBLDECWWWCOMP_['+'] = ' '
 | 
			
		||||
  TBLDECWWWCOMP_.freeze
 | 
			
		||||
 | 
			
		||||
  # Encodes given +str+ to URL-encoded form data.
 | 
			
		||||
  #
 | 
			
		||||
  # This method doesn't convert *, -, ., 0-9, A-Z, _, a-z, but does convert SP
 | 
			
		||||
  # (ASCII space) to + and converts others to %XX.
 | 
			
		||||
  #
 | 
			
		||||
  # If +enc+ is given, convert +str+ to the encoding before percent encoding.
 | 
			
		||||
  #
 | 
			
		||||
  # This is an implementation of
 | 
			
		||||
  # http://www.w3.org/TR/2013/CR-html5-20130806/forms.html#url-encoded-form-data.
 | 
			
		||||
  #
 | 
			
		||||
  # See Bundler::URI.decode_www_form_component, Bundler::URI.encode_www_form.
 | 
			
		||||
  def self.encode_www_form_component(str, enc=nil)
 | 
			
		||||
    str = str.to_s.dup
 | 
			
		||||
    if str.encoding != Encoding::ASCII_8BIT
 | 
			
		||||
      if enc && enc != Encoding::ASCII_8BIT
 | 
			
		||||
        str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace)
 | 
			
		||||
        str.encode!(enc, fallback: ->(x){"&##{x.ord};"})
 | 
			
		||||
      end
 | 
			
		||||
      str.force_encoding(Encoding::ASCII_8BIT)
 | 
			
		||||
    end
 | 
			
		||||
    str.gsub!(/[^*\-.0-9A-Z_a-z]/, TBLENCWWWCOMP_)
 | 
			
		||||
    str.force_encoding(Encoding::US_ASCII)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Decodes given +str+ of URL-encoded form data.
 | 
			
		||||
  #
 | 
			
		||||
  # This decodes + to SP.
 | 
			
		||||
  #
 | 
			
		||||
  # See Bundler::URI.encode_www_form_component, Bundler::URI.decode_www_form.
 | 
			
		||||
  def self.decode_www_form_component(str, enc=Encoding::UTF_8)
 | 
			
		||||
    raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/ =~ str
 | 
			
		||||
    str.b.gsub(/\+|%\h\h/, TBLDECWWWCOMP_).force_encoding(enc)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Generates URL-encoded form data from given +enum+.
 | 
			
		||||
  #
 | 
			
		||||
  # This generates application/x-www-form-urlencoded data defined in HTML5
 | 
			
		||||
  # from given an Enumerable object.
 | 
			
		||||
  #
 | 
			
		||||
  # This internally uses Bundler::URI.encode_www_form_component(str).
 | 
			
		||||
  #
 | 
			
		||||
  # This method doesn't convert the encoding of given items, so convert them
 | 
			
		||||
  # before calling this method if you want to send data as other than original
 | 
			
		||||
  # encoding or mixed encoding data. (Strings which are encoded in an HTML5
 | 
			
		||||
  # ASCII incompatible encoding are converted to UTF-8.)
 | 
			
		||||
  #
 | 
			
		||||
  # This method doesn't handle files.  When you send a file, use
 | 
			
		||||
  # multipart/form-data.
 | 
			
		||||
  #
 | 
			
		||||
  # This refers http://url.spec.whatwg.org/#concept-urlencoded-serializer
 | 
			
		||||
  #
 | 
			
		||||
  #    Bundler::URI.encode_www_form([["q", "ruby"], ["lang", "en"]])
 | 
			
		||||
  #    #=> "q=ruby&lang=en"
 | 
			
		||||
  #    Bundler::URI.encode_www_form("q" => "ruby", "lang" => "en")
 | 
			
		||||
  #    #=> "q=ruby&lang=en"
 | 
			
		||||
  #    Bundler::URI.encode_www_form("q" => ["ruby", "perl"], "lang" => "en")
 | 
			
		||||
  #    #=> "q=ruby&q=perl&lang=en"
 | 
			
		||||
  #    Bundler::URI.encode_www_form([["q", "ruby"], ["q", "perl"], ["lang", "en"]])
 | 
			
		||||
  #    #=> "q=ruby&q=perl&lang=en"
 | 
			
		||||
  #
 | 
			
		||||
  # See Bundler::URI.encode_www_form_component, Bundler::URI.decode_www_form.
 | 
			
		||||
  def self.encode_www_form(enum, enc=nil)
 | 
			
		||||
    enum.map do |k,v|
 | 
			
		||||
      if v.nil?
 | 
			
		||||
        encode_www_form_component(k, enc)
 | 
			
		||||
      elsif v.respond_to?(:to_ary)
 | 
			
		||||
        v.to_ary.map do |w|
 | 
			
		||||
          str = encode_www_form_component(k, enc)
 | 
			
		||||
          unless w.nil?
 | 
			
		||||
            str << '='
 | 
			
		||||
            str << encode_www_form_component(w, enc)
 | 
			
		||||
          end
 | 
			
		||||
        end.join('&')
 | 
			
		||||
      else
 | 
			
		||||
        str = encode_www_form_component(k, enc)
 | 
			
		||||
        str << '='
 | 
			
		||||
        str << encode_www_form_component(v, enc)
 | 
			
		||||
      end
 | 
			
		||||
    end.join('&')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Decodes URL-encoded form data from given +str+.
 | 
			
		||||
  #
 | 
			
		||||
  # This decodes application/x-www-form-urlencoded data
 | 
			
		||||
  # and returns an array of key-value arrays.
 | 
			
		||||
  #
 | 
			
		||||
  # This refers http://url.spec.whatwg.org/#concept-urlencoded-parser,
 | 
			
		||||
  # so this supports only &-separator, and doesn't support ;-separator.
 | 
			
		||||
  #
 | 
			
		||||
  #    ary = Bundler::URI.decode_www_form("a=1&a=2&b=3")
 | 
			
		||||
  #    ary                   #=> [['a', '1'], ['a', '2'], ['b', '3']]
 | 
			
		||||
  #    ary.assoc('a').last   #=> '1'
 | 
			
		||||
  #    ary.assoc('b').last   #=> '3'
 | 
			
		||||
  #    ary.rassoc('a').last  #=> '2'
 | 
			
		||||
  #    Hash[ary]             #=> {"a"=>"2", "b"=>"3"}
 | 
			
		||||
  #
 | 
			
		||||
  # See Bundler::URI.decode_www_form_component, Bundler::URI.encode_www_form.
 | 
			
		||||
  def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_: false, isindex: false)
 | 
			
		||||
    raise ArgumentError, "the input of #{self.name}.#{__method__} must be ASCII only string" unless str.ascii_only?
 | 
			
		||||
    ary = []
 | 
			
		||||
    return ary if str.empty?
 | 
			
		||||
    enc = Encoding.find(enc)
 | 
			
		||||
    str.b.each_line(separator) do |string|
 | 
			
		||||
      string.chomp!(separator)
 | 
			
		||||
      key, sep, val = string.partition('=')
 | 
			
		||||
      if isindex
 | 
			
		||||
        if sep.empty?
 | 
			
		||||
          val = key
 | 
			
		||||
          key = +''
 | 
			
		||||
        end
 | 
			
		||||
        isindex = false
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      if use__charset_ and key == '_charset_' and e = get_encoding(val)
 | 
			
		||||
        enc = e
 | 
			
		||||
        use__charset_ = false
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      key.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
 | 
			
		||||
      if val
 | 
			
		||||
        val.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
 | 
			
		||||
      else
 | 
			
		||||
        val = +''
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      ary << [key, val]
 | 
			
		||||
    end
 | 
			
		||||
    ary.each do |k, v|
 | 
			
		||||
      k.force_encoding(enc)
 | 
			
		||||
      k.scrub!
 | 
			
		||||
      v.force_encoding(enc)
 | 
			
		||||
      v.scrub!
 | 
			
		||||
    end
 | 
			
		||||
    ary
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
=begin command for WEB_ENCODINGS_
 | 
			
		||||
  curl https://encoding.spec.whatwg.org/encodings.json|
 | 
			
		||||
  ruby -rjson -e 'H={}
 | 
			
		||||
  h={
 | 
			
		||||
    "shift_jis"=>"Windows-31J",
 | 
			
		||||
    "euc-jp"=>"cp51932",
 | 
			
		||||
    "iso-2022-jp"=>"cp50221",
 | 
			
		||||
    "x-mac-cyrillic"=>"macCyrillic",
 | 
			
		||||
  }
 | 
			
		||||
  JSON($<.read).map{|x|x["encodings"]}.flatten.each{|x|
 | 
			
		||||
    Encoding.find(n=h.fetch(n=x["name"].downcase,n))rescue next
 | 
			
		||||
    x["labels"].each{|y|H[y]=n}
 | 
			
		||||
  }
 | 
			
		||||
  puts "{"
 | 
			
		||||
  H.each{|k,v|puts %[  #{k.dump}=>#{v.dump},]}
 | 
			
		||||
  puts "}"
 | 
			
		||||
'
 | 
			
		||||
=end
 | 
			
		||||
  WEB_ENCODINGS_ = {
 | 
			
		||||
    "unicode-1-1-utf-8"=>"utf-8",
 | 
			
		||||
    "utf-8"=>"utf-8",
 | 
			
		||||
    "utf8"=>"utf-8",
 | 
			
		||||
    "866"=>"ibm866",
 | 
			
		||||
    "cp866"=>"ibm866",
 | 
			
		||||
    "csibm866"=>"ibm866",
 | 
			
		||||
    "ibm866"=>"ibm866",
 | 
			
		||||
    "csisolatin2"=>"iso-8859-2",
 | 
			
		||||
    "iso-8859-2"=>"iso-8859-2",
 | 
			
		||||
    "iso-ir-101"=>"iso-8859-2",
 | 
			
		||||
    "iso8859-2"=>"iso-8859-2",
 | 
			
		||||
    "iso88592"=>"iso-8859-2",
 | 
			
		||||
    "iso_8859-2"=>"iso-8859-2",
 | 
			
		||||
    "iso_8859-2:1987"=>"iso-8859-2",
 | 
			
		||||
    "l2"=>"iso-8859-2",
 | 
			
		||||
    "latin2"=>"iso-8859-2",
 | 
			
		||||
    "csisolatin3"=>"iso-8859-3",
 | 
			
		||||
    "iso-8859-3"=>"iso-8859-3",
 | 
			
		||||
    "iso-ir-109"=>"iso-8859-3",
 | 
			
		||||
    "iso8859-3"=>"iso-8859-3",
 | 
			
		||||
    "iso88593"=>"iso-8859-3",
 | 
			
		||||
    "iso_8859-3"=>"iso-8859-3",
 | 
			
		||||
    "iso_8859-3:1988"=>"iso-8859-3",
 | 
			
		||||
    "l3"=>"iso-8859-3",
 | 
			
		||||
    "latin3"=>"iso-8859-3",
 | 
			
		||||
    "csisolatin4"=>"iso-8859-4",
 | 
			
		||||
    "iso-8859-4"=>"iso-8859-4",
 | 
			
		||||
    "iso-ir-110"=>"iso-8859-4",
 | 
			
		||||
    "iso8859-4"=>"iso-8859-4",
 | 
			
		||||
    "iso88594"=>"iso-8859-4",
 | 
			
		||||
    "iso_8859-4"=>"iso-8859-4",
 | 
			
		||||
    "iso_8859-4:1988"=>"iso-8859-4",
 | 
			
		||||
    "l4"=>"iso-8859-4",
 | 
			
		||||
    "latin4"=>"iso-8859-4",
 | 
			
		||||
    "csisolatincyrillic"=>"iso-8859-5",
 | 
			
		||||
    "cyrillic"=>"iso-8859-5",
 | 
			
		||||
    "iso-8859-5"=>"iso-8859-5",
 | 
			
		||||
    "iso-ir-144"=>"iso-8859-5",
 | 
			
		||||
    "iso8859-5"=>"iso-8859-5",
 | 
			
		||||
    "iso88595"=>"iso-8859-5",
 | 
			
		||||
    "iso_8859-5"=>"iso-8859-5",
 | 
			
		||||
    "iso_8859-5:1988"=>"iso-8859-5",
 | 
			
		||||
    "arabic"=>"iso-8859-6",
 | 
			
		||||
    "asmo-708"=>"iso-8859-6",
 | 
			
		||||
    "csiso88596e"=>"iso-8859-6",
 | 
			
		||||
    "csiso88596i"=>"iso-8859-6",
 | 
			
		||||
    "csisolatinarabic"=>"iso-8859-6",
 | 
			
		||||
    "ecma-114"=>"iso-8859-6",
 | 
			
		||||
    "iso-8859-6"=>"iso-8859-6",
 | 
			
		||||
    "iso-8859-6-e"=>"iso-8859-6",
 | 
			
		||||
    "iso-8859-6-i"=>"iso-8859-6",
 | 
			
		||||
    "iso-ir-127"=>"iso-8859-6",
 | 
			
		||||
    "iso8859-6"=>"iso-8859-6",
 | 
			
		||||
    "iso88596"=>"iso-8859-6",
 | 
			
		||||
    "iso_8859-6"=>"iso-8859-6",
 | 
			
		||||
    "iso_8859-6:1987"=>"iso-8859-6",
 | 
			
		||||
    "csisolatingreek"=>"iso-8859-7",
 | 
			
		||||
    "ecma-118"=>"iso-8859-7",
 | 
			
		||||
    "elot_928"=>"iso-8859-7",
 | 
			
		||||
    "greek"=>"iso-8859-7",
 | 
			
		||||
    "greek8"=>"iso-8859-7",
 | 
			
		||||
    "iso-8859-7"=>"iso-8859-7",
 | 
			
		||||
    "iso-ir-126"=>"iso-8859-7",
 | 
			
		||||
    "iso8859-7"=>"iso-8859-7",
 | 
			
		||||
    "iso88597"=>"iso-8859-7",
 | 
			
		||||
    "iso_8859-7"=>"iso-8859-7",
 | 
			
		||||
    "iso_8859-7:1987"=>"iso-8859-7",
 | 
			
		||||
    "sun_eu_greek"=>"iso-8859-7",
 | 
			
		||||
    "csiso88598e"=>"iso-8859-8",
 | 
			
		||||
    "csisolatinhebrew"=>"iso-8859-8",
 | 
			
		||||
    "hebrew"=>"iso-8859-8",
 | 
			
		||||
    "iso-8859-8"=>"iso-8859-8",
 | 
			
		||||
    "iso-8859-8-e"=>"iso-8859-8",
 | 
			
		||||
    "iso-ir-138"=>"iso-8859-8",
 | 
			
		||||
    "iso8859-8"=>"iso-8859-8",
 | 
			
		||||
    "iso88598"=>"iso-8859-8",
 | 
			
		||||
    "iso_8859-8"=>"iso-8859-8",
 | 
			
		||||
    "iso_8859-8:1988"=>"iso-8859-8",
 | 
			
		||||
    "visual"=>"iso-8859-8",
 | 
			
		||||
    "csisolatin6"=>"iso-8859-10",
 | 
			
		||||
    "iso-8859-10"=>"iso-8859-10",
 | 
			
		||||
    "iso-ir-157"=>"iso-8859-10",
 | 
			
		||||
    "iso8859-10"=>"iso-8859-10",
 | 
			
		||||
    "iso885910"=>"iso-8859-10",
 | 
			
		||||
    "l6"=>"iso-8859-10",
 | 
			
		||||
    "latin6"=>"iso-8859-10",
 | 
			
		||||
    "iso-8859-13"=>"iso-8859-13",
 | 
			
		||||
    "iso8859-13"=>"iso-8859-13",
 | 
			
		||||
    "iso885913"=>"iso-8859-13",
 | 
			
		||||
    "iso-8859-14"=>"iso-8859-14",
 | 
			
		||||
    "iso8859-14"=>"iso-8859-14",
 | 
			
		||||
    "iso885914"=>"iso-8859-14",
 | 
			
		||||
    "csisolatin9"=>"iso-8859-15",
 | 
			
		||||
    "iso-8859-15"=>"iso-8859-15",
 | 
			
		||||
    "iso8859-15"=>"iso-8859-15",
 | 
			
		||||
    "iso885915"=>"iso-8859-15",
 | 
			
		||||
    "iso_8859-15"=>"iso-8859-15",
 | 
			
		||||
    "l9"=>"iso-8859-15",
 | 
			
		||||
    "iso-8859-16"=>"iso-8859-16",
 | 
			
		||||
    "cskoi8r"=>"koi8-r",
 | 
			
		||||
    "koi"=>"koi8-r",
 | 
			
		||||
    "koi8"=>"koi8-r",
 | 
			
		||||
    "koi8-r"=>"koi8-r",
 | 
			
		||||
    "koi8_r"=>"koi8-r",
 | 
			
		||||
    "koi8-ru"=>"koi8-u",
 | 
			
		||||
    "koi8-u"=>"koi8-u",
 | 
			
		||||
    "dos-874"=>"windows-874",
 | 
			
		||||
    "iso-8859-11"=>"windows-874",
 | 
			
		||||
    "iso8859-11"=>"windows-874",
 | 
			
		||||
    "iso885911"=>"windows-874",
 | 
			
		||||
    "tis-620"=>"windows-874",
 | 
			
		||||
    "windows-874"=>"windows-874",
 | 
			
		||||
    "cp1250"=>"windows-1250",
 | 
			
		||||
    "windows-1250"=>"windows-1250",
 | 
			
		||||
    "x-cp1250"=>"windows-1250",
 | 
			
		||||
    "cp1251"=>"windows-1251",
 | 
			
		||||
    "windows-1251"=>"windows-1251",
 | 
			
		||||
    "x-cp1251"=>"windows-1251",
 | 
			
		||||
    "ansi_x3.4-1968"=>"windows-1252",
 | 
			
		||||
    "ascii"=>"windows-1252",
 | 
			
		||||
    "cp1252"=>"windows-1252",
 | 
			
		||||
    "cp819"=>"windows-1252",
 | 
			
		||||
    "csisolatin1"=>"windows-1252",
 | 
			
		||||
    "ibm819"=>"windows-1252",
 | 
			
		||||
    "iso-8859-1"=>"windows-1252",
 | 
			
		||||
    "iso-ir-100"=>"windows-1252",
 | 
			
		||||
    "iso8859-1"=>"windows-1252",
 | 
			
		||||
    "iso88591"=>"windows-1252",
 | 
			
		||||
    "iso_8859-1"=>"windows-1252",
 | 
			
		||||
    "iso_8859-1:1987"=>"windows-1252",
 | 
			
		||||
    "l1"=>"windows-1252",
 | 
			
		||||
    "latin1"=>"windows-1252",
 | 
			
		||||
    "us-ascii"=>"windows-1252",
 | 
			
		||||
    "windows-1252"=>"windows-1252",
 | 
			
		||||
    "x-cp1252"=>"windows-1252",
 | 
			
		||||
    "cp1253"=>"windows-1253",
 | 
			
		||||
    "windows-1253"=>"windows-1253",
 | 
			
		||||
    "x-cp1253"=>"windows-1253",
 | 
			
		||||
    "cp1254"=>"windows-1254",
 | 
			
		||||
    "csisolatin5"=>"windows-1254",
 | 
			
		||||
    "iso-8859-9"=>"windows-1254",
 | 
			
		||||
    "iso-ir-148"=>"windows-1254",
 | 
			
		||||
    "iso8859-9"=>"windows-1254",
 | 
			
		||||
    "iso88599"=>"windows-1254",
 | 
			
		||||
    "iso_8859-9"=>"windows-1254",
 | 
			
		||||
    "iso_8859-9:1989"=>"windows-1254",
 | 
			
		||||
    "l5"=>"windows-1254",
 | 
			
		||||
    "latin5"=>"windows-1254",
 | 
			
		||||
    "windows-1254"=>"windows-1254",
 | 
			
		||||
    "x-cp1254"=>"windows-1254",
 | 
			
		||||
    "cp1255"=>"windows-1255",
 | 
			
		||||
    "windows-1255"=>"windows-1255",
 | 
			
		||||
    "x-cp1255"=>"windows-1255",
 | 
			
		||||
    "cp1256"=>"windows-1256",
 | 
			
		||||
    "windows-1256"=>"windows-1256",
 | 
			
		||||
    "x-cp1256"=>"windows-1256",
 | 
			
		||||
    "cp1257"=>"windows-1257",
 | 
			
		||||
    "windows-1257"=>"windows-1257",
 | 
			
		||||
    "x-cp1257"=>"windows-1257",
 | 
			
		||||
    "cp1258"=>"windows-1258",
 | 
			
		||||
    "windows-1258"=>"windows-1258",
 | 
			
		||||
    "x-cp1258"=>"windows-1258",
 | 
			
		||||
    "x-mac-cyrillic"=>"macCyrillic",
 | 
			
		||||
    "x-mac-ukrainian"=>"macCyrillic",
 | 
			
		||||
    "chinese"=>"gbk",
 | 
			
		||||
    "csgb2312"=>"gbk",
 | 
			
		||||
    "csiso58gb231280"=>"gbk",
 | 
			
		||||
    "gb2312"=>"gbk",
 | 
			
		||||
    "gb_2312"=>"gbk",
 | 
			
		||||
    "gb_2312-80"=>"gbk",
 | 
			
		||||
    "gbk"=>"gbk",
 | 
			
		||||
    "iso-ir-58"=>"gbk",
 | 
			
		||||
    "x-gbk"=>"gbk",
 | 
			
		||||
    "gb18030"=>"gb18030",
 | 
			
		||||
    "big5"=>"big5",
 | 
			
		||||
    "big5-hkscs"=>"big5",
 | 
			
		||||
    "cn-big5"=>"big5",
 | 
			
		||||
    "csbig5"=>"big5",
 | 
			
		||||
    "x-x-big5"=>"big5",
 | 
			
		||||
    "cseucpkdfmtjapanese"=>"cp51932",
 | 
			
		||||
    "euc-jp"=>"cp51932",
 | 
			
		||||
    "x-euc-jp"=>"cp51932",
 | 
			
		||||
    "csiso2022jp"=>"cp50221",
 | 
			
		||||
    "iso-2022-jp"=>"cp50221",
 | 
			
		||||
    "csshiftjis"=>"Windows-31J",
 | 
			
		||||
    "ms932"=>"Windows-31J",
 | 
			
		||||
    "ms_kanji"=>"Windows-31J",
 | 
			
		||||
    "shift-jis"=>"Windows-31J",
 | 
			
		||||
    "shift_jis"=>"Windows-31J",
 | 
			
		||||
    "sjis"=>"Windows-31J",
 | 
			
		||||
    "windows-31j"=>"Windows-31J",
 | 
			
		||||
    "x-sjis"=>"Windows-31J",
 | 
			
		||||
    "cseuckr"=>"euc-kr",
 | 
			
		||||
    "csksc56011987"=>"euc-kr",
 | 
			
		||||
    "euc-kr"=>"euc-kr",
 | 
			
		||||
    "iso-ir-149"=>"euc-kr",
 | 
			
		||||
    "korean"=>"euc-kr",
 | 
			
		||||
    "ks_c_5601-1987"=>"euc-kr",
 | 
			
		||||
    "ks_c_5601-1989"=>"euc-kr",
 | 
			
		||||
    "ksc5601"=>"euc-kr",
 | 
			
		||||
    "ksc_5601"=>"euc-kr",
 | 
			
		||||
    "windows-949"=>"euc-kr",
 | 
			
		||||
    "utf-16be"=>"utf-16be",
 | 
			
		||||
    "utf-16"=>"utf-16le",
 | 
			
		||||
    "utf-16le"=>"utf-16le",
 | 
			
		||||
  } # :nodoc:
 | 
			
		||||
 | 
			
		||||
  # :nodoc:
 | 
			
		||||
  # return encoding or nil
 | 
			
		||||
  # http://encoding.spec.whatwg.org/#concept-encoding-get
 | 
			
		||||
  def self.get_encoding(label)
 | 
			
		||||
    Encoding.find(WEB_ENCODINGS_[label.to_str.strip.downcase]) rescue nil
 | 
			
		||||
  end
 | 
			
		||||
end # module Bundler::URI
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # Returns +uri+ converted to an Bundler::URI object.
 | 
			
		||||
  #
 | 
			
		||||
  def URI(uri)
 | 
			
		||||
    if uri.is_a?(Bundler::URI::Generic)
 | 
			
		||||
      uri
 | 
			
		||||
    elsif uri = String.try_convert(uri)
 | 
			
		||||
      Bundler::URI.parse(uri)
 | 
			
		||||
    else
 | 
			
		||||
      raise ArgumentError,
 | 
			
		||||
        "bad argument (expected Bundler::URI object or Bundler::URI string)"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  module_function :URI
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										94
									
								
								lib/bundler/vendor/uri/lib/uri/file.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								lib/bundler/vendor/uri/lib/uri/file.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,94 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require_relative 'generic'
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # The "file" Bundler::URI is defined by RFC8089.
 | 
			
		||||
  #
 | 
			
		||||
  class File < Generic
 | 
			
		||||
    # A Default port of nil for Bundler::URI::File.
 | 
			
		||||
    DEFAULT_PORT = nil
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # An Array of the available components for Bundler::URI::File.
 | 
			
		||||
    #
 | 
			
		||||
    COMPONENT = [
 | 
			
		||||
      :scheme,
 | 
			
		||||
      :host,
 | 
			
		||||
      :path
 | 
			
		||||
    ].freeze
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Creates a new Bundler::URI::File object from components, with syntax checking.
 | 
			
		||||
    #
 | 
			
		||||
    # The components accepted are +host+ and +path+.
 | 
			
		||||
    #
 | 
			
		||||
    # 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 <code>[host, path]</code>.
 | 
			
		||||
    #
 | 
			
		||||
    # Examples:
 | 
			
		||||
    #
 | 
			
		||||
    #     require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
    #
 | 
			
		||||
    #     uri1 = Bundler::URI::File.build(['host.example.com', '/path/file.zip'])
 | 
			
		||||
    #     uri1.to_s  # => "file://host.example.com/path/file.zip"
 | 
			
		||||
    #
 | 
			
		||||
    #     uri2 = Bundler::URI::File.build({:host => 'host.example.com',
 | 
			
		||||
    #       :path => '/ruby/src'})
 | 
			
		||||
    #     uri2.to_s  # => "file://host.example.com/ruby/src"
 | 
			
		||||
    #
 | 
			
		||||
    def self.build(args)
 | 
			
		||||
      tmp = Util::make_components_hash(self, args)
 | 
			
		||||
      super(tmp)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Protected setter for the host component +v+.
 | 
			
		||||
    #
 | 
			
		||||
    # See also Bundler::URI::Generic.host=.
 | 
			
		||||
    #
 | 
			
		||||
    def set_host(v)
 | 
			
		||||
      v = "" if v.nil? || v == "localhost"
 | 
			
		||||
      @host = v
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # do nothing
 | 
			
		||||
    def set_port(v)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # raise InvalidURIError
 | 
			
		||||
    def check_userinfo(user)
 | 
			
		||||
      raise Bundler::URI::InvalidURIError, "can not set userinfo for file Bundler::URI"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # raise InvalidURIError
 | 
			
		||||
    def check_user(user)
 | 
			
		||||
      raise Bundler::URI::InvalidURIError, "can not set user for file Bundler::URI"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # raise InvalidURIError
 | 
			
		||||
    def check_password(user)
 | 
			
		||||
      raise Bundler::URI::InvalidURIError, "can not set password for file Bundler::URI"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # do nothing
 | 
			
		||||
    def set_userinfo(v)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # do nothing
 | 
			
		||||
    def set_user(v)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # do nothing
 | 
			
		||||
    def set_password(v)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  @@schemes['FILE'] = File
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										267
									
								
								lib/bundler/vendor/uri/lib/uri/ftp.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										267
									
								
								lib/bundler/vendor/uri/lib/uri/ftp.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,267 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
# = uri/ftp.rb
 | 
			
		||||
#
 | 
			
		||||
# Author:: Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# License:: You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require_relative 'generic'
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # FTP Bundler::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.
 | 
			
		||||
  # http://tools.ietf.org/html/draft-hoffman-ftp-uri-04
 | 
			
		||||
  #
 | 
			
		||||
  class FTP < Generic
 | 
			
		||||
    # A Default port of 21 for Bundler::URI::FTP.
 | 
			
		||||
    DEFAULT_PORT = 21
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # An Array of the available components for Bundler::URI::FTP.
 | 
			
		||||
    #
 | 
			
		||||
    COMPONENT = [
 | 
			
		||||
      :scheme,
 | 
			
		||||
      :userinfo, :host, :port,
 | 
			
		||||
      :path, :typecode
 | 
			
		||||
    ].freeze
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Typecode is "a", "i", or "d".
 | 
			
		||||
    #
 | 
			
		||||
    # * "a" indicates a text file (the FTP command was ASCII)
 | 
			
		||||
    # * "i" indicates a binary file (FTP command IMAGE)
 | 
			
		||||
    # * "d" indicates the contents of a directory should be displayed
 | 
			
		||||
    #
 | 
			
		||||
    TYPECODE = ['a', 'i', 'd'].freeze
 | 
			
		||||
 | 
			
		||||
    # Typecode prefix ";type=".
 | 
			
		||||
    TYPECODE_PREFIX = ';type='.freeze
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == 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 <code>[userinfo, host, port, path, typecode]</code>.
 | 
			
		||||
    #
 | 
			
		||||
    # 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"
 | 
			
		||||
    #
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Creates a new Bundler::URI::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.
 | 
			
		||||
    #
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    # typecode accessor.
 | 
			
		||||
    #
 | 
			
		||||
    # See Bundler::URI::FTP::COMPONENT.
 | 
			
		||||
    attr_reader :typecode
 | 
			
		||||
 | 
			
		||||
    # Validates typecode +v+,
 | 
			
		||||
    # returns +true+ or +false+.
 | 
			
		||||
    #
 | 
			
		||||
    def check_typecode(v)
 | 
			
		||||
      if TYPECODE.include?(v)
 | 
			
		||||
        return true
 | 
			
		||||
      else
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad typecode(expected #{TYPECODE.join(', ')}): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    private :check_typecode
 | 
			
		||||
 | 
			
		||||
    # Private setter for the typecode +v+.
 | 
			
		||||
    #
 | 
			
		||||
    # See also Bundler::URI::FTP.typecode=.
 | 
			
		||||
    #
 | 
			
		||||
    def set_typecode(v)
 | 
			
		||||
      @typecode = v
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_typecode
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +v+::
 | 
			
		||||
    #    String
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Public setter for the typecode +v+
 | 
			
		||||
    # (with validation).
 | 
			
		||||
    #
 | 
			
		||||
    # See also Bundler::URI::FTP.check_typecode.
 | 
			
		||||
    #
 | 
			
		||||
    # == Usage
 | 
			
		||||
    #
 | 
			
		||||
    #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
    #
 | 
			
		||||
    #   uri = Bundler::URI.parse("ftp://john@ftp.example.com/my_file.img")
 | 
			
		||||
    #   #=> #<Bundler::URI::FTP ftp://john@ftp.example.com/my_file.img>
 | 
			
		||||
    #   uri.typecode = "i"
 | 
			
		||||
    #   uri
 | 
			
		||||
    #   #=> #<Bundler::URI::FTP ftp://john@ftp.example.com/my_file.img;type=i>
 | 
			
		||||
    #
 | 
			
		||||
    def typecode=(typecode)
 | 
			
		||||
      check_typecode(typecode)
 | 
			
		||||
      set_typecode(typecode)
 | 
			
		||||
      typecode
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def merge(oth) # :nodoc:
 | 
			
		||||
      tmp = super(oth)
 | 
			
		||||
      if self != tmp
 | 
			
		||||
        tmp.set_typecode(oth.typecode)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      return tmp
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Returns the path from an FTP Bundler::URI.
 | 
			
		||||
    #
 | 
			
		||||
    # RFC 1738 specifically states that the path for an FTP Bundler::URI does not
 | 
			
		||||
    # include the / which separates the Bundler::URI path from the Bundler::URI host. Example:
 | 
			
		||||
    #
 | 
			
		||||
    # <code>ftp://ftp.example.com/pub/ruby</code>
 | 
			
		||||
    #
 | 
			
		||||
    # The above Bundler::URI indicates that the client should connect to
 | 
			
		||||
    # ftp.example.com then cd to 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:
 | 
			
		||||
    #
 | 
			
		||||
    # <code>ftp://ftp.example.com/%2Fpub/ruby</code>
 | 
			
		||||
    #
 | 
			
		||||
    # This method will then return "/pub/ruby".
 | 
			
		||||
    #
 | 
			
		||||
    def path
 | 
			
		||||
      return @path.sub(/^\//,'').sub(/^%2F/,'/')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Private setter for the path of the Bundler::URI::FTP.
 | 
			
		||||
    def set_path(v)
 | 
			
		||||
      super("/" + v.sub(/^\//, "%2F"))
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_path
 | 
			
		||||
 | 
			
		||||
    # Returns a String representation of the Bundler::URI::FTP.
 | 
			
		||||
    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
 | 
			
		||||
  end
 | 
			
		||||
  @@schemes['FTP'] = FTP
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										1568
									
								
								lib/bundler/vendor/uri/lib/uri/generic.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1568
									
								
								lib/bundler/vendor/uri/lib/uri/generic.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										88
									
								
								lib/bundler/vendor/uri/lib/uri/http.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								lib/bundler/vendor/uri/lib/uri/http.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
# = uri/http.rb
 | 
			
		||||
#
 | 
			
		||||
# Author:: Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# License:: You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require_relative 'generic'
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # The syntax of HTTP URIs is defined in RFC1738 section 3.3.
 | 
			
		||||
  #
 | 
			
		||||
  # Note that the Ruby Bundler::URI library allows HTTP URLs containing usernames and
 | 
			
		||||
  # passwords. This is not legal as per the RFC, but used to be
 | 
			
		||||
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
 | 
			
		||||
  # update. See <URL:http://support.microsoft.com/kb/834489>.
 | 
			
		||||
  #
 | 
			
		||||
  class HTTP < Generic
 | 
			
		||||
    # A Default port of 80 for Bundler::URI::HTTP.
 | 
			
		||||
    DEFAULT_PORT = 80
 | 
			
		||||
 | 
			
		||||
    # An Array of the available components for Bundler::URI::HTTP.
 | 
			
		||||
    COMPONENT = %i[
 | 
			
		||||
      scheme
 | 
			
		||||
      userinfo host port
 | 
			
		||||
      path
 | 
			
		||||
      query
 | 
			
		||||
      fragment
 | 
			
		||||
    ].freeze
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Creates a new Bundler::URI::HTTP object from components, with syntax checking.
 | 
			
		||||
    #
 | 
			
		||||
    # The components accepted are userinfo, host, port, path, query, and
 | 
			
		||||
    # fragment.
 | 
			
		||||
    #
 | 
			
		||||
    # 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 <code>[userinfo, host, port, path, query, fragment]</code>.
 | 
			
		||||
    #
 | 
			
		||||
    # Example:
 | 
			
		||||
    #
 | 
			
		||||
    #     uri = Bundler::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar')
 | 
			
		||||
    #
 | 
			
		||||
    #     uri = Bundler::URI::HTTP.build([nil, "www.example.com", nil, "/path",
 | 
			
		||||
    #       "query", 'fragment'])
 | 
			
		||||
    #
 | 
			
		||||
    # Currently, if passed userinfo components this method generates
 | 
			
		||||
    # invalid HTTP URIs as per RFC 1738.
 | 
			
		||||
    #
 | 
			
		||||
    def self.build(args)
 | 
			
		||||
      tmp = Util.make_components_hash(self, args)
 | 
			
		||||
      super(tmp)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Returns the full path for an HTTP request, as required by Net::HTTP::Get.
 | 
			
		||||
    #
 | 
			
		||||
    # If the Bundler::URI contains a query, the full path is Bundler::URI#path + '?' + Bundler::URI#query.
 | 
			
		||||
    # Otherwise, the path is simply Bundler::URI#path.
 | 
			
		||||
    #
 | 
			
		||||
    # Example:
 | 
			
		||||
    #
 | 
			
		||||
    #     uri = Bundler::URI::HTTP.build(path: '/foo/bar', query: 'test=true')
 | 
			
		||||
    #     uri.request_uri #  => "/foo/bar?test=true"
 | 
			
		||||
    #
 | 
			
		||||
    def request_uri
 | 
			
		||||
      return unless @path
 | 
			
		||||
 | 
			
		||||
      url = @query ? "#@path?#@query" : @path.dup
 | 
			
		||||
      url.start_with?(?/.freeze) ? url : ?/ + url
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  @@schemes['HTTP'] = HTTP
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										23
									
								
								lib/bundler/vendor/uri/lib/uri/https.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								lib/bundler/vendor/uri/lib/uri/https.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
# = uri/https.rb
 | 
			
		||||
#
 | 
			
		||||
# Author:: Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# License:: You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require_relative 'http'
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
 | 
			
		||||
  # The default port for HTTPS URIs is 443, and the scheme is 'https:' rather
 | 
			
		||||
  # than 'http:'. Other than that, HTTPS URIs are identical to HTTP URIs;
 | 
			
		||||
  # see Bundler::URI::HTTP.
 | 
			
		||||
  class HTTPS < HTTP
 | 
			
		||||
    # A Default port of 443 for Bundler::URI::HTTPS
 | 
			
		||||
    DEFAULT_PORT = 443
 | 
			
		||||
  end
 | 
			
		||||
  @@schemes['HTTPS'] = HTTPS
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										261
									
								
								lib/bundler/vendor/uri/lib/uri/ldap.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										261
									
								
								lib/bundler/vendor/uri/lib/uri/ldap.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,261 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
# = uri/ldap.rb
 | 
			
		||||
#
 | 
			
		||||
# Author::
 | 
			
		||||
#  Takaaki Tateishi <ttate@jaist.ac.jp>
 | 
			
		||||
#  Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# License::
 | 
			
		||||
#   Bundler::URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada.
 | 
			
		||||
#   You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require_relative 'generic'
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # LDAP Bundler::URI SCHEMA (described in RFC2255).
 | 
			
		||||
  #--
 | 
			
		||||
  # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]]
 | 
			
		||||
  #++
 | 
			
		||||
  class LDAP < Generic
 | 
			
		||||
 | 
			
		||||
    # A Default port of 389 for Bundler::URI::LDAP.
 | 
			
		||||
    DEFAULT_PORT = 389
 | 
			
		||||
 | 
			
		||||
    # An Array of the available components for Bundler::URI::LDAP.
 | 
			
		||||
    COMPONENT = [
 | 
			
		||||
      :scheme,
 | 
			
		||||
      :host, :port,
 | 
			
		||||
      :dn,
 | 
			
		||||
      :attributes,
 | 
			
		||||
      :scope,
 | 
			
		||||
      :filter,
 | 
			
		||||
      :extensions,
 | 
			
		||||
    ].freeze
 | 
			
		||||
 | 
			
		||||
    # Scopes available for the starting point.
 | 
			
		||||
    #
 | 
			
		||||
    # * SCOPE_BASE - the Base DN
 | 
			
		||||
    # * SCOPE_ONE  - one level under the Base DN, not including the base DN and
 | 
			
		||||
    #   not including any entries under this
 | 
			
		||||
    # * SCOPE_SUB  - subtrees, all entries at all levels
 | 
			
		||||
    #
 | 
			
		||||
    SCOPE = [
 | 
			
		||||
      SCOPE_ONE = 'one',
 | 
			
		||||
      SCOPE_SUB = 'sub',
 | 
			
		||||
      SCOPE_BASE = 'base',
 | 
			
		||||
    ].freeze
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Creates a new Bundler::URI::LDAP object from components, with syntax checking.
 | 
			
		||||
    #
 | 
			
		||||
    # The components accepted are host, port, dn, attributes,
 | 
			
		||||
    # scope, filter, and extensions.
 | 
			
		||||
    #
 | 
			
		||||
    # 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 <code>[host, port, dn, attributes, scope, filter, extensions]</code>.
 | 
			
		||||
    #
 | 
			
		||||
    # Example:
 | 
			
		||||
    #
 | 
			
		||||
    #     uri = Bundler::URI::LDAP.build({:host => 'ldap.example.com',
 | 
			
		||||
    #       :dn => '/dc=example'})
 | 
			
		||||
    #
 | 
			
		||||
    #     uri = Bundler::URI::LDAP.build(["ldap.example.com", nil,
 | 
			
		||||
    #       "/dc=example;dc=com", "query", nil, nil, nil])
 | 
			
		||||
    #
 | 
			
		||||
    def self.build(args)
 | 
			
		||||
      tmp = Util::make_components_hash(self, args)
 | 
			
		||||
 | 
			
		||||
      if tmp[:dn]
 | 
			
		||||
        tmp[:path] = tmp[:dn]
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      query = []
 | 
			
		||||
      [:extensions, :filter, :scope, :attributes].collect do |x|
 | 
			
		||||
        next if !tmp[x] && query.size == 0
 | 
			
		||||
        query.unshift(tmp[x])
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      tmp[:query] = query.join('?')
 | 
			
		||||
 | 
			
		||||
      return super(tmp)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Creates a new Bundler::URI::LDAP object from generic Bundler::URI components as per
 | 
			
		||||
    # RFC 2396. No LDAP-specific syntax checking is performed.
 | 
			
		||||
    #
 | 
			
		||||
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
 | 
			
		||||
    # +opaque+, +query+, and +fragment+, in that order.
 | 
			
		||||
    #
 | 
			
		||||
    # Example:
 | 
			
		||||
    #
 | 
			
		||||
    #     uri = Bundler::URI::LDAP.new("ldap", nil, "ldap.example.com", nil, nil,
 | 
			
		||||
    #       "/dc=example;dc=com", nil, "query", nil)
 | 
			
		||||
    #
 | 
			
		||||
    # See also Bundler::URI::Generic.new.
 | 
			
		||||
    #
 | 
			
		||||
    def initialize(*arg)
 | 
			
		||||
      super(*arg)
 | 
			
		||||
 | 
			
		||||
      if @fragment
 | 
			
		||||
        raise InvalidURIError, 'bad LDAP URL'
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      parse_dn
 | 
			
		||||
      parse_query
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Private method to cleanup +dn+ from using the +path+ component attribute.
 | 
			
		||||
    def parse_dn
 | 
			
		||||
      @dn = @path[1..-1]
 | 
			
		||||
    end
 | 
			
		||||
    private :parse_dn
 | 
			
		||||
 | 
			
		||||
    # Private method to cleanup +attributes+, +scope+, +filter+, and +extensions+
 | 
			
		||||
    # from using the +query+ component attribute.
 | 
			
		||||
    def parse_query
 | 
			
		||||
      @attributes = nil
 | 
			
		||||
      @scope      = nil
 | 
			
		||||
      @filter     = nil
 | 
			
		||||
      @extensions = nil
 | 
			
		||||
 | 
			
		||||
      if @query
 | 
			
		||||
        attrs, scope, filter, extensions = @query.split('?')
 | 
			
		||||
 | 
			
		||||
        @attributes = attrs if attrs && attrs.size > 0
 | 
			
		||||
        @scope      = scope if scope && scope.size > 0
 | 
			
		||||
        @filter     = filter if filter && filter.size > 0
 | 
			
		||||
        @extensions = extensions if extensions && extensions.size > 0
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    private :parse_query
 | 
			
		||||
 | 
			
		||||
    # Private method to assemble +query+ from +attributes+, +scope+, +filter+, and +extensions+.
 | 
			
		||||
    def build_path_query
 | 
			
		||||
      @path = '/' + @dn
 | 
			
		||||
 | 
			
		||||
      query = []
 | 
			
		||||
      [@extensions, @filter, @scope, @attributes].each do |x|
 | 
			
		||||
        next if !x && query.size == 0
 | 
			
		||||
        query.unshift(x)
 | 
			
		||||
      end
 | 
			
		||||
      @query = query.join('?')
 | 
			
		||||
    end
 | 
			
		||||
    private :build_path_query
 | 
			
		||||
 | 
			
		||||
    # Returns dn.
 | 
			
		||||
    def dn
 | 
			
		||||
      @dn
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Private setter for dn +val+.
 | 
			
		||||
    def set_dn(val)
 | 
			
		||||
      @dn = val
 | 
			
		||||
      build_path_query
 | 
			
		||||
      @dn
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_dn
 | 
			
		||||
 | 
			
		||||
    # Setter for dn +val+.
 | 
			
		||||
    def dn=(val)
 | 
			
		||||
      set_dn(val)
 | 
			
		||||
      val
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Returns attributes.
 | 
			
		||||
    def attributes
 | 
			
		||||
      @attributes
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Private setter for attributes +val+.
 | 
			
		||||
    def set_attributes(val)
 | 
			
		||||
      @attributes = val
 | 
			
		||||
      build_path_query
 | 
			
		||||
      @attributes
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_attributes
 | 
			
		||||
 | 
			
		||||
    # Setter for attributes +val+.
 | 
			
		||||
    def attributes=(val)
 | 
			
		||||
      set_attributes(val)
 | 
			
		||||
      val
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Returns scope.
 | 
			
		||||
    def scope
 | 
			
		||||
      @scope
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Private setter for scope +val+.
 | 
			
		||||
    def set_scope(val)
 | 
			
		||||
      @scope = val
 | 
			
		||||
      build_path_query
 | 
			
		||||
      @scope
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_scope
 | 
			
		||||
 | 
			
		||||
    # Setter for scope +val+.
 | 
			
		||||
    def scope=(val)
 | 
			
		||||
      set_scope(val)
 | 
			
		||||
      val
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Returns filter.
 | 
			
		||||
    def filter
 | 
			
		||||
      @filter
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Private setter for filter +val+.
 | 
			
		||||
    def set_filter(val)
 | 
			
		||||
      @filter = val
 | 
			
		||||
      build_path_query
 | 
			
		||||
      @filter
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_filter
 | 
			
		||||
 | 
			
		||||
    # Setter for filter +val+.
 | 
			
		||||
    def filter=(val)
 | 
			
		||||
      set_filter(val)
 | 
			
		||||
      val
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Returns extensions.
 | 
			
		||||
    def extensions
 | 
			
		||||
      @extensions
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Private setter for extensions +val+.
 | 
			
		||||
    def set_extensions(val)
 | 
			
		||||
      @extensions = val
 | 
			
		||||
      build_path_query
 | 
			
		||||
      @extensions
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_extensions
 | 
			
		||||
 | 
			
		||||
    # Setter for extensions +val+.
 | 
			
		||||
    def extensions=(val)
 | 
			
		||||
      set_extensions(val)
 | 
			
		||||
      val
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Checks if Bundler::URI has a path.
 | 
			
		||||
    # For Bundler::URI::LDAP this will return +false+.
 | 
			
		||||
    def hierarchical?
 | 
			
		||||
      false
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  @@schemes['LDAP'] = LDAP
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										21
									
								
								lib/bundler/vendor/uri/lib/uri/ldaps.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								lib/bundler/vendor/uri/lib/uri/ldaps.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
# = uri/ldap.rb
 | 
			
		||||
#
 | 
			
		||||
# License:: You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require_relative 'ldap'
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
 | 
			
		||||
  # The default port for LDAPS URIs is 636, and the scheme is 'ldaps:' rather
 | 
			
		||||
  # than 'ldap:'. Other than that, LDAPS URIs are identical to LDAP URIs;
 | 
			
		||||
  # see Bundler::URI::LDAP.
 | 
			
		||||
  class LDAPS < LDAP
 | 
			
		||||
    # A Default port of 636 for Bundler::URI::LDAPS
 | 
			
		||||
    DEFAULT_PORT = 636
 | 
			
		||||
  end
 | 
			
		||||
  @@schemes['LDAPS'] = LDAPS
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										294
									
								
								lib/bundler/vendor/uri/lib/uri/mailto.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								lib/bundler/vendor/uri/lib/uri/mailto.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,294 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
# = uri/mailto.rb
 | 
			
		||||
#
 | 
			
		||||
# Author:: Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# License:: You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require_relative 'generic'
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # RFC6068, the mailto URL scheme.
 | 
			
		||||
  #
 | 
			
		||||
  class MailTo < Generic
 | 
			
		||||
    include REGEXP
 | 
			
		||||
 | 
			
		||||
    # A Default port of nil for Bundler::URI::MailTo.
 | 
			
		||||
    DEFAULT_PORT = nil
 | 
			
		||||
 | 
			
		||||
    # An Array of the available components for Bundler::URI::MailTo.
 | 
			
		||||
    COMPONENT = [ :scheme, :to, :headers ].freeze
 | 
			
		||||
 | 
			
		||||
    # :stopdoc:
 | 
			
		||||
    #  "hname" and "hvalue" are encodings of an RFC 822 header name and
 | 
			
		||||
    #  value, respectively. As with "to", all URL reserved characters must
 | 
			
		||||
    #  be encoded.
 | 
			
		||||
    #
 | 
			
		||||
    #  "#mailbox" is as specified in RFC 822 [RFC822]. This means that it
 | 
			
		||||
    #  consists of zero or more comma-separated mail addresses, possibly
 | 
			
		||||
    #  including "phrase" and "comment" components. Note that all URL
 | 
			
		||||
    #  reserved characters in "to" must be encoded: in particular,
 | 
			
		||||
    #  parentheses, commas, and the percent sign ("%"), which commonly occur
 | 
			
		||||
    #  in the "mailbox" syntax.
 | 
			
		||||
    #
 | 
			
		||||
    #  Within mailto URLs, the characters "?", "=", "&" are reserved.
 | 
			
		||||
 | 
			
		||||
    # ; RFC 6068
 | 
			
		||||
    # hfields      = "?" hfield *( "&" hfield )
 | 
			
		||||
    # hfield       = hfname "=" hfvalue
 | 
			
		||||
    # hfname       = *qchar
 | 
			
		||||
    # hfvalue      = *qchar
 | 
			
		||||
    # qchar        = unreserved / pct-encoded / some-delims
 | 
			
		||||
    # some-delims  = "!" / "$" / "'" / "(" / ")" / "*"
 | 
			
		||||
    #              / "+" / "," / ";" / ":" / "@"
 | 
			
		||||
    #
 | 
			
		||||
    # ; RFC3986
 | 
			
		||||
    # unreserved   = ALPHA / DIGIT / "-" / "." / "_" / "~"
 | 
			
		||||
    # pct-encoded  = "%" HEXDIG HEXDIG
 | 
			
		||||
    HEADER_REGEXP  = /\A(?<hfield>(?:%\h\h|[!$'-.0-;@-Z_a-z~])*=(?:%\h\h|[!$'-.0-;@-Z_a-z~])*)(?:&\g<hfield>)*\z/
 | 
			
		||||
    # practical regexp for email address
 | 
			
		||||
    # https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
 | 
			
		||||
    EMAIL_REGEXP = /\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/
 | 
			
		||||
    # :startdoc:
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Creates a new Bundler::URI::MailTo object from components, with syntax checking.
 | 
			
		||||
    #
 | 
			
		||||
    # Components can be provided as an Array or Hash. If an Array is used,
 | 
			
		||||
    # the components must be supplied as <code>[to, headers]</code>.
 | 
			
		||||
    #
 | 
			
		||||
    # If a Hash is used, the keys are the component names preceded by colons.
 | 
			
		||||
    #
 | 
			
		||||
    # The headers can be supplied as a pre-encoded string, such as
 | 
			
		||||
    # <code>"subject=subscribe&cc=address"</code>, or as an Array of Arrays
 | 
			
		||||
    # like <code>[['subject', 'subscribe'], ['cc', 'address']]</code>.
 | 
			
		||||
    #
 | 
			
		||||
    # Examples:
 | 
			
		||||
    #
 | 
			
		||||
    #    require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
    #
 | 
			
		||||
    #    m1 = Bundler::URI::MailTo.build(['joe@example.com', 'subject=Ruby'])
 | 
			
		||||
    #    m1.to_s  # => "mailto:joe@example.com?subject=Ruby"
 | 
			
		||||
    #
 | 
			
		||||
    #    m2 = Bundler::URI::MailTo.build(['john@example.com', [['Subject', 'Ruby'], ['Cc', 'jack@example.com']]])
 | 
			
		||||
    #    m2.to_s  # => "mailto:john@example.com?Subject=Ruby&Cc=jack@example.com"
 | 
			
		||||
    #
 | 
			
		||||
    #    m3 = Bundler::URI::MailTo.build({:to => 'listman@example.com', :headers => [['subject', 'subscribe']]})
 | 
			
		||||
    #    m3.to_s  # => "mailto:listman@example.com?subject=subscribe"
 | 
			
		||||
    #
 | 
			
		||||
    def self.build(args)
 | 
			
		||||
      tmp = Util.make_components_hash(self, args)
 | 
			
		||||
 | 
			
		||||
      case tmp[:to]
 | 
			
		||||
      when Array
 | 
			
		||||
        tmp[:opaque] = tmp[:to].join(',')
 | 
			
		||||
      when String
 | 
			
		||||
        tmp[:opaque] = tmp[:to].dup
 | 
			
		||||
      else
 | 
			
		||||
        tmp[:opaque] = ''
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      if tmp[:headers]
 | 
			
		||||
        query =
 | 
			
		||||
          case tmp[:headers]
 | 
			
		||||
          when Array
 | 
			
		||||
            tmp[:headers].collect { |x|
 | 
			
		||||
              if x.kind_of?(Array)
 | 
			
		||||
                x[0] + '=' + x[1..-1].join
 | 
			
		||||
              else
 | 
			
		||||
                x.to_s
 | 
			
		||||
              end
 | 
			
		||||
            }.join('&')
 | 
			
		||||
          when Hash
 | 
			
		||||
            tmp[:headers].collect { |h,v|
 | 
			
		||||
              h + '=' + v
 | 
			
		||||
            }.join('&')
 | 
			
		||||
          else
 | 
			
		||||
            tmp[:headers].to_s
 | 
			
		||||
          end
 | 
			
		||||
        unless query.empty?
 | 
			
		||||
          tmp[:opaque] << '?' << query
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      super(tmp)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Creates a new Bundler::URI::MailTo object from generic URL components with
 | 
			
		||||
    # no syntax checking.
 | 
			
		||||
    #
 | 
			
		||||
    # This method is usually called from Bundler::URI::parse, which checks
 | 
			
		||||
    # the validity of each component.
 | 
			
		||||
    #
 | 
			
		||||
    def initialize(*arg)
 | 
			
		||||
      super(*arg)
 | 
			
		||||
 | 
			
		||||
      @to = nil
 | 
			
		||||
      @headers = []
 | 
			
		||||
 | 
			
		||||
      # The RFC3986 parser does not normally populate opaque
 | 
			
		||||
      @opaque = "?#{@query}" if @query && !@opaque
 | 
			
		||||
 | 
			
		||||
      unless @opaque
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "missing opaque part for mailto URL"
 | 
			
		||||
      end
 | 
			
		||||
      to, header = @opaque.split('?', 2)
 | 
			
		||||
      # allow semicolon as a addr-spec separator
 | 
			
		||||
      # http://support.microsoft.com/kb/820868
 | 
			
		||||
      unless /\A(?:[^@,;]+@[^@,;]+(?:\z|[,;]))*\z/ =~ to
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "unrecognised opaque part for mailtoURL: #{@opaque}"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      if arg[10] # arg_check
 | 
			
		||||
        self.to = to
 | 
			
		||||
        self.headers = header
 | 
			
		||||
      else
 | 
			
		||||
        set_to(to)
 | 
			
		||||
        set_headers(header)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # The primary e-mail address of the URL, as a String.
 | 
			
		||||
    attr_reader :to
 | 
			
		||||
 | 
			
		||||
    # E-mail headers set by the URL, as an Array of Arrays.
 | 
			
		||||
    attr_reader :headers
 | 
			
		||||
 | 
			
		||||
    # Checks the to +v+ component.
 | 
			
		||||
    def check_to(v)
 | 
			
		||||
      return true unless v
 | 
			
		||||
      return true if v.size == 0
 | 
			
		||||
 | 
			
		||||
      v.split(/[,;]/).each do |addr|
 | 
			
		||||
        # check url safety as path-rootless
 | 
			
		||||
        if /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*\z/ !~ addr
 | 
			
		||||
          raise InvalidComponentError,
 | 
			
		||||
            "an address in 'to' is invalid as Bundler::URI #{addr.dump}"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        # check addr-spec
 | 
			
		||||
        # don't s/\+/ /g
 | 
			
		||||
        addr.gsub!(/%\h\h/, Bundler::URI::TBLDECWWWCOMP_)
 | 
			
		||||
        if EMAIL_REGEXP !~ addr
 | 
			
		||||
          raise InvalidComponentError,
 | 
			
		||||
            "an address in 'to' is invalid as uri-escaped addr-spec #{addr.dump}"
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      true
 | 
			
		||||
    end
 | 
			
		||||
    private :check_to
 | 
			
		||||
 | 
			
		||||
    # Private setter for to +v+.
 | 
			
		||||
    def set_to(v)
 | 
			
		||||
      @to = v
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_to
 | 
			
		||||
 | 
			
		||||
    # Setter for to +v+.
 | 
			
		||||
    def to=(v)
 | 
			
		||||
      check_to(v)
 | 
			
		||||
      set_to(v)
 | 
			
		||||
      v
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Checks the headers +v+ component against either
 | 
			
		||||
    # * HEADER_REGEXP
 | 
			
		||||
    def check_headers(v)
 | 
			
		||||
      return true unless v
 | 
			
		||||
      return true if v.size == 0
 | 
			
		||||
      if HEADER_REGEXP !~ v
 | 
			
		||||
        raise InvalidComponentError,
 | 
			
		||||
          "bad component(expected opaque component): #{v}"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      true
 | 
			
		||||
    end
 | 
			
		||||
    private :check_headers
 | 
			
		||||
 | 
			
		||||
    # Private setter for headers +v+.
 | 
			
		||||
    def set_headers(v)
 | 
			
		||||
      @headers = []
 | 
			
		||||
      if v
 | 
			
		||||
        v.split('&').each do |x|
 | 
			
		||||
          @headers << x.split(/=/, 2)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    protected :set_headers
 | 
			
		||||
 | 
			
		||||
    # Setter for headers +v+.
 | 
			
		||||
    def headers=(v)
 | 
			
		||||
      check_headers(v)
 | 
			
		||||
      set_headers(v)
 | 
			
		||||
      v
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Constructs String from Bundler::URI.
 | 
			
		||||
    def to_s
 | 
			
		||||
      @scheme + ':' +
 | 
			
		||||
        if @to
 | 
			
		||||
          @to
 | 
			
		||||
        else
 | 
			
		||||
          ''
 | 
			
		||||
        end +
 | 
			
		||||
        if @headers.size > 0
 | 
			
		||||
          '?' + @headers.collect{|x| x.join('=')}.join('&')
 | 
			
		||||
        else
 | 
			
		||||
          ''
 | 
			
		||||
        end +
 | 
			
		||||
        if @fragment
 | 
			
		||||
          '#' + @fragment
 | 
			
		||||
        else
 | 
			
		||||
          ''
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Returns the RFC822 e-mail text equivalent of the URL, as a String.
 | 
			
		||||
    #
 | 
			
		||||
    # Example:
 | 
			
		||||
    #
 | 
			
		||||
    #   require 'bundler/vendor/uri/lib/uri'
 | 
			
		||||
    #
 | 
			
		||||
    #   uri = Bundler::URI.parse("mailto:ruby-list@ruby-lang.org?Subject=subscribe&cc=myaddr")
 | 
			
		||||
    #   uri.to_mailtext
 | 
			
		||||
    #   # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"
 | 
			
		||||
    #
 | 
			
		||||
    def to_mailtext
 | 
			
		||||
      to = Bundler::URI.decode_www_form_component(@to)
 | 
			
		||||
      head = ''
 | 
			
		||||
      body = ''
 | 
			
		||||
      @headers.each do |x|
 | 
			
		||||
        case x[0]
 | 
			
		||||
        when 'body'
 | 
			
		||||
          body = Bundler::URI.decode_www_form_component(x[1])
 | 
			
		||||
        when 'to'
 | 
			
		||||
          to << ', ' + Bundler::URI.decode_www_form_component(x[1])
 | 
			
		||||
        else
 | 
			
		||||
          head << Bundler::URI.decode_www_form_component(x[0]).capitalize + ': ' +
 | 
			
		||||
            Bundler::URI.decode_www_form_component(x[1])  + "\n"
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      "To: #{to}
 | 
			
		||||
#{head}
 | 
			
		||||
#{body}
 | 
			
		||||
"
 | 
			
		||||
    end
 | 
			
		||||
    alias to_rfc822text to_mailtext
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  @@schemes['MAILTO'] = MailTo
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										546
									
								
								lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										546
									
								
								lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,546 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
#--
 | 
			
		||||
# = uri/common.rb
 | 
			
		||||
#
 | 
			
		||||
# Author:: Akira Yamada <akira@ruby-lang.org>
 | 
			
		||||
# Revision:: $Id$
 | 
			
		||||
# License::
 | 
			
		||||
#   You can redistribute it and/or modify it under the same term as Ruby.
 | 
			
		||||
#
 | 
			
		||||
# See Bundler::URI for general documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
  #
 | 
			
		||||
  # Includes Bundler::URI::REGEXP::PATTERN
 | 
			
		||||
  #
 | 
			
		||||
  module RFC2396_REGEXP
 | 
			
		||||
    #
 | 
			
		||||
    # Patterns used to parse Bundler::URI's
 | 
			
		||||
    #
 | 
			
		||||
    module PATTERN
 | 
			
		||||
      # :stopdoc:
 | 
			
		||||
 | 
			
		||||
      # RFC 2396 (Bundler::URI Generic Syntax)
 | 
			
		||||
      # RFC 2732 (IPv6 Literal Addresses in URL's)
 | 
			
		||||
      # RFC 2373 (IPv6 Addressing Architecture)
 | 
			
		||||
 | 
			
		||||
      # alpha         = lowalpha | upalpha
 | 
			
		||||
      ALPHA = "a-zA-Z"
 | 
			
		||||
      # alphanum      = alpha | digit
 | 
			
		||||
      ALNUM = "#{ALPHA}\\d"
 | 
			
		||||
 | 
			
		||||
      # hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" |
 | 
			
		||||
      #                         "a" | "b" | "c" | "d" | "e" | "f"
 | 
			
		||||
      HEX     = "a-fA-F\\d"
 | 
			
		||||
      # escaped       = "%" hex hex
 | 
			
		||||
      ESCAPED = "%[#{HEX}]{2}"
 | 
			
		||||
      # mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
 | 
			
		||||
      #                 "(" | ")"
 | 
			
		||||
      # unreserved    = alphanum | mark
 | 
			
		||||
      UNRESERVED = "\\-_.!~*'()#{ALNUM}"
 | 
			
		||||
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
 | 
			
		||||
      #                 "$" | ","
 | 
			
		||||
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
 | 
			
		||||
      #                 "$" | "," | "[" | "]" (RFC 2732)
 | 
			
		||||
      RESERVED = ";/?:@&=+$,\\[\\]"
 | 
			
		||||
 | 
			
		||||
      # domainlabel   = alphanum | alphanum *( alphanum | "-" ) alphanum
 | 
			
		||||
      DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
 | 
			
		||||
      # toplabel      = alpha | alpha *( alphanum | "-" ) alphanum
 | 
			
		||||
      TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
 | 
			
		||||
      # hostname      = *( domainlabel "." ) toplabel [ "." ]
 | 
			
		||||
      HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"
 | 
			
		||||
 | 
			
		||||
      # :startdoc:
 | 
			
		||||
    end # PATTERN
 | 
			
		||||
 | 
			
		||||
    # :startdoc:
 | 
			
		||||
  end # REGEXP
 | 
			
		||||
 | 
			
		||||
  # Class that parses String's into Bundler::URI's.
 | 
			
		||||
  #
 | 
			
		||||
  # It contains a Hash set of patterns and Regexp's that match and validate.
 | 
			
		||||
  #
 | 
			
		||||
  class RFC2396_Parser
 | 
			
		||||
    include RFC2396_REGEXP
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Synopsis
 | 
			
		||||
    #
 | 
			
		||||
    #   Bundler::URI::Parser.new([opts])
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # The constructor accepts a hash as options for parser.
 | 
			
		||||
    # Keys of options are pattern names of Bundler::URI components
 | 
			
		||||
    # and values of options are pattern strings.
 | 
			
		||||
    # The constructor generates set of regexps for parsing URIs.
 | 
			
		||||
    #
 | 
			
		||||
    # You can use the following keys:
 | 
			
		||||
    #
 | 
			
		||||
    #   * :ESCAPED (Bundler::URI::PATTERN::ESCAPED in default)
 | 
			
		||||
    #   * :UNRESERVED (Bundler::URI::PATTERN::UNRESERVED in default)
 | 
			
		||||
    #   * :DOMLABEL (Bundler::URI::PATTERN::DOMLABEL in default)
 | 
			
		||||
    #   * :TOPLABEL (Bundler::URI::PATTERN::TOPLABEL in default)
 | 
			
		||||
    #   * :HOSTNAME (Bundler::URI::PATTERN::HOSTNAME in default)
 | 
			
		||||
    #
 | 
			
		||||
    # == Examples
 | 
			
		||||
    #
 | 
			
		||||
    #   p = Bundler::URI::Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
 | 
			
		||||
    #   u = p.parse("http://example.jp/%uABCD") #=> #<Bundler::URI::HTTP http://example.jp/%uABCD>
 | 
			
		||||
    #   Bundler::URI.parse(u.to_s) #=> raises Bundler::URI::InvalidURIError
 | 
			
		||||
    #
 | 
			
		||||
    #   s = "http://example.com/ABCD"
 | 
			
		||||
    #   u1 = p.parse(s) #=> #<Bundler::URI::HTTP http://example.com/ABCD>
 | 
			
		||||
    #   u2 = Bundler::URI.parse(s) #=> #<Bundler::URI::HTTP http://example.com/ABCD>
 | 
			
		||||
    #   u1 == u2 #=> true
 | 
			
		||||
    #   u1.eql?(u2) #=> false
 | 
			
		||||
    #
 | 
			
		||||
    def initialize(opts = {})
 | 
			
		||||
      @pattern = initialize_pattern(opts)
 | 
			
		||||
      @pattern.each_value(&:freeze)
 | 
			
		||||
      @pattern.freeze
 | 
			
		||||
 | 
			
		||||
      @regexp = initialize_regexp(@pattern)
 | 
			
		||||
      @regexp.each_value(&:freeze)
 | 
			
		||||
      @regexp.freeze
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # The Hash of patterns.
 | 
			
		||||
    #
 | 
			
		||||
    # See also Bundler::URI::Parser.initialize_pattern.
 | 
			
		||||
    attr_reader :pattern
 | 
			
		||||
 | 
			
		||||
    # The Hash of Regexp.
 | 
			
		||||
    #
 | 
			
		||||
    # See also Bundler::URI::Parser.initialize_regexp.
 | 
			
		||||
    attr_reader :regexp
 | 
			
		||||
 | 
			
		||||
    # Returns a split Bundler::URI against regexp[:ABS_URI].
 | 
			
		||||
    def split(uri)
 | 
			
		||||
      case uri
 | 
			
		||||
      when ''
 | 
			
		||||
        # null uri
 | 
			
		||||
 | 
			
		||||
      when @regexp[:ABS_URI]
 | 
			
		||||
        scheme, opaque, userinfo, host, port,
 | 
			
		||||
          registry, path, query, fragment = $~[1..-1]
 | 
			
		||||
 | 
			
		||||
        # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
 | 
			
		||||
 | 
			
		||||
        # absoluteURI   = scheme ":" ( hier_part | opaque_part )
 | 
			
		||||
        # hier_part     = ( net_path | abs_path ) [ "?" query ]
 | 
			
		||||
        # opaque_part   = uric_no_slash *uric
 | 
			
		||||
 | 
			
		||||
        # abs_path      = "/"  path_segments
 | 
			
		||||
        # net_path      = "//" authority [ abs_path ]
 | 
			
		||||
 | 
			
		||||
        # authority     = server | reg_name
 | 
			
		||||
        # server        = [ [ userinfo "@" ] hostport ]
 | 
			
		||||
 | 
			
		||||
        if !scheme
 | 
			
		||||
          raise InvalidURIError,
 | 
			
		||||
            "bad Bundler::URI(absolute but no scheme): #{uri}"
 | 
			
		||||
        end
 | 
			
		||||
        if !opaque && (!path && (!host && !registry))
 | 
			
		||||
          raise InvalidURIError,
 | 
			
		||||
            "bad Bundler::URI(absolute but no path): #{uri}"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
      when @regexp[:REL_URI]
 | 
			
		||||
        scheme = nil
 | 
			
		||||
        opaque = nil
 | 
			
		||||
 | 
			
		||||
        userinfo, host, port, registry,
 | 
			
		||||
          rel_segment, abs_path, query, fragment = $~[1..-1]
 | 
			
		||||
        if rel_segment && abs_path
 | 
			
		||||
          path = rel_segment + abs_path
 | 
			
		||||
        elsif rel_segment
 | 
			
		||||
          path = rel_segment
 | 
			
		||||
        elsif abs_path
 | 
			
		||||
          path = abs_path
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
 | 
			
		||||
 | 
			
		||||
        # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
 | 
			
		||||
 | 
			
		||||
        # net_path      = "//" authority [ abs_path ]
 | 
			
		||||
        # abs_path      = "/"  path_segments
 | 
			
		||||
        # rel_path      = rel_segment [ abs_path ]
 | 
			
		||||
 | 
			
		||||
        # authority     = server | reg_name
 | 
			
		||||
        # server        = [ [ userinfo "@" ] hostport ]
 | 
			
		||||
 | 
			
		||||
      else
 | 
			
		||||
        raise InvalidURIError, "bad Bundler::URI(is not Bundler::URI?): #{uri}"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      path = '' if !path && !opaque # (see RFC2396 Section 5.2)
 | 
			
		||||
      ret = [
 | 
			
		||||
        scheme,
 | 
			
		||||
        userinfo, host, port,         # X
 | 
			
		||||
        registry,                     # X
 | 
			
		||||
        path,                         # Y
 | 
			
		||||
        opaque,                       # Y
 | 
			
		||||
        query,
 | 
			
		||||
        fragment
 | 
			
		||||
      ]
 | 
			
		||||
      return ret
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +uri+::
 | 
			
		||||
    #    String
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Parses +uri+ and constructs either matching Bundler::URI scheme object
 | 
			
		||||
    # (File, FTP, HTTP, HTTPS, LDAP, LDAPS, or MailTo) or Bundler::URI::Generic.
 | 
			
		||||
    #
 | 
			
		||||
    # == Usage
 | 
			
		||||
    #
 | 
			
		||||
    #   p = Bundler::URI::Parser.new
 | 
			
		||||
    #   p.parse("ldap://ldap.example.com/dc=example?user=john")
 | 
			
		||||
    #   #=> #<Bundler::URI::LDAP ldap://ldap.example.com/dc=example?user=john>
 | 
			
		||||
    #
 | 
			
		||||
    def parse(uri)
 | 
			
		||||
      scheme, userinfo, host, port,
 | 
			
		||||
        registry, path, opaque, query, fragment = self.split(uri)
 | 
			
		||||
 | 
			
		||||
      if scheme && Bundler::URI.scheme_list.include?(scheme.upcase)
 | 
			
		||||
        Bundler::URI.scheme_list[scheme.upcase].new(scheme, userinfo, host, port,
 | 
			
		||||
                                           registry, path, opaque, query,
 | 
			
		||||
                                           fragment, self)
 | 
			
		||||
      else
 | 
			
		||||
        Generic.new(scheme, userinfo, host, port,
 | 
			
		||||
                    registry, path, opaque, query,
 | 
			
		||||
                    fragment, self)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +uris+::
 | 
			
		||||
    #    an Array of Strings
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Attempts to parse and merge a set of URIs.
 | 
			
		||||
    #
 | 
			
		||||
    def join(*uris)
 | 
			
		||||
      uris[0] = convert_to_uri(uris[0])
 | 
			
		||||
      uris.inject :merge
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # :call-seq:
 | 
			
		||||
    #   extract( str )
 | 
			
		||||
    #   extract( str, schemes )
 | 
			
		||||
    #   extract( str, schemes ) {|item| block }
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +str+::
 | 
			
		||||
    #    String to search
 | 
			
		||||
    # +schemes+::
 | 
			
		||||
    #    Patterns to apply to +str+
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Attempts to parse and merge a set of URIs.
 | 
			
		||||
    # If no +block+ given, then returns the result,
 | 
			
		||||
    # else it calls +block+ for each element in result.
 | 
			
		||||
    #
 | 
			
		||||
    # See also Bundler::URI::Parser.make_regexp.
 | 
			
		||||
    #
 | 
			
		||||
    def extract(str, schemes = nil)
 | 
			
		||||
      if block_given?
 | 
			
		||||
        str.scan(make_regexp(schemes)) { yield $& }
 | 
			
		||||
        nil
 | 
			
		||||
      else
 | 
			
		||||
        result = []
 | 
			
		||||
        str.scan(make_regexp(schemes)) { result.push $& }
 | 
			
		||||
        result
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Returns Regexp that is default self.regexp[:ABS_URI_REF],
 | 
			
		||||
    # unless +schemes+ is provided. Then it is a Regexp.union with self.pattern[:X_ABS_URI].
 | 
			
		||||
    def make_regexp(schemes = nil)
 | 
			
		||||
      unless schemes
 | 
			
		||||
        @regexp[:ABS_URI_REF]
 | 
			
		||||
      else
 | 
			
		||||
        /(?=#{Regexp.union(*schemes)}:)#{@pattern[:X_ABS_URI]}/x
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # :call-seq:
 | 
			
		||||
    #   escape( str )
 | 
			
		||||
    #   escape( str, unsafe )
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +str+::
 | 
			
		||||
    #    String to make safe
 | 
			
		||||
    # +unsafe+::
 | 
			
		||||
    #    Regexp to apply. Defaults to self.regexp[:UNSAFE]
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Constructs a safe String from +str+, removing unsafe characters,
 | 
			
		||||
    # replacing them with codes.
 | 
			
		||||
    #
 | 
			
		||||
    def escape(str, unsafe = @regexp[:UNSAFE])
 | 
			
		||||
      unless unsafe.kind_of?(Regexp)
 | 
			
		||||
        # perhaps unsafe is String object
 | 
			
		||||
        unsafe = Regexp.new("[#{Regexp.quote(unsafe)}]", false)
 | 
			
		||||
      end
 | 
			
		||||
      str.gsub(unsafe) do
 | 
			
		||||
        us = $&
 | 
			
		||||
        tmp = ''
 | 
			
		||||
        us.each_byte do |uc|
 | 
			
		||||
          tmp << sprintf('%%%02X', uc)
 | 
			
		||||
        end
 | 
			
		||||
        tmp
 | 
			
		||||
      end.force_encoding(Encoding::US_ASCII)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # :call-seq:
 | 
			
		||||
    #   unescape( str )
 | 
			
		||||
    #   unescape( str, escaped )
 | 
			
		||||
    #
 | 
			
		||||
    # == Args
 | 
			
		||||
    #
 | 
			
		||||
    # +str+::
 | 
			
		||||
    #    String to remove escapes from
 | 
			
		||||
    # +escaped+::
 | 
			
		||||
    #    Regexp to apply. Defaults to self.regexp[:ESCAPED]
 | 
			
		||||
    #
 | 
			
		||||
    # == Description
 | 
			
		||||
    #
 | 
			
		||||
    # Removes escapes from +str+.
 | 
			
		||||
    #
 | 
			
		||||
    def unescape(str, escaped = @regexp[:ESCAPED])
 | 
			
		||||
      enc = str.encoding
 | 
			
		||||
      enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
 | 
			
		||||
      str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    @@to_s = Kernel.instance_method(:to_s)
 | 
			
		||||
    def inspect
 | 
			
		||||
      @@to_s.bind_call(self)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    private
 | 
			
		||||
 | 
			
		||||
    # Constructs the default Hash of patterns.
 | 
			
		||||
    def initialize_pattern(opts = {})
 | 
			
		||||
      ret = {}
 | 
			
		||||
      ret[:ESCAPED] = escaped = (opts.delete(:ESCAPED) || PATTERN::ESCAPED)
 | 
			
		||||
      ret[:UNRESERVED] = unreserved = opts.delete(:UNRESERVED) || PATTERN::UNRESERVED
 | 
			
		||||
      ret[:RESERVED] = reserved = opts.delete(:RESERVED) || PATTERN::RESERVED
 | 
			
		||||
      ret[:DOMLABEL] = opts.delete(:DOMLABEL) || PATTERN::DOMLABEL
 | 
			
		||||
      ret[:TOPLABEL] = opts.delete(:TOPLABEL) || PATTERN::TOPLABEL
 | 
			
		||||
      ret[:HOSTNAME] = hostname = opts.delete(:HOSTNAME)
 | 
			
		||||
 | 
			
		||||
      # RFC 2396 (Bundler::URI Generic Syntax)
 | 
			
		||||
      # RFC 2732 (IPv6 Literal Addresses in URL's)
 | 
			
		||||
      # RFC 2373 (IPv6 Addressing Architecture)
 | 
			
		||||
 | 
			
		||||
      # uric          = reserved | unreserved | escaped
 | 
			
		||||
      ret[:URIC] = uric = "(?:[#{unreserved}#{reserved}]|#{escaped})"
 | 
			
		||||
      # uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
 | 
			
		||||
      #                 "&" | "=" | "+" | "$" | ","
 | 
			
		||||
      ret[:URIC_NO_SLASH] = uric_no_slash = "(?:[#{unreserved};?:@&=+$,]|#{escaped})"
 | 
			
		||||
      # query         = *uric
 | 
			
		||||
      ret[:QUERY] = query = "#{uric}*"
 | 
			
		||||
      # fragment      = *uric
 | 
			
		||||
      ret[:FRAGMENT] = fragment = "#{uric}*"
 | 
			
		||||
 | 
			
		||||
      # hostname      = *( domainlabel "." ) toplabel [ "." ]
 | 
			
		||||
      # reg-name      = *( unreserved / pct-encoded / sub-delims ) # RFC3986
 | 
			
		||||
      unless hostname
 | 
			
		||||
        ret[:HOSTNAME] = hostname = "(?:[a-zA-Z0-9\\-.]|%\\h\\h)+"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # RFC 2373, APPENDIX B:
 | 
			
		||||
      # IPv6address = hexpart [ ":" IPv4address ]
 | 
			
		||||
      # IPv4address   = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
 | 
			
		||||
      # hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
 | 
			
		||||
      # hexseq  = hex4 *( ":" hex4)
 | 
			
		||||
      # hex4    = 1*4HEXDIG
 | 
			
		||||
      #
 | 
			
		||||
      # XXX: This definition has a flaw. "::" + IPv4address must be
 | 
			
		||||
      # allowed too.  Here is a replacement.
 | 
			
		||||
      #
 | 
			
		||||
      # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
 | 
			
		||||
      ret[:IPV4ADDR] = ipv4addr = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
 | 
			
		||||
      # hex4     = 1*4HEXDIG
 | 
			
		||||
      hex4 = "[#{PATTERN::HEX}]{1,4}"
 | 
			
		||||
      # lastpart = hex4 | IPv4address
 | 
			
		||||
      lastpart = "(?:#{hex4}|#{ipv4addr})"
 | 
			
		||||
      # hexseq1  = *( hex4 ":" ) hex4
 | 
			
		||||
      hexseq1 = "(?:#{hex4}:)*#{hex4}"
 | 
			
		||||
      # hexseq2  = *( hex4 ":" ) lastpart
 | 
			
		||||
      hexseq2 = "(?:#{hex4}:)*#{lastpart}"
 | 
			
		||||
      # IPv6address = hexseq2 | [ hexseq1 ] "::" [ hexseq2 ]
 | 
			
		||||
      ret[:IPV6ADDR] = ipv6addr = "(?:#{hexseq2}|(?:#{hexseq1})?::(?:#{hexseq2})?)"
 | 
			
		||||
 | 
			
		||||
      # IPv6prefix  = ( hexseq1 | [ hexseq1 ] "::" [ hexseq1 ] ) "/" 1*2DIGIT
 | 
			
		||||
      # unused
 | 
			
		||||
 | 
			
		||||
      # ipv6reference = "[" IPv6address "]" (RFC 2732)
 | 
			
		||||
      ret[:IPV6REF] = ipv6ref = "\\[#{ipv6addr}\\]"
 | 
			
		||||
 | 
			
		||||
      # host          = hostname | IPv4address
 | 
			
		||||
      # host          = hostname | IPv4address | IPv6reference (RFC 2732)
 | 
			
		||||
      ret[:HOST] = host = "(?:#{hostname}|#{ipv4addr}|#{ipv6ref})"
 | 
			
		||||
      # port          = *digit
 | 
			
		||||
      ret[:PORT] = port = '\d*'
 | 
			
		||||
      # hostport      = host [ ":" port ]
 | 
			
		||||
      ret[:HOSTPORT] = hostport = "#{host}(?::#{port})?"
 | 
			
		||||
 | 
			
		||||
      # userinfo      = *( unreserved | escaped |
 | 
			
		||||
      #                    ";" | ":" | "&" | "=" | "+" | "$" | "," )
 | 
			
		||||
      ret[:USERINFO] = userinfo = "(?:[#{unreserved};:&=+$,]|#{escaped})*"
 | 
			
		||||
 | 
			
		||||
      # pchar         = unreserved | escaped |
 | 
			
		||||
      #                 ":" | "@" | "&" | "=" | "+" | "$" | ","
 | 
			
		||||
      pchar = "(?:[#{unreserved}:@&=+$,]|#{escaped})"
 | 
			
		||||
      # param         = *pchar
 | 
			
		||||
      param = "#{pchar}*"
 | 
			
		||||
      # segment       = *pchar *( ";" param )
 | 
			
		||||
      segment = "#{pchar}*(?:;#{param})*"
 | 
			
		||||
      # path_segments = segment *( "/" segment )
 | 
			
		||||
      ret[:PATH_SEGMENTS] = path_segments = "#{segment}(?:/#{segment})*"
 | 
			
		||||
 | 
			
		||||
      # server        = [ [ userinfo "@" ] hostport ]
 | 
			
		||||
      server = "(?:#{userinfo}@)?#{hostport}"
 | 
			
		||||
      # reg_name      = 1*( unreserved | escaped | "$" | "," |
 | 
			
		||||
      #                     ";" | ":" | "@" | "&" | "=" | "+" )
 | 
			
		||||
      ret[:REG_NAME] = reg_name = "(?:[#{unreserved}$,;:@&=+]|#{escaped})+"
 | 
			
		||||
      # authority     = server | reg_name
 | 
			
		||||
      authority = "(?:#{server}|#{reg_name})"
 | 
			
		||||
 | 
			
		||||
      # rel_segment   = 1*( unreserved | escaped |
 | 
			
		||||
      #                     ";" | "@" | "&" | "=" | "+" | "$" | "," )
 | 
			
		||||
      ret[:REL_SEGMENT] = rel_segment = "(?:[#{unreserved};@&=+$,]|#{escaped})+"
 | 
			
		||||
 | 
			
		||||
      # scheme        = alpha *( alpha | digit | "+" | "-" | "." )
 | 
			
		||||
      ret[:SCHEME] = scheme = "[#{PATTERN::ALPHA}][\\-+.#{PATTERN::ALPHA}\\d]*"
 | 
			
		||||
 | 
			
		||||
      # abs_path      = "/"  path_segments
 | 
			
		||||
      ret[:ABS_PATH] = abs_path = "/#{path_segments}"
 | 
			
		||||
      # rel_path      = rel_segment [ abs_path ]
 | 
			
		||||
      ret[:REL_PATH] = rel_path = "#{rel_segment}(?:#{abs_path})?"
 | 
			
		||||
      # net_path      = "//" authority [ abs_path ]
 | 
			
		||||
      ret[:NET_PATH] = net_path = "//#{authority}(?:#{abs_path})?"
 | 
			
		||||
 | 
			
		||||
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
 | 
			
		||||
      ret[:HIER_PART] = hier_part = "(?:#{net_path}|#{abs_path})(?:\\?(?:#{query}))?"
 | 
			
		||||
      # opaque_part   = uric_no_slash *uric
 | 
			
		||||
      ret[:OPAQUE_PART] = opaque_part = "#{uric_no_slash}#{uric}*"
 | 
			
		||||
 | 
			
		||||
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
 | 
			
		||||
      ret[:ABS_URI] = abs_uri = "#{scheme}:(?:#{hier_part}|#{opaque_part})"
 | 
			
		||||
      # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
 | 
			
		||||
      ret[:REL_URI] = rel_uri = "(?:#{net_path}|#{abs_path}|#{rel_path})(?:\\?#{query})?"
 | 
			
		||||
 | 
			
		||||
      # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
 | 
			
		||||
      ret[:URI_REF] = "(?:#{abs_uri}|#{rel_uri})?(?:##{fragment})?"
 | 
			
		||||
 | 
			
		||||
      ret[:X_ABS_URI] = "
 | 
			
		||||
        (#{scheme}):                           (?# 1: scheme)
 | 
			
		||||
        (?:
 | 
			
		||||
           (#{opaque_part})                    (?# 2: opaque)
 | 
			
		||||
        |
 | 
			
		||||
           (?:(?:
 | 
			
		||||
             //(?:
 | 
			
		||||
                 (?:(?:(#{userinfo})@)?        (?# 3: userinfo)
 | 
			
		||||
                   (?:(#{host})(?::(\\d*))?))? (?# 4: host, 5: port)
 | 
			
		||||
               |
 | 
			
		||||
                 (#{reg_name})                 (?# 6: registry)
 | 
			
		||||
               )
 | 
			
		||||
             |
 | 
			
		||||
             (?!//))                           (?# XXX: '//' is the mark for hostport)
 | 
			
		||||
             (#{abs_path})?                    (?# 7: path)
 | 
			
		||||
           )(?:\\?(#{query}))?                 (?# 8: query)
 | 
			
		||||
        )
 | 
			
		||||
        (?:\\#(#{fragment}))?                  (?# 9: fragment)
 | 
			
		||||
      "
 | 
			
		||||
 | 
			
		||||
      ret[:X_REL_URI] = "
 | 
			
		||||
        (?:
 | 
			
		||||
          (?:
 | 
			
		||||
            //
 | 
			
		||||
            (?:
 | 
			
		||||
              (?:(#{userinfo})@)?       (?# 1: userinfo)
 | 
			
		||||
                (#{host})?(?::(\\d*))?  (?# 2: host, 3: port)
 | 
			
		||||
            |
 | 
			
		||||
              (#{reg_name})             (?# 4: registry)
 | 
			
		||||
            )
 | 
			
		||||
          )
 | 
			
		||||
        |
 | 
			
		||||
          (#{rel_segment})              (?# 5: rel_segment)
 | 
			
		||||
        )?
 | 
			
		||||
        (#{abs_path})?                  (?# 6: abs_path)
 | 
			
		||||
        (?:\\?(#{query}))?              (?# 7: query)
 | 
			
		||||
        (?:\\#(#{fragment}))?           (?# 8: fragment)
 | 
			
		||||
      "
 | 
			
		||||
 | 
			
		||||
      ret
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Constructs the default Hash of Regexp's.
 | 
			
		||||
    def initialize_regexp(pattern)
 | 
			
		||||
      ret = {}
 | 
			
		||||
 | 
			
		||||
      # for Bundler::URI::split
 | 
			
		||||
      ret[:ABS_URI] = Regexp.new('\A\s*' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
 | 
			
		||||
      ret[:REL_URI] = Regexp.new('\A\s*' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)
 | 
			
		||||
 | 
			
		||||
      # for Bundler::URI::extract
 | 
			
		||||
      ret[:URI_REF]     = Regexp.new(pattern[:URI_REF])
 | 
			
		||||
      ret[:ABS_URI_REF] = Regexp.new(pattern[:X_ABS_URI], Regexp::EXTENDED)
 | 
			
		||||
      ret[:REL_URI_REF] = Regexp.new(pattern[:X_REL_URI], Regexp::EXTENDED)
 | 
			
		||||
 | 
			
		||||
      # for Bundler::URI::escape/unescape
 | 
			
		||||
      ret[:ESCAPED] = Regexp.new(pattern[:ESCAPED])
 | 
			
		||||
      ret[:UNSAFE]  = Regexp.new("[^#{pattern[:UNRESERVED]}#{pattern[:RESERVED]}]")
 | 
			
		||||
 | 
			
		||||
      # for Generic#initialize
 | 
			
		||||
      ret[:SCHEME]   = Regexp.new("\\A#{pattern[:SCHEME]}\\z")
 | 
			
		||||
      ret[:USERINFO] = Regexp.new("\\A#{pattern[:USERINFO]}\\z")
 | 
			
		||||
      ret[:HOST]     = Regexp.new("\\A#{pattern[:HOST]}\\z")
 | 
			
		||||
      ret[:PORT]     = Regexp.new("\\A#{pattern[:PORT]}\\z")
 | 
			
		||||
      ret[:OPAQUE]   = Regexp.new("\\A#{pattern[:OPAQUE_PART]}\\z")
 | 
			
		||||
      ret[:REGISTRY] = Regexp.new("\\A#{pattern[:REG_NAME]}\\z")
 | 
			
		||||
      ret[:ABS_PATH] = Regexp.new("\\A#{pattern[:ABS_PATH]}\\z")
 | 
			
		||||
      ret[:REL_PATH] = Regexp.new("\\A#{pattern[:REL_PATH]}\\z")
 | 
			
		||||
      ret[:QUERY]    = Regexp.new("\\A#{pattern[:QUERY]}\\z")
 | 
			
		||||
      ret[:FRAGMENT] = Regexp.new("\\A#{pattern[:FRAGMENT]}\\z")
 | 
			
		||||
 | 
			
		||||
      ret
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def convert_to_uri(uri)
 | 
			
		||||
      if uri.is_a?(Bundler::URI::Generic)
 | 
			
		||||
        uri
 | 
			
		||||
      elsif uri = String.try_convert(uri)
 | 
			
		||||
        parse(uri)
 | 
			
		||||
      else
 | 
			
		||||
        raise ArgumentError,
 | 
			
		||||
          "bad argument (expected Bundler::URI object or Bundler::URI string)"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end # class Parser
 | 
			
		||||
end # module Bundler::URI
 | 
			
		||||
							
								
								
									
										125
									
								
								lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,125 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
module Bundler::URI
 | 
			
		||||
  class RFC3986_Parser # :nodoc:
 | 
			
		||||
    # Bundler::URI defined in RFC3986
 | 
			
		||||
    # this regexp is modified not to host is not empty string
 | 
			
		||||
    RFC3986_URI = /\A(?<Bundler::URI>(?<scheme>[A-Za-z][+\-.0-9A-Za-z]*):(?<hier-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*)@)?(?<host>(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h+\.[!$&-.0-;=A-Z_a-z~]+))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])+))?(?::(?<port>\d*))?)(?<path-abempty>(?:\/(?<segment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*))*)|(?<path-absolute>\/(?:(?<segment-nz>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])+)(?:\/\g<segment>)*)?)|(?<path-rootless>\g<segment-nz>(?:\/\g<segment>)*)|(?<path-empty>))(?:\?(?<query>[^#]*))?(?:\#(?<fragment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*))?)\z/
 | 
			
		||||
    RFC3986_relative_ref = /\A(?<relative-ref>(?<relative-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*)@)?(?<host>(?<IP-literal>\[(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:){,1}\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h+\.[!$&-.0-;=A-Z_a-z~]+)\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])+))?(?::(?<port>\d*))?)(?<path-abempty>(?:\/(?<segment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*))*)|(?<path-absolute>\/(?:(?<segment-nz>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])+)(?:\/\g<segment>)*)?)|(?<path-noscheme>(?<segment-nz-nc>(?:%\h\h|[!$&-.0-9;=@-Z_a-z~])+)(?:\/\g<segment>)*)|(?<path-empty>))(?:\?(?<query>[^#]*))?(?:\#(?<fragment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*))?)\z/
 | 
			
		||||
    attr_reader :regexp
 | 
			
		||||
 | 
			
		||||
    def initialize
 | 
			
		||||
      @regexp = default_regexp.each_value(&:freeze).freeze
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def split(uri) #:nodoc:
 | 
			
		||||
      begin
 | 
			
		||||
        uri = uri.to_str
 | 
			
		||||
      rescue NoMethodError
 | 
			
		||||
        raise InvalidURIError, "bad Bundler::URI(is not Bundler::URI?): #{uri.inspect}"
 | 
			
		||||
      end
 | 
			
		||||
      uri.ascii_only? or
 | 
			
		||||
        raise InvalidURIError, "Bundler::URI must be ascii only #{uri.dump}"
 | 
			
		||||
      if m = RFC3986_URI.match(uri)
 | 
			
		||||
        query = m["query".freeze]
 | 
			
		||||
        scheme = m["scheme".freeze]
 | 
			
		||||
        opaque = m["path-rootless".freeze]
 | 
			
		||||
        if opaque
 | 
			
		||||
          opaque << "?#{query}" if query
 | 
			
		||||
          [ scheme,
 | 
			
		||||
            nil, # userinfo
 | 
			
		||||
            nil, # host
 | 
			
		||||
            nil, # port
 | 
			
		||||
            nil, # registry
 | 
			
		||||
            nil, # path
 | 
			
		||||
            opaque,
 | 
			
		||||
            nil, # query
 | 
			
		||||
            m["fragment".freeze]
 | 
			
		||||
          ]
 | 
			
		||||
        else # normal
 | 
			
		||||
          [ scheme,
 | 
			
		||||
            m["userinfo".freeze],
 | 
			
		||||
            m["host".freeze],
 | 
			
		||||
            m["port".freeze],
 | 
			
		||||
            nil, # registry
 | 
			
		||||
            (m["path-abempty".freeze] ||
 | 
			
		||||
             m["path-absolute".freeze] ||
 | 
			
		||||
             m["path-empty".freeze]),
 | 
			
		||||
            nil, # opaque
 | 
			
		||||
            query,
 | 
			
		||||
            m["fragment".freeze]
 | 
			
		||||
          ]
 | 
			
		||||
        end
 | 
			
		||||
      elsif m = RFC3986_relative_ref.match(uri)
 | 
			
		||||
        [ nil, # scheme
 | 
			
		||||
          m["userinfo".freeze],
 | 
			
		||||
          m["host".freeze],
 | 
			
		||||
          m["port".freeze],
 | 
			
		||||
          nil, # registry,
 | 
			
		||||
          (m["path-abempty".freeze] ||
 | 
			
		||||
           m["path-absolute".freeze] ||
 | 
			
		||||
           m["path-noscheme".freeze] ||
 | 
			
		||||
           m["path-empty".freeze]),
 | 
			
		||||
          nil, # opaque
 | 
			
		||||
          m["query".freeze],
 | 
			
		||||
          m["fragment".freeze]
 | 
			
		||||
        ]
 | 
			
		||||
      else
 | 
			
		||||
        raise InvalidURIError, "bad Bundler::URI(is not Bundler::URI?): #{uri.inspect}"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def parse(uri) # :nodoc:
 | 
			
		||||
      scheme, userinfo, host, port,
 | 
			
		||||
        registry, path, opaque, query, fragment = self.split(uri)
 | 
			
		||||
      scheme_list = Bundler::URI.scheme_list
 | 
			
		||||
      if scheme && scheme_list.include?(uc = scheme.upcase)
 | 
			
		||||
        scheme_list[uc].new(scheme, userinfo, host, port,
 | 
			
		||||
                            registry, path, opaque, query,
 | 
			
		||||
                            fragment, self)
 | 
			
		||||
      else
 | 
			
		||||
        Generic.new(scheme, userinfo, host, port,
 | 
			
		||||
                    registry, path, opaque, query,
 | 
			
		||||
                    fragment, self)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def join(*uris) # :nodoc:
 | 
			
		||||
      uris[0] = convert_to_uri(uris[0])
 | 
			
		||||
      uris.inject :merge
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    @@to_s = Kernel.instance_method(:to_s)
 | 
			
		||||
    def inspect
 | 
			
		||||
      @@to_s.bind_call(self)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    private
 | 
			
		||||
 | 
			
		||||
    def default_regexp # :nodoc:
 | 
			
		||||
      {
 | 
			
		||||
        SCHEME: /\A[A-Za-z][A-Za-z0-9+\-.]*\z/,
 | 
			
		||||
        USERINFO: /\A(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*\z/,
 | 
			
		||||
        HOST: /\A(?:(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{,4}::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h+\.[!$&-.0-;=A-Z_a-z~]+))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*))\z/,
 | 
			
		||||
        ABS_PATH: /\A\/(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*(?:\/(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*)*\z/,
 | 
			
		||||
        REL_PATH: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~])+(?:\/(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*)*\z/,
 | 
			
		||||
        QUERY: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
 | 
			
		||||
        FRAGMENT: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
 | 
			
		||||
        OPAQUE: /\A(?:[^\/].*)?\z/,
 | 
			
		||||
        PORT: /\A[\x09\x0a\x0c\x0d ]*\d*[\x09\x0a\x0c\x0d ]*\z/,
 | 
			
		||||
      }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def convert_to_uri(uri)
 | 
			
		||||
      if uri.is_a?(Bundler::URI::Generic)
 | 
			
		||||
        uri
 | 
			
		||||
      elsif uri = String.try_convert(uri)
 | 
			
		||||
        parse(uri)
 | 
			
		||||
      else
 | 
			
		||||
        raise ArgumentError,
 | 
			
		||||
          "bad argument (expected Bundler::URI object or Bundler::URI string)"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end # class Parser
 | 
			
		||||
end # module Bundler::URI
 | 
			
		||||
							
								
								
									
										6
									
								
								lib/bundler/vendor/uri/lib/uri/version.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								lib/bundler/vendor/uri/lib/uri/version.rb
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
module Bundler::URI
 | 
			
		||||
  # :stopdoc:
 | 
			
		||||
  VERSION_CODE = '001000'.freeze
 | 
			
		||||
  VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
 | 
			
		||||
  # :startdoc:
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										4
									
								
								lib/bundler/vendored_uri.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								lib/bundler/vendored_uri.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
module Bundler; end
 | 
			
		||||
require_relative "vendor/uri/lib/uri"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
# frozen_string_literal: false
 | 
			
		||||
 | 
			
		||||
module Bundler
 | 
			
		||||
  VERSION = "2.1.0.pre.3".freeze
 | 
			
		||||
  VERSION = "2.1.0".freeze
 | 
			
		||||
 | 
			
		||||
  def self.bundler_major_version
 | 
			
		||||
    @bundler_major_version ||= VERSION.split(".").first.to_i
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-ADD" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-ADD" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,4 +55,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			 BUNDLE-ADD(1)
 | 
			
		||||
				 December 2019			 BUNDLE-ADD(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-BINSTUBS" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-BINSTUBS" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,4 +45,4 @@ BUNDLE INSTALL --BINSTUBS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		    BUNDLE-BINSTUBS(1)
 | 
			
		||||
				 December 2019		    BUNDLE-BINSTUBS(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-CACHE" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-CACHE" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,4 +75,4 @@ REMOTE FETCHING
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		       BUNDLE-CACHE(1)
 | 
			
		||||
				 December 2019		       BUNDLE-CACHE(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-CHECK" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-CHECK" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,4 +30,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		       BUNDLE-CHECK(1)
 | 
			
		||||
				 December 2019		       BUNDLE-CHECK(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-CLEAN" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-CLEAN" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,4 +23,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		       BUNDLE-CLEAN(1)
 | 
			
		||||
				 December 2019		       BUNDLE-CLEAN(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-CONFIG" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-CONFIG" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-config\fR \- Set bundler configuration options
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -525,4 +525,4 @@ CONFIGURE BUNDLER DIRECTORIES
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		      BUNDLE-CONFIG(1)
 | 
			
		||||
				 December 2019		      BUNDLE-CONFIG(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-DOCTOR" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-DOCTOR" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-doctor\fR \- Checks the bundle for common problems
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,4 +41,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		      BUNDLE-DOCTOR(1)
 | 
			
		||||
				 December 2019		      BUNDLE-DOCTOR(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-EXEC" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-EXEC" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,4 +175,4 @@ RUBYGEMS PLUGINS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			BUNDLE-EXEC(1)
 | 
			
		||||
				 December 2019			BUNDLE-EXEC(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-GEM" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-GEM" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,4 +88,4 @@ SEE ALSO
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			 BUNDLE-GEM(1)
 | 
			
		||||
				 December 2019			 BUNDLE-GEM(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-INFO" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-INFO" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-info\fR \- Show information for the given gem in your bundle
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,4 +18,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			BUNDLE-INFO(1)
 | 
			
		||||
				 December 2019			BUNDLE-INFO(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-INIT" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-INIT" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,4 +31,4 @@ SEE ALSO
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			BUNDLE-INIT(1)
 | 
			
		||||
				 December 2019			BUNDLE-INIT(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-INJECT" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-INJECT" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,4 +29,4 @@ DESCRIPTION
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		      BUNDLE-INJECT(1)
 | 
			
		||||
				 December 2019		      BUNDLE-INJECT(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-INSTALL" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-INSTALL" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -398,4 +398,4 @@ SEE ALSO
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		     BUNDLE-INSTALL(1)
 | 
			
		||||
				 December 2019		     BUNDLE-INSTALL(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-LIST" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-LIST" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-list\fR \- List all the gems in the bundle
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,4 +40,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			BUNDLE-LIST(1)
 | 
			
		||||
				 December 2019			BUNDLE-LIST(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-LOCK" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-LOCK" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,4 +90,4 @@ PATCH LEVEL OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			BUNDLE-LOCK(1)
 | 
			
		||||
				 December 2019			BUNDLE-LOCK(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-OPEN" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-OPEN" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,4 +26,4 @@ DESCRIPTION
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			BUNDLE-OPEN(1)
 | 
			
		||||
				 December 2019			BUNDLE-OPEN(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-OUTDATED" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-OUTDATED" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-outdated\fR \- List installed gems with newer versions available
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -128,4 +128,4 @@ FILTERING OUTPUT
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		    BUNDLE-OUTDATED(1)
 | 
			
		||||
				 December 2019		    BUNDLE-OUTDATED(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-PLATFORM" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-PLATFORM" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-platform\fR \- Displays platform compatibility information
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,4 +54,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		    BUNDLE-PLATFORM(1)
 | 
			
		||||
				 December 2019		    BUNDLE-PLATFORM(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-PRISTINE" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-PRISTINE" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,4 +41,4 @@ DESCRIPTION
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		    BUNDLE-PRISTINE(1)
 | 
			
		||||
				 December 2019		    BUNDLE-PRISTINE(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-REMOVE" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-REMOVE" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-remove\fR \- Removes gems from the Gemfile
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,4 +31,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		      BUNDLE-REMOVE(1)
 | 
			
		||||
				 December 2019		      BUNDLE-REMOVE(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-SHOW" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-SHOW" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,4 +24,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			BUNDLE-SHOW(1)
 | 
			
		||||
				 December 2019			BUNDLE-SHOW(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-UPDATE" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-UPDATE" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-update\fR \- Update your gems to the latest available versions
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -387,4 +387,4 @@ RECOMMENDED WORKFLOW
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019		      BUNDLE-UPDATE(1)
 | 
			
		||||
				 December 2019		      BUNDLE-UPDATE(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE\-VIZ" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE\-VIZ" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,4 +36,4 @@ OPTIONS
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			 BUNDLE-VIZ(1)
 | 
			
		||||
				 December 2019			 BUNDLE-VIZ(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "BUNDLE" "1" "November 2019" "" ""
 | 
			
		||||
.TH "BUNDLE" "1" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBbundle\fR \- Ruby Dependency Management
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,4 +113,4 @@ OBSOLETE
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			     BUNDLE(1)
 | 
			
		||||
				 December 2019			     BUNDLE(1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
.\" generated with Ronn/v0.7.3
 | 
			
		||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
 | 
			
		||||
.
 | 
			
		||||
.TH "GEMFILE" "5" "November 2019" "" ""
 | 
			
		||||
.TH "GEMFILE" "5" "December 2019" "" ""
 | 
			
		||||
.
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -646,4 +646,4 @@ SOURCE PRIORITY
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				 November 2019			    GEMFILE(5)
 | 
			
		||||
				 December 2019			    GEMFILE(5)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ RSpec.describe Bundler::Definition do
 | 
			
		|||
        s.add_dependency "rack", "1.0"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      bundle :install, :env => { "DEBUG" => 1 }
 | 
			
		||||
      bundle :install, :env => { "DEBUG" => "1" }
 | 
			
		||||
 | 
			
		||||
      expect(out).to match(/re-resolving dependencies/)
 | 
			
		||||
      lockfile_should_be <<-G
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ RSpec.describe Bundler::Definition do
 | 
			
		|||
        s.add_dependency "rack", "1.0"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      bundle :install, :env => { "DEBUG" => 1 }
 | 
			
		||||
      bundle :install, :env => { "DEBUG" => "1" }
 | 
			
		||||
 | 
			
		||||
      expect(out).to match(/re-resolving dependencies/)
 | 
			
		||||
      lockfile_should_be <<-G
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +121,7 @@ RSpec.describe Bundler::Definition do
 | 
			
		|||
        gem "foo", :path => "#{lib_path("foo")}"
 | 
			
		||||
      G
 | 
			
		||||
 | 
			
		||||
      bundle :check, :env => { "DEBUG" => 1 }
 | 
			
		||||
      bundle :check, :env => { "DEBUG" => "1" }
 | 
			
		||||
 | 
			
		||||
      expect(out).to match(/using resolution from the lockfile/)
 | 
			
		||||
      lockfile_should_be <<-G
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ RSpec.describe Bundler::Definition do
 | 
			
		|||
      G
 | 
			
		||||
 | 
			
		||||
      bundle "lock --add-platform java"
 | 
			
		||||
      bundle :check, :env => { "DEBUG" => 1 }
 | 
			
		||||
      bundle :check, :env => { "DEBUG" => "1" }
 | 
			
		||||
 | 
			
		||||
      expect(out).to match(/using resolution from the lockfile/)
 | 
			
		||||
      lockfile_should_be <<-G
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ RSpec.describe Bundler::Definition do
 | 
			
		|||
        gem "foo"
 | 
			
		||||
      G
 | 
			
		||||
 | 
			
		||||
      bundle :check, :env => { "DEBUG" => 1 }
 | 
			
		||||
      bundle :check, :env => { "DEBUG" => "1" }
 | 
			
		||||
 | 
			
		||||
      expect(out).to match(/using resolution from the lockfile/)
 | 
			
		||||
      lockfile_should_be <<-G
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue