diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls.rb
new file mode 100644
index 0000000000..b6d672e89d
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls.rb
@@ -0,0 +1,101 @@
+require "coveralls/version"
+require "coveralls/configuration"
+require "coveralls/api"
+require "coveralls/output"
+require "coveralls/simplecov"
+
+module Coveralls
+ extend self
+
+ class NilFormatter
+ def format(result)
+ end
+ end
+
+ attr_accessor :testing, :noisy, :run_locally
+
+ def wear!(simplecov_setting=nil, &block)
+ setup!
+ start! simplecov_setting, &block
+ end
+
+ def wear_merged!(simplecov_setting=nil, &block)
+ require 'simplecov'
+ @@adapter = :simplecov
+ ::SimpleCov.formatter = NilFormatter
+ start! simplecov_setting, &block
+ end
+
+ def push!
+ require 'simplecov'
+ result = ::SimpleCov::ResultMerger.merged_result
+ Coveralls::SimpleCov::Formatter.new.format result
+ end
+
+ def setup!
+ # Try to load up SimpleCov.
+ @@adapter = nil
+ if defined?(::SimpleCov)
+ @@adapter = :simplecov
+ else
+ begin
+ require 'simplecov'
+ @@adapter = :simplecov if defined?(::SimpleCov)
+ rescue
+ end
+ end
+
+ # Load the appropriate adapter.
+ if @@adapter == :simplecov
+ ::SimpleCov.formatter = Coveralls::SimpleCov::Formatter
+ Coveralls::Output.puts("[Coveralls] Set up the SimpleCov formatter.", :color => "green")
+ else
+ Coveralls::Output.puts("[Coveralls] Couldn't find an appropriate adapter.", :color => "red")
+ end
+
+ end
+
+ def start!(simplecov_setting = 'test_frameworks', &block)
+ if @@adapter == :simplecov
+ ::SimpleCov.add_filter 'vendor'
+
+ if simplecov_setting
+ Coveralls::Output.puts("[Coveralls] Using SimpleCov's '#{simplecov_setting}' settings.", :color => "green")
+ if block_given?
+ ::SimpleCov.start(simplecov_setting) { instance_eval(&block)}
+ else
+ ::SimpleCov.start(simplecov_setting)
+ end
+ elsif block
+ Coveralls::Output.puts("[Coveralls] Using SimpleCov settings defined in block.", :color => "green")
+ ::SimpleCov.start { instance_eval(&block) }
+ else
+ Coveralls::Output.puts("[Coveralls] Using SimpleCov's default settings.", :color => "green")
+ ::SimpleCov.start
+ end
+ end
+ end
+
+ def should_run?
+ # Fail early if we're not on a CI
+ unless will_run?
+ Coveralls::Output.puts("[Coveralls] Outside the CI environment, not sending data.", :color => "yellow")
+ return false
+ end
+
+ if ENV["COVERALLS_RUN_LOCALLY"] || (defined?(@run_locally) && @run_locally)
+ Coveralls::Output.puts("[Coveralls] Creating a new job on Coveralls from local coverage results.", :color => "cyan")
+ end
+
+ true
+ end
+
+ def will_run?
+ ENV["CI"] || ENV["JENKINS_URL"] || ENV['TDDIUM'] ||
+ ENV["COVERALLS_RUN_LOCALLY"] || (defined?(@testing) && @testing)
+ end
+
+ def noisy?
+ ENV["COVERALLS_NOISY"] || (defined?(@noisy) && @noisy)
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/api.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/api.rb
new file mode 100644
index 0000000000..1b268db347
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/api.rb
@@ -0,0 +1,128 @@
+require 'json'
+require 'net/https'
+require 'tempfile'
+
+module Coveralls
+ class API
+ if ENV['COVERALLS_ENDPOINT']
+ API_HOST = ENV['COVERALLS_ENDPOINT']
+ API_DOMAIN = ENV['COVERALLS_ENDPOINT']
+ else
+ API_HOST = ENV['COVERALLS_DEVELOPMENT'] ? "localhost:3000" : "coveralls.io"
+ API_PROTOCOL = ENV['COVERALLS_DEVELOPMENT'] ? "http" : "https"
+ API_DOMAIN = "#{API_PROTOCOL}://#{API_HOST}"
+ end
+
+ API_BASE = "#{API_DOMAIN}/api/v1"
+
+ def self.post_json(endpoint, hash)
+ disable_net_blockers!
+
+ uri = endpoint_to_uri(endpoint)
+
+ Coveralls::Output.puts("#{ JSON.pretty_generate(hash) }", :color => "green") if ENV['COVERALLS_DEBUG']
+ Coveralls::Output.puts("[Coveralls] Submitting to #{API_BASE}", :color => "cyan")
+
+ client = build_client(uri)
+ request = build_request(uri.path, hash)
+
+ response = client.request(request)
+
+ response_hash = JSON.load(response.body.to_str)
+
+ if response_hash['message']
+ Coveralls::Output.puts("[Coveralls] #{ response_hash['message'] }", :color => "cyan")
+ end
+
+ if response_hash['url']
+ Coveralls::Output.puts("[Coveralls] #{ Coveralls::Output.format(response_hash['url'], :color => "underline") }", :color => "cyan")
+ end
+
+ case response
+ when Net::HTTPServiceUnavailable
+ Coveralls::Output.puts("[Coveralls] API timeout occured, but data should still be processed", :color => "red")
+ when Net::HTTPInternalServerError
+ Coveralls::Output.puts("[Coveralls] API internal error occured, we're on it!", :color => "red")
+ end
+ end
+
+ private
+
+ def self.disable_net_blockers!
+ begin
+ require 'webmock'
+
+ allow = WebMock::Config.instance.allow || []
+ WebMock::Config.instance.allow = [*allow].push API_HOST
+ rescue LoadError
+ end
+
+ begin
+ require 'vcr'
+
+ VCR.send(VCR.version.major < 2 ? :config : :configure) do |c|
+ c.ignore_hosts API_HOST
+ end
+ rescue LoadError
+ end
+ end
+
+ def self.endpoint_to_uri(endpoint)
+ URI.parse("#{API_BASE}/#{endpoint}")
+ end
+
+ def self.build_client(uri)
+ client = Net::HTTP.new(uri.host, uri.port)
+ client.use_ssl = true if uri.port == 443
+ client.verify_mode = OpenSSL::SSL::VERIFY_NONE
+
+ unless client.respond_to?(:ssl_version=)
+ Net::HTTP.ssl_context_accessor("ssl_version")
+ end
+
+ client.ssl_version = 'TLSv1'
+
+ client
+ end
+
+ def self.build_request(path, hash)
+ request = Net::HTTP::Post.new(path)
+ boundary = rand(1_000_000).to_s
+
+ request.body = build_request_body(hash, boundary)
+ request.content_type = "multipart/form-data, boundary=#{boundary}"
+
+ request
+ end
+
+ def self.build_request_body(hash, boundary)
+ hash = apified_hash(hash)
+ file = hash_to_file(hash)
+
+ "--#{boundary}\r\n" \
+ "Content-Disposition: form-data; name=\"json_file\"; filename=\"#{File.basename(file.path)}\"\r\n" \
+ "Content-Type: text/plain\r\n\r\n" +
+ File.read(file.path) +
+ "\r\n--#{boundary}--\r\n"
+ end
+
+ def self.hash_to_file(hash)
+ file = nil
+ Tempfile.open(['coveralls-upload', 'json']) do |f|
+ f.write(JSON.dump hash)
+ file = f
+ end
+ File.new(file.path, 'rb')
+ end
+
+ def self.apified_hash hash
+ config = Coveralls::Configuration.configuration
+ if ENV['COVERALLS_DEBUG'] || Coveralls.testing
+ Coveralls::Output.puts "[Coveralls] Submitting with config:", :color => "yellow"
+ output = JSON.pretty_generate(config).gsub(/"repo_token": ?"(.*?)"/,'"repo_token": "[secure]"')
+ Coveralls::Output.puts output, :color => "yellow"
+ end
+ hash.merge(config)
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/command.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/command.rb
new file mode 100644
index 0000000000..2a9f262cff
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/command.rb
@@ -0,0 +1,69 @@
+require "thor"
+
+module Coveralls
+ class CommandLine < Thor
+
+ desc "push", "Runs your test suite and pushes the coverage results to Coveralls."
+ def push
+ return unless ensure_can_run_locally!
+ ENV["COVERALLS_RUN_LOCALLY"] = "true"
+ cmds = "bundle exec rake"
+ if File.exist?('.travis.yml')
+ cmds = YAML.load_file('.travis.yml')["script"] || cmds rescue cmds
+ end
+ cmds.each { |cmd| system cmd }
+ ENV["COVERALLS_RUN_LOCALLY"] = nil
+ end
+
+ desc "report", "Runs your test suite locally and displays coverage statistics."
+ def report
+ ENV["COVERALLS_NOISY"] = "true"
+ exec "bundle exec rake"
+ ENV["COVERALLS_NOISY"] = nil
+ end
+
+ desc "open", "View this repository on Coveralls."
+ def open
+ open_token_based_url "https://coveralls.io/repos/%@"
+ end
+
+ desc "service", "View this repository on your CI service's website."
+ def service
+ open_token_based_url "https://coveralls.io/repos/%@/service"
+ end
+
+ desc "last", "View the last build for this repository on Coveralls."
+ def last
+ open_token_based_url "https://coveralls.io/repos/%@/last_build"
+ end
+
+ desc "version", "See version"
+ def version
+ Coveralls::Output.puts Coveralls::VERSION
+ end
+
+ private
+
+ def open_token_based_url url
+ config = Coveralls::Configuration.configuration
+ if config[:repo_token]
+ url = url.gsub("%@", config[:repo_token])
+ `open #{url}`
+ else
+ Coveralls::Output.puts "No repo_token configured."
+ end
+ end
+
+ def ensure_can_run_locally!
+ config = Coveralls::Configuration.configuration
+ if config[:repo_token].nil?
+ Coveralls::Output.puts "Coveralls cannot run locally because no repo_secret_token is set in .coveralls.yml", :color => "red"
+ Coveralls::Output.puts "Please try again when you get your act together.", :color => "red"
+
+ return false
+ end
+ true
+ end
+
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/configuration.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/configuration.rb
new file mode 100644
index 0000000000..605094f4b3
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/configuration.rb
@@ -0,0 +1,233 @@
+require 'yaml'
+require 'securerandom'
+
+module Coveralls
+ module Configuration
+
+ def self.configuration
+ config = {
+ :environment => self.relevant_env,
+ :git => git
+ }
+ yml = self.yaml_config
+ if yml
+ config[:configuration] = yml
+ config[:repo_token] = yml['repo_token'] || yml['repo_secret_token']
+ end
+ if ENV['COVERALLS_REPO_TOKEN']
+ config[:repo_token] = ENV['COVERALLS_REPO_TOKEN']
+ end
+ if ENV['COVERALLS_PARALLEL'] && ENV['COVERALLS_PARALLEL'] != "false"
+ config[:parallel] = true
+ end
+ if ENV['COVERALLS_FLAG_NAME']
+ config[:flag_name] = ENV['COVERALLS_FLAG_NAME']
+ end
+ if ENV['TRAVIS']
+ set_service_params_for_travis(config, yml ? yml['service_name'] : nil)
+ elsif ENV['CIRCLECI']
+ set_service_params_for_circleci(config)
+ elsif ENV['SEMAPHORE']
+ set_service_params_for_semaphore(config)
+ elsif ENV['JENKINS_URL'] || ENV['JENKINS_HOME']
+ set_service_params_for_jenkins(config)
+ elsif ENV['APPVEYOR']
+ set_service_params_for_appveyor(config)
+ elsif ENV['TDDIUM']
+ set_service_params_for_tddium(config)
+ elsif ENV['GITLAB_CI']
+ set_service_params_for_gitlab(config)
+ elsif ENV['COVERALLS_RUN_LOCALLY'] || Coveralls.testing
+ set_service_params_for_coveralls_local(config)
+ end
+
+ # standardized env vars
+ set_standard_service_params_for_generic_ci(config)
+
+ if service_name = ENV['COVERALLS_SERVICE_NAME']
+ config[:service_name] = service_name
+ end
+
+ config
+ end
+
+ def self.set_service_params_for_travis(config, service_name)
+ config[:service_job_id] = ENV['TRAVIS_JOB_ID']
+ config[:service_pull_request] = ENV['TRAVIS_PULL_REQUEST'] unless ENV['TRAVIS_PULL_REQUEST'] == 'false'
+ config[:service_name] = service_name || 'travis-ci'
+ config[:service_branch] = ENV['TRAVIS_BRANCH']
+ end
+
+ def self.set_service_params_for_circleci(config)
+ config[:service_name] = 'circleci'
+ config[:service_number] = ENV['CIRCLE_BUILD_NUM']
+ config[:service_pull_request] = (ENV['CI_PULL_REQUEST'] || "")[/(\d+)$/,1]
+ config[:parallel] = ENV['CIRCLE_NODE_TOTAL'].to_i > 1
+ config[:service_job_number] = ENV['CIRCLE_NODE_INDEX']
+ end
+
+ def self.set_service_params_for_semaphore(config)
+ config[:service_name] = 'semaphore'
+ config[:service_number] = ENV['SEMAPHORE_BUILD_NUMBER']
+ config[:service_pull_request] = ENV['PULL_REQUEST_NUMBER']
+ end
+
+ def self.set_service_params_for_jenkins(config)
+ config[:service_name] = 'jenkins'
+ config[:service_number] = ENV['BUILD_NUMBER']
+ config[:service_branch] = ENV['BRANCH_NAME']
+ config[:service_pull_request] = ENV['ghprbPullId']
+ end
+
+ def self.set_service_params_for_appveyor(config)
+ config[:service_name] = 'appveyor'
+ config[:service_number] = ENV['APPVEYOR_BUILD_VERSION']
+ config[:service_branch] = ENV['APPVEYOR_REPO_BRANCH']
+ config[:commit_sha] = ENV['APPVEYOR_REPO_COMMIT']
+ repo_name = ENV['APPVEYOR_REPO_NAME']
+ config[:service_build_url] = 'https://ci.appveyor.com/project/%s/build/%s' % [repo_name, config[:service_number]]
+ end
+
+ def self.set_service_params_for_tddium(config)
+ config[:service_name] = 'tddium'
+ config[:service_number] = ENV['TDDIUM_SESSION_ID']
+ config[:service_job_number] = ENV['TDDIUM_TID']
+ config[:service_pull_request] = ENV['TDDIUM_PR_ID']
+ config[:service_branch] = ENV['TDDIUM_CURRENT_BRANCH']
+ config[:service_build_url] = "https://ci.solanolabs.com/reports/#{ENV['TDDIUM_SESSION_ID']}"
+ end
+
+ def self.set_service_params_for_gitlab(config)
+ config[:service_name] = 'gitlab-ci'
+ config[:service_job_number] = ENV['CI_BUILD_NAME']
+ config[:service_job_id] = ENV['CI_BUILD_ID']
+ config[:service_branch] = ENV['CI_BUILD_REF_NAME']
+ config[:commit_sha] = ENV['CI_BUILD_REF']
+ end
+
+ def self.set_service_params_for_coveralls_local(config)
+ config[:service_job_id] = nil
+ config[:service_name] = 'coveralls-ruby'
+ config[:service_event_type] = 'manual'
+ end
+
+ def self.set_standard_service_params_for_generic_ci(config)
+ config[:service_name] ||= ENV['CI_NAME']
+ config[:service_number] ||= ENV['CI_BUILD_NUMBER']
+ config[:service_job_id] ||= ENV['CI_JOB_ID']
+ config[:service_build_url] ||= ENV['CI_BUILD_URL']
+ config[:service_branch] ||= ENV['CI_BRANCH']
+ config[:service_pull_request] ||= (ENV['CI_PULL_REQUEST'] || "")[/(\d+)$/,1]
+ end
+
+ def self.yaml_config
+ if self.configuration_path && File.exist?(self.configuration_path)
+ YAML::load_file(self.configuration_path)
+ end
+ end
+
+ def self.configuration_path
+ File.expand_path(File.join(self.root, ".coveralls.yml")) if self.root
+ end
+
+ def self.root
+ pwd
+ end
+
+ def self.pwd
+ Dir.pwd
+ end
+
+ def self.simplecov_root
+ if defined?(::SimpleCov)
+ ::SimpleCov.root
+ end
+ end
+
+ def self.rails_root
+ Rails.root.to_s
+ rescue
+ nil
+ end
+
+ def self.git
+ hash = {}
+
+ Dir.chdir(root) do
+
+ hash[:head] = {
+ :id => ENV.fetch("GIT_ID", `git log -1 --pretty=format:'%H'`),
+ :author_name => ENV.fetch("GIT_AUTHOR_NAME", `git log -1 --pretty=format:'%aN'`),
+ :author_email => ENV.fetch("GIT_AUTHOR_EMAIL", `git log -1 --pretty=format:'%ae'`),
+ :committer_name => ENV.fetch("GIT_COMMITTER_NAME", `git log -1 --pretty=format:'%cN'`),
+ :committer_email => ENV.fetch("GIT_COMMITTER_EMAIL", `git log -1 --pretty=format:'%ce'`),
+ :message => ENV.fetch("GIT_MESSAGE", `git log -1 --pretty=format:'%s'`)
+ }
+
+ # Branch
+ hash[:branch] = ENV.fetch("GIT_BRANCH", `git rev-parse --abbrev-ref HEAD`)
+
+ # Remotes
+ remotes = nil
+ begin
+ remotes = `git remote -v`.split(/\n/).map do |remote|
+ splits = remote.split(" ").compact
+ {:name => splits[0], :url => splits[1]}
+ end.uniq
+ rescue
+ end
+ hash[:remotes] = remotes
+
+ end
+
+ hash
+
+ rescue Exception => e
+ Coveralls::Output.puts "Coveralls git error:", :color => "red"
+ Coveralls::Output.puts e.to_s, :color => "red"
+ nil
+ end
+
+ def self.relevant_env
+ hash = {
+ :pwd => self.pwd,
+ :rails_root => self.rails_root,
+ :simplecov_root => simplecov_root,
+ :gem_version => VERSION
+ }
+
+ hash.merge! begin
+ if ENV['TRAVIS']
+ {
+ :travis_job_id => ENV['TRAVIS_JOB_ID'],
+ :travis_pull_request => ENV['TRAVIS_PULL_REQUEST'],
+ :branch => ENV['TRAVIS_BRANCH']
+ }
+ elsif ENV['CIRCLECI']
+ {
+ :circleci_build_num => ENV['CIRCLE_BUILD_NUM'],
+ :branch => ENV['CIRCLE_BRANCH'],
+ :commit_sha => ENV['CIRCLE_SHA1']
+ }
+ elsif ENV['JENKINS_URL']
+ {
+ :jenkins_build_num => ENV['BUILD_NUMBER'],
+ :jenkins_build_url => ENV['BUILD_URL'],
+ :branch => ENV['GIT_BRANCH'],
+ :commit_sha => ENV['GIT_COMMIT']
+ }
+ elsif ENV['SEMAPHORE']
+ {
+ :branch => ENV['BRANCH_NAME'],
+ :commit_sha => ENV['REVISION']
+ }
+ else
+ {}
+ end
+ end
+
+ hash
+ end
+
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/output.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/output.rb
new file mode 100644
index 0000000000..1706f28b74
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/output.rb
@@ -0,0 +1,114 @@
+module Coveralls
+ #
+ # Public: Methods for formatting strings with Term::ANSIColor.
+ # Does not utilize monkey-patching and should play nicely when
+ # included with other libraries.
+ #
+ # All methods are module methods and should be called on
+ # the Coveralls::Output module.
+ #
+ # Examples
+ #
+ # Coveralls::Output.format("Hello World", :color => "cyan")
+ # # => "\e[36mHello World\e[0m"
+ #
+ # Coveralls::Output.print("Hello World")
+ # # Hello World => nil
+ #
+ # Coveralls::Output.puts("Hello World", :color => "underline")
+ # # Hello World
+ # # => nil
+ #
+ # To silence output completely:
+ #
+ # Coveralls::Output.silent = true
+ #
+ # or set this environment variable:
+ #
+ # COVERALLS_SILENT
+ #
+ # To disable color completely:
+ #
+ # Coveralls::Output.no_color = true
+
+ module Output
+ attr_accessor :silent, :no_color
+ attr_writer :output
+ extend self
+
+ def output
+ (defined?(@output) && @output) || $stdout
+ end
+
+ def no_color?
+ (defined?(@no_color)) && @no_color
+ end
+
+ # Public: Formats the given string with the specified color
+ # through Term::ANSIColor
+ #
+ # string - the text to be formatted
+ # options - The hash of options used for formatting the text:
+ # :color - The color to be passed as a method to
+ # Term::ANSIColor
+ #
+ # Examples
+ #
+ # Coveralls::Output.format("Hello World!", :color => "cyan")
+ # # => "\e[36mHello World\e[0m"
+ #
+ # Returns the formatted string.
+ def format(string, options = {})
+ unless no_color?
+ require 'term/ansicolor'
+ if options[:color]
+ options[:color].split(/\s/).reverse_each do |color|
+ if Term::ANSIColor.respond_to?(color.to_sym)
+ string = Term::ANSIColor.send(color.to_sym, string)
+ end
+ end
+ end
+ end
+ string
+ end
+
+ # Public: Passes .format to Kernel#puts
+ #
+ # string - the text to be formatted
+ # options - The hash of options used for formatting the text:
+ # :color - The color to be passed as a method to
+ # Term::ANSIColor
+ #
+ #
+ # Example
+ #
+ # Coveralls::Output.puts("Hello World", :color => "cyan")
+ #
+ # Returns nil.
+ def puts(string, options = {})
+ return if silent?
+ (options[:output] || output).puts self.format(string, options)
+ end
+
+ # Public: Passes .format to Kernel#print
+ #
+ # string - the text to be formatted
+ # options - The hash of options used for formatting the text:
+ # :color - The color to be passed as a method to
+ # Term::ANSIColor
+ #
+ # Example
+ #
+ # Coveralls::Output.print("Hello World!", :color => "underline")
+ #
+ # Returns nil.
+ def print(string, options = {})
+ return if silent?
+ (options[:output] || output).print self.format(string, options)
+ end
+
+ def silent?
+ ENV["COVERALLS_SILENT"] || (defined?(@silent) && @silent)
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/rake/task.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/rake/task.rb
new file mode 100644
index 0000000000..f5f3bfa36e
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/rake/task.rb
@@ -0,0 +1,19 @@
+require 'rake'
+require 'rake/tasklib'
+
+module Coveralls
+ class RakeTask < ::Rake::TaskLib
+ include ::Rake::DSL if defined?(::Rake::DSL)
+
+ def initialize(*args, &task_block)
+ namespace :coveralls do
+ desc "Push latest coverage results to Coveralls.io"
+ task :push do
+ require 'coveralls'
+ Coveralls.push!
+ end
+ end
+ end # initialize
+
+ end # class
+end # module
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/simplecov.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/simplecov.rb
new file mode 100644
index 0000000000..9364b18720
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/simplecov.rb
@@ -0,0 +1,101 @@
+module Coveralls
+ module SimpleCov
+ class Formatter
+
+ def display_result(result)
+ # Log which files would be submitted.
+ if result.files.length > 0
+ Coveralls::Output.puts "[Coveralls] Some handy coverage stats:"
+ else
+ Coveralls::Output.puts "[Coveralls] There are no covered files.", :color => "yellow"
+ end
+ result.files.each do |f|
+ Coveralls::Output.print " * "
+ Coveralls::Output.print short_filename(f.filename).to_s, :color => "cyan"
+ Coveralls::Output.print " => ", :color => "white"
+ cov = "#{f.covered_percent.round}%"
+ if f.covered_percent > 90
+ Coveralls::Output.print cov, :color => "green"
+ elsif f.covered_percent > 80
+ Coveralls::Output.print cov, :color => "yellow"
+ else
+ Coveralls::Output.print cov, :color => "red"
+ end
+ Coveralls::Output.puts ""
+ end
+ true
+ end
+
+ def get_source_files(result)
+ # Gather the source files.
+ source_files = []
+ result.files.each do |file|
+ properties = {}
+
+ # Get Source
+ properties[:source] = File.open(file.filename, "rb:utf-8").read
+
+ # Get the root-relative filename
+ properties[:name] = short_filename(file.filename)
+
+ # Get the coverage
+ properties[:coverage] = file.coverage.dup
+
+ # Skip nocov lines
+ file.lines.each_with_index do |line, i|
+ properties[:coverage][i] = nil if line.skipped?
+ end
+
+ source_files << properties
+ end
+ source_files
+ end
+
+ def format(result)
+
+ unless Coveralls.should_run?
+ if Coveralls.noisy?
+ display_result result
+ end
+ return
+ end
+
+ # Post to Coveralls.
+ API.post_json "jobs",
+ :source_files => get_source_files(result),
+ :test_framework => result.command_name.downcase,
+ :run_at => result.created_at
+
+ Coveralls::Output.puts output_message result
+
+ true
+
+ rescue Exception => e
+ display_error e
+ end
+
+ def display_error(e)
+ Coveralls::Output.puts "Coveralls encountered an exception:", :color => "red"
+ Coveralls::Output.puts e.class.to_s, :color => "red"
+ Coveralls::Output.puts e.message, :color => "red"
+ e.backtrace.each do |line|
+ Coveralls::Output.puts line, :color => "red"
+ end if e.backtrace
+ if e.respond_to?(:response) && e.response
+ Coveralls::Output.puts e.response.to_s, :color => "red"
+ end
+ false
+ end
+
+ def output_message(result)
+ "Coverage is at #{result.covered_percent.round(2) rescue result.covered_percent.round}%.\nCoverage report sent to Coveralls."
+ end
+
+ def short_filename(filename)
+ filename = filename.gsub(::SimpleCov.root, '.').gsub(/^\.\//, '') if ::SimpleCov.root
+ filename
+ end
+
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/version.rb
new file mode 100644
index 0000000000..120a9a06e3
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/coveralls-0.8.23/lib/coveralls/version.rb
@@ -0,0 +1,3 @@
+module Coveralls
+ VERSION = "0.8.23"
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor.rb
new file mode 100644
index 0000000000..7bd5dc4b49
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor.rb
@@ -0,0 +1,127 @@
+require 'tins/xt/full'
+
+module Term
+
+ # The ANSIColor module can be used for namespacing and mixed into your own
+ # classes.
+ module ANSIColor
+ require 'term/ansicolor/version'
+ require 'term/ansicolor/attribute'
+ require 'term/ansicolor/rgb_triple'
+ require 'term/ansicolor/hsl_triple'
+ require 'term/ansicolor/ppm_reader'
+ require 'term/ansicolor/attribute/text'
+ require 'term/ansicolor/attribute/color8'
+ require 'term/ansicolor/attribute/intense_color8'
+ require 'term/ansicolor/attribute/color256'
+ require 'term/ansicolor/movement'
+
+ include Term::ANSIColor::Movement
+
+ # :stopdoc:
+ ATTRIBUTE_NAMES = Attribute.named_attributes.map(&:name)
+ # :startdoc:
+
+ # Returns true if Term::ANSIColor supports the +feature+.
+ #
+ # The feature :clear, that is mixing the clear color attribute into String,
+ # is only supported on ruby implementations, that do *not* already
+ # implement the String#clear method. It's better to use the reset color
+ # attribute instead.
+ def support?(feature)
+ case feature
+ when :clear
+ !String.instance_methods(false).map(&:to_sym).include?(:clear)
+ end
+ end
+ # Returns true, if the coloring function of this module
+ # is switched on, false otherwise.
+ def self.coloring?
+ @coloring
+ end
+
+ # Turns the coloring on or off globally, so you can easily do
+ # this for example:
+ # Term::ANSIColor::coloring = STDOUT.isatty
+ def self.coloring=(val)
+ @coloring = val
+ end
+ self.coloring = true
+
+ def self.create_color_method(color_name, color_value)
+ module_eval <<-EOT
+ def #{color_name}(string = nil, &block)
+ color(:#{color_name}, string, &block)
+ end
+ EOT
+ self
+ end
+
+ for attribute in Attribute.named_attributes
+ create_color_method(attribute.name, attribute.code)
+ end
+
+ # Regular expression that is used to scan for ANSI-Attributes while
+ # uncoloring strings.
+ COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9]|[34]8;5;\d{1,3})?m/
+
+ # Returns an uncolored version of the string, that is all
+ # ANSI-Attributes are stripped from the string.
+ def uncolor(string = nil) # :yields:
+ if block_given?
+ yield.to_str.gsub(COLORED_REGEXP, '')
+ elsif string.respond_to?(:to_str)
+ string.to_str.gsub(COLORED_REGEXP, '')
+ elsif respond_to?(:to_str)
+ to_str.gsub(COLORED_REGEXP, '')
+ else
+ ''
+ end.extend(Term::ANSIColor)
+ end
+
+ alias uncolored uncolor
+
+ # Return +string+ or the result string of the given +block+ colored with
+ # color +name+. If string isn't a string only the escape sequence to switch
+ # on the color +name+ is returned.
+ def color(name, string = nil, &block)
+ attribute = Attribute[name] or raise ArgumentError, "unknown attribute #{name.inspect}"
+ result = ''
+ result << "\e[#{attribute.code}m" if Term::ANSIColor.coloring?
+ if block_given?
+ result << yield.to_s
+ elsif string.respond_to?(:to_str)
+ result << string.to_str
+ elsif respond_to?(:to_str)
+ result << to_str
+ else
+ return result #only switch on
+ end
+ result << "\e[0m" if Term::ANSIColor.coloring?
+ result.extend(Term::ANSIColor)
+ end
+
+ def on_color(name, string = nil, &block)
+ attribute = Attribute[name] or raise ArgumentError, "unknown attribute #{name.inspect}"
+ color("on_#{attribute.name}", string, &block)
+ end
+
+ class << self
+ # Returns an array of all Term::ANSIColor attributes as symbols.
+ def term_ansicolor_attributes
+ ::Term::ANSIColor::ATTRIBUTE_NAMES
+ end
+
+ alias attributes term_ansicolor_attributes
+ end
+
+ # Returns an array of all Term::ANSIColor attributes as symbols.
+ def term_ansicolor_attributes
+ ::Term::ANSIColor.term_ansicolor_attributes
+ end
+
+ alias attributes term_ansicolor_attributes
+
+ extend self
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/.keep b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/.keep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute.rb
new file mode 100644
index 0000000000..74af3eb877
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute.rb
@@ -0,0 +1,142 @@
+module Term
+ module ANSIColor
+ class Attribute
+ @__store__ = {}
+
+ if RUBY_VERSION < '1.9'
+ @__order__ = []
+
+ def self.set(name, code, options = {})
+ name = name.to_sym
+ result = @__store__[name] = new(name, code, options)
+ @__order__ << name
+ @rgb_colors = nil
+ result
+ end
+
+ def self.attributes(&block)
+ @__order__.map { |name| @__store__[name] }
+ end
+ else
+ def self.set(name, code, options = {})
+ name = name.to_sym
+ result = @__store__[name] = new(name, code, options)
+ @rgb_colors = nil
+ result
+ end
+
+ def self.attributes(&block)
+ @__store__.each_value(&block)
+ end
+ end
+
+ def self.[](name)
+ case
+ when self === name then name
+ when Array === name then nearest_rgb_color name
+ when name.respond_to?(:to_rgb_triple) then nearest_rgb_color(name.to_rgb_triple.to_a)
+ when name.to_s =~ /\A(on_)?(\d+)\z/ then get "#$1color#$2"
+ when name.to_s =~ /\A#([0-9a-f]{3}){1,2}\z/i then nearest_rgb_color name
+ when name.to_s =~ /\Aon_#([0-9a-f]{3}){1,2}\z/i then nearest_rgb_on_color name
+ else get name
+ end
+ end
+
+ def self.get(name)
+ @__store__[name.to_sym]
+ end
+
+ def self.rgb_colors(options = {}, &block)
+ colors = @rgb_colors ||= attributes.select(&:rgb_color?)
+ if options.key?(:gray) && !options[:gray]
+ colors = colors.reject(&:gray?)
+ end
+ colors.each(&block)
+ end
+
+ def self.named_attributes(&block)
+ @named_attributes ||= attributes.reject(&:rgb_color?).each(&block)
+ end
+
+ def self.nearest_rgb_color(color, options = {})
+ rgb = RGBTriple[color]
+ colors = rgb_colors(options)
+ colors.reject(&:background?).min_by { |c| c.distance_to(rgb, options) }
+ end
+
+ def self.nearest_rgb_on_color(color, options = {})
+ rgb = RGBTriple[color]
+ colors = rgb_colors(options)
+ colors.select(&:background?).min_by { |c| c.distance_to(rgb, options) }
+ end
+
+ def initialize(name, code, options = {})
+ @name = name.to_sym
+ @code = code.to_s
+ if html = options[:html]
+ @rgb = RGBTriple.from_html(html)
+ elsif !options.empty?
+ @rgb = RGBTriple.from_hash(options)
+ else
+ @rgb = nil # prevent instance variable not initialized warnings
+ end
+ end
+
+ attr_reader :name
+
+ def code
+ if rgb_color?
+ background? ? "48;5;#{@code}" : "38;5;#{@code}"
+ else
+ @code
+ end
+ end
+
+ def apply(string = nil, &block)
+ ::Term::ANSIColor.color(self, string, &block)
+ end
+
+ def background?
+ @name.to_s.start_with?('on_')
+ end
+
+ attr_reader :rgb
+
+ def rgb_color?
+ !!@rgb
+ end
+
+ def gray?
+ rgb_color? && to_rgb_triple.gray?
+ end
+
+ def to_rgb_triple
+ @rgb
+ end
+
+ def distance_to(other, options = {})
+ if our_rgb = to_rgb_triple and
+ other.respond_to?(:to_rgb_triple) and
+ other_rgb = other.to_rgb_triple
+ then
+ our_rgb.distance_to(other_rgb, options)
+ else
+ 1 / 0.0
+ end
+ end
+
+ def gradient_to(other, options = {})
+ if our_rgb = to_rgb_triple and
+ other.respond_to?(:to_rgb_triple) and
+ other_rgb = other.to_rgb_triple
+ then
+ our_rgb.gradient_to(other_rgb, options).map do |rgb_triple|
+ self.class.nearest_rgb_color(rgb_triple, options)
+ end
+ else
+ []
+ end
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/color256.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/color256.rb
new file mode 100644
index 0000000000..eb7c4fbff8
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/color256.rb
@@ -0,0 +1,69 @@
+module Term
+ module ANSIColor
+ class Attribute
+ class Color256
+ Attribute.set :color0, 0, :html => '#000000'
+ Attribute.set :color1, 1, :html => '#800000'
+ Attribute.set :color2, 2, :html => '#808000'
+ Attribute.set :color3, 3, :html => '#808000'
+ Attribute.set :color4, 4, :html => '#000080'
+ Attribute.set :color5, 5, :html => '#800080'
+ Attribute.set :color6, 6, :html => '#008080'
+ Attribute.set :color7, 7, :html => '#c0c0c0'
+
+ Attribute.set :color8, 8, :html => '#808080'
+ Attribute.set :color9, 9, :html => '#ff0000'
+ Attribute.set :color10, 10, :html => '#00ff00'
+ Attribute.set :color11, 11, :html => '#ffff00'
+ Attribute.set :color12, 12, :html => '#0000ff'
+ Attribute.set :color13, 13, :html => '#ff00ff'
+ Attribute.set :color14, 14, :html => '#00ffff'
+ Attribute.set :color15, 15, :html => '#ffffff'
+
+ steps = [ 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff ]
+
+ for i in 16..231
+ red, green, blue = (i - 16).to_s(6).rjust(3, '0').each_char.map { |c| steps[c.to_i] }
+ Attribute.set "color#{i}", i, :red => red, :green => green, :blue => blue
+ end
+
+ grey = 8
+ for i in 232..255
+ Attribute.set "color#{i}", i, :red => grey, :green => grey, :blue => grey
+ grey += 10
+ end
+
+ Attribute.set :on_color0, 0, :html => '#000000'
+ Attribute.set :on_color1, 1, :html => '#800000'
+ Attribute.set :on_color2, 2, :html => '#808000'
+ Attribute.set :on_color3, 3, :html => '#808000'
+ Attribute.set :on_color4, 4, :html => '#000080'
+ Attribute.set :on_color5, 5, :html => '#800080'
+ Attribute.set :on_color6, 6, :html => '#008080'
+ Attribute.set :on_color7, 7, :html => '#c0c0c0'
+
+ Attribute.set :on_color8, 8, :html => '#808080'
+ Attribute.set :on_color9, 9, :html => '#ff0000'
+ Attribute.set :on_color10, 10, :html => '#00ff00'
+ Attribute.set :on_color11, 11, :html => '#ffff00'
+ Attribute.set :on_color12, 12, :html => '#0000ff'
+ Attribute.set :on_color13, 13, :html => '#ff00ff'
+ Attribute.set :on_color14, 14, :html => '#00ffff'
+ Attribute.set :on_color15, 15, :html => '#ffffff'
+
+ steps = [ 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff ]
+
+ for i in 16..231
+ red, green, blue = (i - 16).to_s(6).rjust(3, '0').each_char.map { |c| steps[c.to_i] }
+ Attribute.set "on_color#{i}", i, :red => red, :green => green, :blue => blue
+ end
+
+ grey = 8
+ for i in 232..255
+ Attribute.set "on_color#{i}", i, :red => grey, :green => grey, :blue => grey
+ grey += 10
+ end
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/color8.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/color8.rb
new file mode 100644
index 0000000000..4a77fed631
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/color8.rb
@@ -0,0 +1,25 @@
+module Term
+ module ANSIColor
+ class Attribute
+ class Color8
+ Attribute.set :black, 30
+ Attribute.set :red, 31
+ Attribute.set :green, 32
+ Attribute.set :yellow, 33
+ Attribute.set :blue, 34
+ Attribute.set :magenta, 35
+ Attribute.set :cyan, 36
+ Attribute.set :white, 37
+
+ Attribute.set :on_black, 40
+ Attribute.set :on_red, 41
+ Attribute.set :on_green, 42
+ Attribute.set :on_yellow, 43
+ Attribute.set :on_blue, 44
+ Attribute.set :on_magenta, 45
+ Attribute.set :on_cyan, 46
+ Attribute.set :on_white, 47
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/intense_color8.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/intense_color8.rb
new file mode 100644
index 0000000000..6377fbaaca
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/intense_color8.rb
@@ -0,0 +1,43 @@
+module Term
+ module ANSIColor
+ class Attribute
+ class IntenseColor8
+ # High intensity, aixterm (works in OS X)
+ Attribute.set :intense_black, 90
+ Attribute.set :bright_black, 90
+ Attribute.set :intense_red, 91
+ Attribute.set :bright_red, 91
+ Attribute.set :intense_green, 92
+ Attribute.set :bright_green, 92
+ Attribute.set :intense_yellow, 93
+ Attribute.set :bright_yellow, 93
+ Attribute.set :intense_blue, 94
+ Attribute.set :bright_blue, 94
+ Attribute.set :intense_magenta, 95
+ Attribute.set :bright_magenta, 95
+ Attribute.set :intense_cyan, 96
+ Attribute.set :bright_cyan, 96
+ Attribute.set :intense_white, 97
+ Attribute.set :bright_white, 97
+
+ # High intensity background, aixterm (works in OS X)
+ Attribute.set :on_intense_black, 100
+ Attribute.set :on_bright_black, 100
+ Attribute.set :on_intense_red, 101
+ Attribute.set :on_bright_red, 101
+ Attribute.set :on_intense_green, 102
+ Attribute.set :on_bright_green, 102
+ Attribute.set :on_intense_yellow, 103
+ Attribute.set :on_bright_yellow, 103
+ Attribute.set :on_intense_blue, 104
+ Attribute.set :on_bright_blue, 104
+ Attribute.set :on_intense_magenta, 105
+ Attribute.set :on_bright_magenta, 105
+ Attribute.set :on_intense_cyan, 106
+ Attribute.set :on_bright_cyan, 106
+ Attribute.set :on_intense_white, 107
+ Attribute.set :on_bright_white, 107
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/text.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/text.rb
new file mode 100644
index 0000000000..e41d92f2a8
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/attribute/text.rb
@@ -0,0 +1,23 @@
+module Term
+ module ANSIColor
+ class Attribute
+ class Text
+ Attribute.set :clear, 0 # String#clear already used in String
+ Attribute.set :reset, 0 # synonym for :clear
+ Attribute.set :bold, 1
+ Attribute.set :dark, 2
+ Attribute.set :faint, 2
+ Attribute.set :italic, 3 # not widely implemented
+ Attribute.set :underline, 4
+ Attribute.set :underscore, 4 # synonym for :underline
+ Attribute.set :blink, 5
+ Attribute.set :rapid_blink, 6 # not widely implemented
+ Attribute.set :reverse, 7 # String#reverse already used in String
+ Attribute.set :negative, 7 # synonym for :reverse
+ Attribute.set :concealed, 8
+ Attribute.set :conceal, 8 # synonym for :concealed
+ Attribute.set :strikethrough, 9 # not widely implemented
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/hsl_triple.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/hsl_triple.rb
new file mode 100644
index 0000000000..37e282d177
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/hsl_triple.rb
@@ -0,0 +1,169 @@
+module Term
+ module ANSIColor
+ class HSLTriple
+ def self.from_rgb_triple(rgb)
+ ps = rgb.to_a.map { |x| x / 255.0 }
+ p_min = ps.min
+ p_max = ps.max
+ p_red, p_green, p_blue = ps
+
+ diff = p_max - p_min
+ l = (p_max + p_min) / 2
+
+ if diff.zero?
+ h = s = 0.0
+ else
+ if l < 0.5
+ s = diff / (p_max + p_min)
+ else
+ s = diff / (2 - p_max - p_min)
+ end
+
+ diff_r = ( ( ( p_max - p_red ) / 6 ) + ( diff / 2 ) ) / diff
+ diff_g = ( ( ( p_max - p_green ) / 6 ) + ( diff / 2 ) ) / diff
+ diff_b = ( ( ( p_max - p_blue ) / 6 ) + ( diff / 2 ) ) / diff
+
+ h = case p_max
+ when p_red
+ diff_b - diff_g
+ when p_green
+ (1 / 3.0) + diff_r - diff_b
+ when p_blue
+ (2 / 3.0) + diff_g - diff_r
+ end
+
+ h < 0 and h += 1
+ h > 1 and h -= 1
+ end
+ from_hash(
+ hue: 360 * h,
+ saturation: 100 * s,
+ lightness: 100 * l
+ )
+ end
+
+ def self.from_css(css)
+ case css
+ when /\A\s*hsl\(\s*([^,\s]+)\s*,\s*([^%\s]+)\s*%\s*,\s*([^%\s]+)\s*%\s*\)\z/
+ new(Float($1), Float($2), Float($3))
+ end
+ end
+
+ def self.from_hash(options)
+ new(
+ options[:hue].to_f,
+ options[:saturation].to_f,
+ options[:lightness].to_f
+ )
+ end
+
+ def self.[](thing)
+ case
+ when thing.respond_to?(:to_hsl_triple) then thing.to_hsl_triple
+ when thing.respond_to?(:to_hash) then from_hash(thing.to_hash)
+ when thing.respond_to?(:to_str)
+ thing = thing.to_str
+ from_css(thing.to_str) ||
+ Term::ANSIColor::RGBTriple.from_html(thing).full?(:to_hsl_triple) ||
+ Term::ANSIColor::RGBTriple.from_css(thing).full?(:to_hsl_triple)
+ else raise ArgumentError, "cannot convert #{thing.inspect} into #{self}"
+ end
+ end
+
+ def initialize(hue, saturation, lightness)
+ @hue = Float(hue) % 360
+ @saturation = [ [ Float(saturation), 0 ].max, 100 ].min
+ @lightness = [ [ Float(lightness), 0 ].max, 100 ].min
+ end
+
+ attr_reader :hue
+
+ attr_reader :saturation
+
+ attr_reader :lightness
+
+ def lighten(percentage)
+ self.class.new(@hue, @saturation, @lightness + percentage)
+ end
+
+ def darken(percentage)
+ self.class.new(@hue, @saturation, @lightness - percentage)
+ end
+
+ def saturate(percentage)
+ self.class.new(@hue, @saturation + percentage, @lightness)
+ end
+
+ def desaturate(percentage)
+ self.class.new(@hue, @saturation - percentage, @lightness)
+ end
+
+ def adjust_hue(degree)
+ self.class.new(@hue + degree, @saturation, @lightness)
+ end
+
+ def grayscale
+ self.class.new(@hue, 0, @lightness)
+ end
+
+ def complement
+ adjust_hue(180)
+ end
+
+ def hue2rgb(x, y, h)
+ h < 0 and h += 1
+ h > 1 and h -= 1
+ (6 * h) < 1 and return x + (y - x) * 6 * h
+ (2 * h) < 1 and return y
+ (3 * h) < 2 and return x + (y - x) * ( (2 / 3.0) - h ) * 6
+ x
+ end
+ private :hue2rgb
+
+ def to_rgb_triple
+ h = @hue / 360.0
+ s = @saturation / 100.0
+ l = @lightness / 100.0
+
+ if s.zero?
+ r = 255 * l
+ g = 255 * l
+ b = 255 * l
+ else
+ if l < 0.5
+ y = l * (1 + s)
+ else
+ y = (l + s) - (s * l)
+ end
+
+ x = 2 * l - y
+
+ r = 255 * hue2rgb(x, y, h + (1 / 3.0))
+ g = 255 * hue2rgb(x, y, h)
+ b = 255 * hue2rgb(x, y, h - (1 / 3.0))
+ end
+ Term::ANSIColor::RGBTriple.new(r.round, g.round, b.round)
+ end
+
+ def to_hsl_triple
+ self
+ end
+
+ def css
+ "hsl(%s,%s%%,%s%%)" % [ @hue, @saturation, @lightness ]
+ end
+
+ def ==(other)
+ to_rgb_triple == other.to_rgb_triple
+ end
+
+ def method_missing(name, *args, &block)
+ if Term::ANSIColor::RGBTriple.method_defined?(name)
+ to_rgb_triple.send(name, *args, &block)
+ else
+ super
+ end
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/movement.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/movement.rb
new file mode 100644
index 0000000000..99057d22b1
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/movement.rb
@@ -0,0 +1,108 @@
+require 'tins/terminal'
+
+module Term
+ module ANSIColor
+ module Movement
+ def terminal_lines
+ Tins::Terminal.lines
+ end
+
+ def terminal_columns
+ Tins::Terminal.columns
+ end
+
+ def move_to(line = 1, column = 1, string = nil, &block)
+ move_command("\e[#{line.to_i};#{column.to_i}H", string, &block)
+ end
+
+ def move_to_column(column = 1, string = nil, &block)
+ move_command("\e[#{column.to_i}G", string, &block)
+ end
+
+ def move_to_line(line = 1, string = nil, &block)
+ move_command("\e[#{line.to_i}f", string, &block)
+ end
+
+ def move_up(lines = 1, string = nil, &block)
+ move_command("\e[#{lines.to_i}A", string, &block)
+ end
+
+ def move_down(lines = 1, string = nil, &block)
+ move_command("\e[#{lines.to_i}B", string, &block)
+ end
+
+ def move_forward(columns = 1, string = nil, &block)
+ move_command("\e[#{columns.to_i}C", string, &block)
+ end
+
+ def move_backward(columns = 1, string = nil, &block)
+ move_command("\e[#{columns.to_i}D", string, &block)
+ end
+
+ def move_to_next_line(lines = 1, string = nil, &block)
+ move_command("\e[#{lines}E", string, &block)
+ end
+
+ def move_to_previous_line(lines = 1, string = nil, &block)
+ move_command("\e[#{lines}F", string, &block)
+ end
+
+ def move_home(string = nil, &block)
+ move_to(1, 1, string, &block)
+ end
+
+ def clear_screen(string = nil, &block)
+ erase_in_display(2, string, &block)
+ end
+
+ def erase_in_display(n = 0, string = nil, &block)
+ move_command("\e[#{n}J", string, &block)
+ end
+
+ def erase_in_line(n = 0, string = nil, &block)
+ move_command("\e[#{n}K", string, &block)
+ end
+
+ def scroll_up(pages = 1, string = nil, &block)
+ move_command("\e[#{pages}S", string, &block)
+ end
+
+ def scroll_down(pages = 1, string = nil, &block)
+ move_command("\e[#{pages}T", string, &block)
+ end
+
+ def save_position(string = nil, &block)
+ move_command("\e[s", string, &block)
+ end
+
+ def restore_position(string = nil, &block)
+ move_command("\e[u", string, &block)
+ end
+
+ def return_to_position(string = nil, &block)
+ save_position("") << move_command("", string, &block) << restore_position("")
+ end
+
+ def show_cursor(string = nil, &block)
+ move_command("\e[?25h", string, &block)
+ end
+
+ def hide_cursor(string = nil, &block)
+ move_command("\e[?25l", string, &block)
+ end
+
+ private
+
+ def move_command(move, string = nil)
+ if block_given?
+ move << yield.to_s
+ elsif string.respond_to?(:to_str)
+ move << string.to_str
+ elsif respond_to?(:to_str)
+ move << to_str
+ end
+ move
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/ppm_reader.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/ppm_reader.rb
new file mode 100644
index 0000000000..233166a15b
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/ppm_reader.rb
@@ -0,0 +1,96 @@
+module Term
+ module ANSIColor
+ class PPMReader
+ include Term::ANSIColor
+
+ def initialize(io, options = {})
+ @io = io
+ @options = options
+ @buffer = ''
+ end
+
+ def reset_io
+ begin
+ @io.rewind
+ rescue Errno::ESPIPE
+ end
+ parse_header
+ end
+
+ def each_row
+ reset_io
+ @height.times do
+ yield parse_row
+ end
+ end
+
+ def to_a
+ enum_for(:each_row).to_a
+ end
+
+ def to_s
+ result = ''
+ each_row do |row|
+ last_pixel = nil
+ for pixel in row
+ if pixel != last_pixel
+ color = Attribute.nearest_rgb_color(pixel, @options)
+ result << on_color(color)
+ last_pixel = pixel
+ end
+ result << ' '
+ end
+ result << reset << "\n"
+ end
+ result
+ end
+
+ private
+
+ def parse_row
+ row = []
+ @width.times do
+ row << parse_next_pixel
+ end
+ row
+ end
+
+ def parse_next_pixel
+ pixel = nil
+ case @type
+ when 3
+ @buffer.empty? and @buffer << next_line
+ @buffer.sub!(/(\d+)\s+(\d+)\s+(\d+)\s*/) do
+ pixel = [ $1.to_i, $2.to_i, $3.to_i ]
+ ''
+ end
+ when 6
+ @buffer.size < 3 and @buffer << @io.read(8192)
+ pixel = @buffer.slice!(0, 3).unpack('C3')
+ end
+ pixel
+ end
+
+ def parse_header
+ (line = next_line) =~ /^P([36])$/ or raise "unknown type #{line.to_s.chomp.inspect}"
+ @type = $1.to_i
+
+ if next_line =~ /^(\d+)\s+(\d+)$/
+ @width, @height = $1.to_i, $2.to_i
+ else
+ raise "missing dimensions"
+ end
+
+ unless next_line =~ /^255$/
+ raise "only 255 max color images allowed"
+ end
+ end
+
+ def next_line
+ while line = @io.gets and line =~ /^#|^\s$/
+ end
+ line
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/rgb_color_metrics.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/rgb_color_metrics.rb
new file mode 100644
index 0000000000..f297de0dd2
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/rgb_color_metrics.rb
@@ -0,0 +1,161 @@
+module Term
+ module ANSIColor
+ module RGBColorMetricsHelpers
+ module WeightedEuclideanDistance
+ def weighted_euclidean_distance_to(other, weights = [ 1.0 ] * values.size)
+ sum = 0.0
+ values.zip(other.values, weights) do |s, o, w|
+ sum += w * (s - o) ** 2
+ end
+ Math.sqrt(sum)
+ end
+ end
+
+ module NormalizeRGBTriple
+ private
+
+ def normalize(v)
+ v /= 255.0
+ if v <= 0.04045
+ v / 12
+ else
+ ( (v + 0.055) / 1.055) ** 2.4
+ end
+ end
+
+ def normalize_rgb_triple(rgb_triple)
+ [
+ rgb_triple.red,
+ rgb_triple.green,
+ rgb_triple.blue
+ ].map { |v| normalize(v) }
+ end
+ end
+ end
+
+ module RGBColorMetrics
+ def self.metric(name)
+ metric?(name) or raise ArgumentError, "unknown metric #{name.inspect}"
+ end
+
+ def self.metric?(name)
+ if const_defined?(name)
+ const_get name
+ end
+ end
+
+ def self.metrics
+ constants.map(&:to_sym)
+ end
+
+ # Implements color distance how the old greeks and most donkeys would…
+ module Euclidean
+ def self.distance(rgb1, rgb2)
+ rgb1.weighted_euclidean_distance_to rgb2
+ end
+ end
+
+ # Implements color distance the best way everybody knows…
+ module NTSC
+ def self.distance(rgb1, rgb2)
+ rgb1.weighted_euclidean_distance_to rgb2, [ 0.299, 0.587, 0.114 ]
+ end
+ end
+
+ # Implements color distance as given in:
+ # http://www.compuphase.com/cmetric.htm
+ module CompuPhase
+ def self.distance(rgb1, rgb2)
+ rmean = (rgb1.red + rgb2.red) / 2
+ rgb1.weighted_euclidean_distance_to rgb2,
+ [ 2 + (rmean >> 8), 4, 2 + ((255 - rmean) >> 8) ]
+ end
+ end
+
+ module YUV
+ class YUVTriple < Struct.new(:y, :u, :v)
+ include RGBColorMetricsHelpers::WeightedEuclideanDistance
+
+ def self.from_rgb_triple(rgb_triple)
+ r, g, b = rgb_triple.red, rgb_triple.green, rgb_triple.blue
+ y = (0.299 * r + 0.587 * g + 0.114 * b).round
+ u = ((b - y) * 0.492).round
+ v = ((r - y) * 0.877).round
+ new(y, u, v)
+ end
+ end
+
+ def self.distance(rgb1, rgb2)
+ yuv1 = YUVTriple.from_rgb_triple(rgb1)
+ yuv2 = YUVTriple.from_rgb_triple(rgb2)
+ yuv1.weighted_euclidean_distance_to yuv2
+ end
+ end
+
+ module CIEXYZ
+ class CIEXYZTriple < Struct.new(:x, :y, :z)
+ include RGBColorMetricsHelpers::WeightedEuclideanDistance
+ extend RGBColorMetricsHelpers::NormalizeRGBTriple
+
+ def self.from_rgb_triple(rgb_triple)
+ r, g, b = normalize_rgb_triple rgb_triple
+
+ x = 0.436052025 * r + 0.385081593 * g + 0.143087414 * b
+ y = 0.222491598 * r + 0.71688606 * g + 0.060621486 * b
+ z = 0.013929122 * r + 0.097097002 * g + 0.71418547 * b
+
+ x *= 255
+ y *= 255
+ z *= 255
+
+ new(x.round, y.round, z.round)
+ end
+ end
+
+ def self.distance(rgb1, rgb2)
+ xyz1 = CIEXYZTriple.from_rgb_triple(rgb1)
+ xyz2 = CIEXYZTriple.from_rgb_triple(rgb2)
+ xyz1.weighted_euclidean_distance_to xyz2
+ end
+ end
+
+ module CIELab
+ class CIELabTriple < Struct.new(:l, :a, :b)
+ include RGBColorMetricsHelpers::WeightedEuclideanDistance
+ extend RGBColorMetricsHelpers::NormalizeRGBTriple
+
+ def self.from_rgb_triple(rgb_triple)
+ r, g, b = normalize_rgb_triple rgb_triple
+
+ x = 0.436052025 * r + 0.385081593 * g + 0.143087414 * b
+ y = 0.222491598 * r + 0.71688606 * g + 0.060621486 * b
+ z = 0.013929122 * r + 0.097097002 * g + 0.71418547 * b
+
+ xr = x / 0.964221
+ yr = y
+ zr = z / 0.825211
+
+ eps = 216.0 / 24389
+ k = 24389.0 / 27
+
+ fx = xr > eps ? xr ** (1.0 / 3) : (k * xr + 16) / 116
+ fy = yr > eps ? yr ** (1.0 / 3) : (k * yr + 16) / 116
+ fz = zr > eps ? zr ** (1.0 / 3) : (k * zr + 16) / 116
+
+ l = 2.55 * ((116 * fy) - 16)
+ a = 500 * (fx - fy)
+ b = 200 * (fy - fz)
+
+ new(l.round, a.round, b.round)
+ end
+ end
+
+ def self.distance(rgb1, rgb2)
+ lab1 = CIELabTriple.from_rgb_triple(rgb1)
+ lab2 = CIELabTriple.from_rgb_triple(rgb2)
+ lab1.weighted_euclidean_distance_to lab2
+ end
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/rgb_triple.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/rgb_triple.rb
new file mode 100644
index 0000000000..4fbaf48088
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/rgb_triple.rb
@@ -0,0 +1,179 @@
+require 'term/ansicolor/rgb_color_metrics'
+
+module Term
+ module ANSIColor
+ class RGBTriple
+ include Term::ANSIColor::RGBColorMetricsHelpers::WeightedEuclideanDistance
+
+ def self.convert_value(color, max: 255)
+ color.nil? and raise ArgumentError, "missing color value"
+ color = Integer(color)
+ (0..max) === color or raise ArgumentError,
+ "color value #{color.inspect} not between 0 and #{max}"
+ color
+ end
+
+ private_class_method :convert_value
+
+ def self.from_html(html)
+ case html
+ when /\A#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\z/i
+ new(*$~.captures.map { |c| convert_value(c.to_i(16)) })
+ when /\A#([0-9a-f])([0-9a-f])([0-9a-f])\z/i
+ new(*$~.captures.map { |c| convert_value((c + c).to_i(16)) })
+ end
+ end
+
+ def self.from_css(css)
+ case css
+ when /\A\s*rgb\(\s*([^%\s]+)\s*%\s*,\s*([^%\s]+)\s*%\s*,\s*([^%\s]+)\s*%\s*\)\z/
+ new(*$~.captures.map { |c| convert_value(((Float(c) / 100) * 0xff).round) })
+ when /\A\s*rgb\(\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^\)\s]+)\s*\)\z/
+ new(*$~.captures.map { |c| convert_value((Float(c)).round) })
+ end
+ end
+
+ def self.from_hash(options)
+ new(
+ convert_value(options[:red]),
+ convert_value(options[:green]),
+ convert_value(options[:blue])
+ )
+ end
+
+ def self.from_array(array)
+ new(*array)
+ end
+
+ def self.[](thing)
+ case
+ when thing.respond_to?(:to_rgb_triple) then thing.to_rgb_triple
+ when thing.respond_to?(:to_ary) then from_array(thing.to_ary)
+ when thing.respond_to?(:to_str)
+ thing = thing.to_str
+ from_html(thing.sub(/\Aon_/, '')) || from_css(thing) ||
+ Term::ANSIColor::HSLTriple.from_css(thing).full?(:to_rgb_triple)
+ when thing.respond_to?(:to_hash) then from_hash(thing.to_hash)
+ else raise ArgumentError, "cannot convert #{thing.inspect} into #{self}"
+ end
+ end
+
+ def initialize(red, green, blue)
+ @values = [ red, green, blue ].map { |v|
+ [ [ Integer(v), 0 ].max, 0xff ].min
+ }
+ end
+
+ def red
+ @values[0]
+ end
+
+ def green
+ @values[1]
+ end
+
+ def blue
+ @values[2]
+ end
+
+ def percentages
+ @percentages ||= @values.map { |v| 100 * v / 255.0 }
+ end
+
+ def red_p
+ percentages[0]
+ end
+
+ def green_p
+ percentages[1]
+ end
+
+ def blue_p
+ percentages[2]
+ end
+
+ def invert
+ self.class.new(255 - red, 255 - green, 255 - blue)
+ end
+
+ def gray?
+ red != 0 && red != 0xff && red == green && green == blue && blue == red
+ end
+
+ def html
+ s = '#'
+ @values.each { |c| s << '%02x' % c }
+ s
+ end
+
+ def css(percentage: false)
+ if percentage
+ "rgb(%s%%,%s%%,%s%%)" % @values.map { |v| 100.0 * v / 255 }
+ else
+ "rgb(%u,%u,%u)" % @values
+ end
+ end
+
+ def to_rgb_triple
+ self
+ end
+
+ def to_hsl_triple
+ Term::ANSIColor::HSLTriple.from_rgb_triple(self)
+ end
+
+ attr_reader :values
+ protected :values
+
+ def to_a
+ @values.dup
+ end
+
+ def ==(other)
+ @values == other.to_rgb_triple.values
+ end
+
+ def color(string)
+ Term::ANSIColor.color(self, string)
+ end
+
+ def distance_to(other, options = {})
+ options[:metric] ||= RGBColorMetrics::CIELab
+ options[:metric].distance(self, other)
+ end
+
+ def initialize_copy(other)
+ r = super
+ other.instance_variable_set :@values, @values.dup
+ r
+ end
+
+ def gradient_to(other, options = {})
+ options[:steps] ||= 16
+ steps = options[:steps].to_i
+ steps < 2 and raise ArgumentError, 'at least 2 steps are required'
+ changes = other.values.zip(@values).map { |x, y| x - y }
+ current = self
+ gradient = [ current.dup ]
+ s = steps - 1
+ while s > 1
+ current = current.dup
+ gradient << current
+ 3.times do |i|
+ current.values[i] += changes[i] / (steps - 1)
+ end
+ s -= 1
+ end
+ gradient << other
+ end
+
+ def method_missing(name, *args, &block)
+ if Term::ANSIColor::HSLTriple.method_defined?(name)
+ to_hsl_triple.send(name, *args, &block)
+ else
+ super
+ end
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/version.rb
new file mode 100644
index 0000000000..2c02a364eb
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/term-ansicolor-1.7.1/lib/term/ansicolor/version.rb
@@ -0,0 +1,8 @@
+module Term::ANSIColor
+ # Term::ANSIColor version
+ VERSION = '1.7.1'
+ VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit.rb
new file mode 100644
index 0000000000..35f415eb5f
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit.rb
@@ -0,0 +1,2 @@
+require 'tins/alias'
+require 'tins/dslkit/polite'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit/polite.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit/polite.rb
new file mode 100644
index 0000000000..8f5762bbd3
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit/polite.rb
@@ -0,0 +1 @@
+require 'tins/dslkit'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit/rude.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit/rude.rb
new file mode 100644
index 0000000000..39649f3314
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/dslkit/rude.rb
@@ -0,0 +1 @@
+require 'tins/xt/dslkit'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/spruz.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/spruz.rb
new file mode 100644
index 0000000000..e38ccaea53
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/spruz.rb
@@ -0,0 +1,2 @@
+require 'tins'
+require 'tins/alias'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins.rb
new file mode 100644
index 0000000000..ca7c22cd48
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins.rb
@@ -0,0 +1,61 @@
+module Tins
+ require 'tins/attempt'
+ require 'tins/bijection'
+ require 'tins/count_by'
+ require 'tins/deep_dup'
+ require 'tins/file_binary'
+ require 'tins/find'
+ require 'tins/generator'
+ require 'tins/go'
+ require 'tins/hash_symbolize_keys_recursive'
+ require 'tins/hash_union'
+ require 'tins/limited'
+ require 'tins/lines_file'
+ require 'tins/memoize'
+ require 'tins/minimize'
+ require 'tins/module_group'
+ require 'tins/named_set'
+ require 'tins/null'
+ require 'tins/once'
+ require 'tins/p'
+ require 'tins/partial_application'
+ require 'tins/range_plus'
+ require 'tins/require_maybe'
+ require 'tins/secure_write'
+ require 'tins/string_camelize'
+ require 'tins/string_underscore'
+ require 'tins/string_version'
+ require 'tins/subhash'
+ require 'tins/time_dummy'
+ require 'tins/date_dummy'
+ require 'tins/date_time_dummy'
+ require 'tins/to_proc'
+ require 'tins/uniq_by'
+ require 'tins/version'
+ require 'tins/write'
+ require 'tins/extract_last_argument_options'
+ require 'tins/deep_const_get'
+ require 'tins/responding'
+ require 'tins/proc_compose'
+ require 'tins/proc_prelude'
+ require 'tins/concern'
+ require 'tins/to'
+ require 'tins/terminal'
+ require 'tins/sexy_singleton'
+ require 'tins/method_description'
+ require 'tins/annotate'
+ require 'tins/token'
+ require 'tins/dslkit'
+ require 'tins/case_predicate'
+ require 'tins/implement'
+ if defined? ::Encoding
+ require 'tins/string_byte_order_mark'
+ end
+ require 'tins/complete'
+ require 'tins/duration'
+ require 'tins/unit'
+ require 'tins/expose'
+ require 'tins/temp_io'
+ require 'tins/temp_io_enum'
+end
+require 'tins/alias'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/alias.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/alias.rb
new file mode 100644
index 0000000000..5bfa74bbd3
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/alias.rb
@@ -0,0 +1 @@
+Spruz = Tins
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/annotate.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/annotate.rb
new file mode 100644
index 0000000000..dc461f0ff5
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/annotate.rb
@@ -0,0 +1,38 @@
+module Tins::Annotate
+ def annotate(name)
+ singleton_class.class_eval do
+ define_method(name) do |annotation = :annotated|
+ instance_variable_set "@__annotation_#{name}__", annotation
+ end
+
+ define_method("#{name}_of") do |method_name|
+ __send__("#{name}_annotations")[method_name]
+ end
+
+ define_method("#{name}_annotations") do
+ if instance_variable_defined?("@__annotation_#{name}_annotations__")
+ instance_variable_get "@__annotation_#{name}_annotations__"
+ else
+ instance_variable_set "@__annotation_#{name}_annotations__", {}
+ end
+ end
+
+ old_method_added = instance_method(:method_added)
+ define_method(:method_added) do |method_name|
+ old_method_added.bind(self).call method_name
+ if annotation = instance_variable_get("@__annotation_#{name}__")
+ __send__("#{name}_annotations")[method_name] = annotation
+ end
+ instance_variable_set "@__annotation_#{name}__", nil
+ end
+ end
+
+ define_method("#{name}_annotations") do
+ self.class.__send__("#{name}_annotations")
+ end
+
+ define_method("#{name}_of") do |method_name|
+ self.class.__send__("#{name}_of", method_name)
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/ask_and_send.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/ask_and_send.rb
new file mode 100644
index 0000000000..4318a80f0b
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/ask_and_send.rb
@@ -0,0 +1,31 @@
+module Tins
+ module AskAndSend
+ def ask_and_send(method_name, *args, &block)
+ if respond_to?(method_name)
+ __send__(method_name, *args, &block)
+ end
+ end
+
+ def ask_and_send!(method_name, *args, &block)
+ if respond_to?(method_name, true)
+ __send__(method_name, *args, &block)
+ end
+ end
+
+ def ask_and_send_or_self(method_name, *args, &block)
+ if respond_to?(method_name)
+ __send__(method_name, *args, &block)
+ else
+ self
+ end
+ end
+
+ def ask_and_send_or_self!(method_name, *args, &block)
+ if respond_to?(method_name, true)
+ __send__(method_name, *args, &block)
+ else
+ self
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/attempt.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/attempt.rb
new file mode 100644
index 0000000000..6bcd847a70
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/attempt.rb
@@ -0,0 +1,111 @@
+module Tins
+ module Attempt
+ # Attempts code in block *attempts* times, sleeping according to *sleep*
+ # between attempts and catching the exception(s) in *exception_class*.
+ #
+ # *sleep* is either a Proc returning a floating point number for duration
+ # as seconds or a Numeric >= 0 or < 0. In the former case this is the
+ # duration directly, in the latter case -*sleep* is the total number of
+ # seconds that is slept before giving up, and every attempt is retried
+ # after a exponentially increasing duration of seconds.
+ #
+ # Iff *reraise* is true the caught exception is reraised after running out
+ # of attempts.
+ def attempt(opts = {}, &block)
+ sleep = nil
+ exception_class = StandardError
+ if Numeric === opts
+ attempts = opts
+ else
+ attempts = opts[:attempts] || 1
+ attempts >= 1 or raise ArgumentError, 'at least one attempt is required'
+ exception_class = opts[:exception_class] if opts.key?(:exception_class)
+ sleep = interpret_sleep(opts[:sleep], attempts)
+ reraise = opts[:reraise]
+ end
+ return if attempts <= 0
+ count = 0
+ if exception_class.nil?
+ begin
+ count += 1
+ if block.call(count)
+ return true
+ elsif count < attempts
+ sleep_duration(sleep, count)
+ end
+ end until count == attempts
+ false
+ else
+ begin
+ count += 1
+ block.call(count)
+ true
+ rescue *exception_class
+ if count < attempts
+ sleep_duration(sleep, count)
+ retry
+ end
+ reraise ? raise : false
+ end
+ end
+ end
+
+ private
+
+ def sleep_duration(duration, count)
+ case duration
+ when Numeric
+ sleep duration
+ when Proc
+ sleep duration.call(count)
+ end
+ end
+
+ def compute_duration_base(sleep, attempts)
+ x1, x2 = 1, sleep
+ attempts <= sleep or raise ArgumentError,
+ "need less or equal number of attempts than sleep duration #{sleep}"
+ x1 >= x2 and raise ArgumentError, "invalid sleep argument: #{sleep.inspect}"
+ function = -> x { (0...attempts).inject { |s, i| s + x ** i } - sleep }
+ f, fmid = function[x1], function[x2]
+ f * fmid >= 0 and raise ArgumentError, "invalid sleep argument: #{sleep.inspect}"
+ n = 1 << 16
+ epsilon = 1E-16
+ root = if f < 0
+ dx = x2 - x1
+ x1
+ else
+ dx = x1 - x2
+ x2
+ end
+ n.times do
+ fmid = function[xmid = root + (dx *= 0.5)]
+ fmid < 0 and root = xmid
+ dx.abs < epsilon or fmid == 0 and return root
+ end
+ raise ArgumentError, "too many iterations (#{n})"
+ result
+ end
+
+ def interpret_sleep(sleep, attempts)
+ case sleep
+ when nil
+ when Numeric
+ if sleep < 0
+ if attempts > 2
+ sleep = -sleep
+ duration_base = compute_duration_base sleep, attempts
+ sleep = lambda { |i| duration_base ** i }
+ else
+ raise ArgumentError, "require > 2 attempts for negative sleep value"
+ end
+ end
+ sleep
+ when Proc
+ sleep
+ else
+ raise TypeError, "require Proc or Numeric sleep argument"
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/bijection.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/bijection.rb
new file mode 100644
index 0000000000..e5eb76feed
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/bijection.rb
@@ -0,0 +1,46 @@
+module Tins
+ class Bijection < Hash
+ def self.[](*pairs)
+ pairs.size % 2 == 0 or
+ raise ArgumentError, "odd number of arguments for #{self}"
+ new.fill do |obj|
+ (pairs.size / 2).times do |i|
+ j = 2 * i
+ key = pairs[j]
+ value = pairs[j + 1]
+ obj.key?(key) and raise ArgumentError, "duplicate key #{key.inspect} for #{self}"
+ obj.inverted.key?(value) and raise ArgumentError, "duplicate value #{value.inspect} for #{self}"
+ obj[pairs[j]] = pairs[j + 1]
+ end
+ end
+ end
+
+ def initialize(inverted = Bijection.new(self))
+ @inverted = inverted
+ end
+
+ def fill
+ if empty?
+ yield self
+ freeze
+ end
+ self
+ end
+
+ def freeze
+ r = super
+ unless @inverted.frozen?
+ @inverted.freeze
+ end
+ r
+ end
+
+ def []=(key, value)
+ key?(key) and return
+ super
+ @inverted[value] = key
+ end
+
+ attr_reader :inverted
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/case_predicate.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/case_predicate.rb
new file mode 100644
index 0000000000..4616f8160c
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/case_predicate.rb
@@ -0,0 +1,7 @@
+module Tins
+ module CasePredicate
+ def case?(*args)
+ args.find { |a| a === self }
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/complete.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/complete.rb
new file mode 100644
index 0000000000..e2899b572e
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/complete.rb
@@ -0,0 +1,18 @@
+require 'readline'
+
+module Tins
+ module Complete
+ module_function
+
+ @@sync = Sync.new
+
+ def complete(prompt: '', add_hist: false, &block)
+ @@sync.synchronize do
+ Readline.completion_proc = block
+ Readline.input = STDIN
+ Readline.output = STDOUT
+ Readline.readline(prompt, add_hist)
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/concern.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/concern.rb
new file mode 100644
index 0000000000..af4a759cdf
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/concern.rb
@@ -0,0 +1,30 @@
+module Tins
+ module Concern
+ def self.extended(base)
+ base.instance_variable_set("@_dependencies", [])
+ end
+
+ def append_features(base)
+ if base.instance_variable_defined?("@_dependencies")
+ base.instance_variable_get("@_dependencies") << self
+ false
+ else
+ return false if base < self
+ @_dependencies.each { |dep| base.send(:include, dep) }
+ super
+ base.extend const_get("ClassMethods") if const_defined?("ClassMethods")
+ base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block")
+ Thread.current[:tin_concern_args] = nil
+ true
+ end
+ end
+
+ def included(base = nil, &block)
+ if base.nil?
+ @_included_block = block
+ else
+ super
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/count_by.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/count_by.rb
new file mode 100644
index 0000000000..dbe41b7e33
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/count_by.rb
@@ -0,0 +1,8 @@
+module Tins
+ module CountBy
+ def count_by(&b)
+ b ||= lambda { |x| true }
+ inject(0) { |s, e| s += 1 if b[e]; s }
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/date_dummy.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/date_dummy.rb
new file mode 100644
index 0000000000..a5d95e8e68
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/date_dummy.rb
@@ -0,0 +1,53 @@
+require 'date'
+
+module Tins
+ module DateDummy
+ def self.included(modul)
+ class << modul
+ alias really_today today
+
+ remove_method :today rescue nil
+
+ def dummy=(value)
+ if value.respond_to?(:to_str)
+ value = Date.parse(value.to_str)
+ elsif value.respond_to?(:to_date)
+ value = value.to_date
+ end
+ @dummy = value
+ end
+
+ def dummy(value = nil)
+ if value.nil?
+ if defined?(@dummy)
+ @dummy
+ end
+ else
+ begin
+ old_dummy = @dummy
+ self.dummy = value
+ yield
+ ensure
+ self.dummy = old_dummy
+ end
+ end
+ end
+
+ def today
+ if dummy
+ dummy.dup
+ elsif caller.first =~ /`today`/
+ really_today
+ else
+ really_today
+ end
+ end
+
+ end
+ super
+ end
+ end
+end
+
+require 'tins/alias'
+
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/date_time_dummy.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/date_time_dummy.rb
new file mode 100644
index 0000000000..939fb9d3ac
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/date_time_dummy.rb
@@ -0,0 +1,51 @@
+require 'date'
+
+module Tins
+ module DateTimeDummy
+ def self.included(modul)
+ class << modul
+ alias really_now now
+
+ remove_method :now rescue nil
+
+ def dummy=(value)
+ if value.respond_to?(:to_str)
+ value = DateTime.parse(value.to_str)
+ elsif value.respond_to?(:to_datetime)
+ value = value.to_datetime
+ end
+ @dummy = value
+ end
+
+ def dummy(value = nil)
+ if value.nil?
+ if defined?(@dummy)
+ @dummy
+ end
+ else
+ begin
+ old_dummy = @dummy
+ self.dummy = value
+ yield
+ ensure
+ self.dummy = old_dummy
+ end
+ end
+ end
+
+ def now
+ if dummy
+ dummy.dup
+ elsif caller.first =~ /`now`/
+ really_now
+ else
+ really_now
+ end
+ end
+ end
+ super
+ end
+ end
+end
+
+require 'tins/alias'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/deep_const_get.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/deep_const_get.rb
new file mode 100644
index 0000000000..706005d8f3
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/deep_const_get.rb
@@ -0,0 +1,42 @@
+module Tins
+ module DeepConstGet
+ if ::Object.method(:const_defined?).arity == 1
+ # :nocov:
+ # We do not create coverage on 1.8
+ def self.const_defined_in?(modul, constant)
+ modul.const_defined?(constant)
+ end
+ # :nocov:
+ else
+ def self.const_defined_in?(modul, constant)
+ modul.const_defined?(constant, false)
+ end
+ end
+
+ def self.deep_const_get(path, start_module = Object)
+ path.to_s.split('::').inject(start_module) do |p, c|
+ case
+ when c.empty?
+ if start_module == Object
+ Object
+ else
+ raise ArgumentError, "top level constants cannot be reached from"\
+ " start module #{start_module.inspect}"
+ end
+ when const_defined_in?(p, c)
+ p.const_get(c)
+ else
+ begin
+ p.const_missing(c)
+ rescue NameError => e
+ raise ArgumentError, "can't get const #{path}: #{e}"
+ end
+ end
+ end
+ end
+
+ def deep_const_get(path, start_module = Object)
+ ::Tins::DeepConstGet.deep_const_get(path, start_module)
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/deep_dup.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/deep_dup.rb
new file mode 100644
index 0000000000..3b53d866a3
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/deep_dup.rb
@@ -0,0 +1,11 @@
+module Tins
+ module DeepDup
+ def deep_dup
+ Marshal.load(Marshal.dump(self))
+ rescue TypeError
+ return self
+ end
+ end
+end
+
+require 'tins/alias'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/dslkit.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/dslkit.rb
new file mode 100644
index 0000000000..bace0f13df
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/dslkit.rb
@@ -0,0 +1,636 @@
+require 'thread'
+require 'sync'
+
+require 'tins/thread_local'
+
+module Tins
+ # This module contains some handy methods to deal with eigenclasses. Those
+ # are also known as virtual classes, singleton classes, metaclasses, plus all
+ # the other names Matz doesn't like enough to actually accept one of the
+ # names.
+ #
+ # The module can be included into other modules/classes to make the methods available.
+ module Eigenclass
+ # Returns the eigenclass of this object.
+ def eigenclass
+ end
+ alias eigenclass singleton_class
+
+ # Evaluates the _block_ in context of the eigenclass of this object.
+ def eigenclass_eval(&block)
+ eigenclass.instance_eval(&block)
+ end
+ end
+
+ module ClassMethod
+ include Eigenclass
+
+ # Define a class method named _name_ using _block_.
+ def class_define_method(name, &block)
+ eigenclass_eval { define_method(name, &block) }
+ end
+
+ # Define reader and writer attribute methods for all *ids.
+ def class_attr_accessor(*ids)
+ eigenclass_eval { attr_accessor(*ids) }
+ end
+
+ # Define reader attribute methods for all *ids.
+ def class_attr_reader(*ids)
+ eigenclass_eval { attr_reader(*ids) }
+ end
+
+ # Define writer attribute methods for all *ids.
+ def class_attr_writer(*ids)
+ eigenclass_eval { attr_writer(*ids) }
+ end
+
+ # I boycott attr!
+ end
+
+ module ThreadGlobal
+ # Define a thread global variable named _name_ in this module/class. If the
+ # value _value_ is given, it is used to initialize the variable.
+ def thread_global(name, default_value = nil, &default)
+ is_a?(Module) or raise TypeError, "receiver has to be a Module"
+
+ default_value && default and raise ArgumentError,
+ "require either default_falue or default block"
+
+ if default_value
+ default = -> * { default_value }
+ end
+
+ name = name.to_s
+ var_name = "@__#{name}_#{__id__.abs}__"
+
+ lock = Mutex.new
+ modul = self
+
+ define_method(name) do
+ lock.synchronize {
+ if default && !modul.instance_variable_defined?(var_name)
+ modul.instance_variable_set var_name, default.call
+ end
+ modul.instance_variable_get var_name
+ }
+ end
+
+ define_method(name + "=") do |value|
+ lock.synchronize { modul.instance_variable_set var_name, value }
+ end
+
+ self
+ end
+
+ # Define a thread global variable for the current instance with name
+ # _name_. If the value _value_ is given, it is used to initialize the
+ # variable.
+ def instance_thread_global(name, value = nil)
+ sc = class << self
+ extend Tins::ThreadGlobal
+ self
+ end
+ sc.thread_global name, value
+ self
+ end
+ end
+
+ module InstanceExec
+ def self.included(*)
+ super
+ warn "#{self} is deprecated, but included at #{caller.first[/(.*):/, 1]}"
+ end
+ end
+
+ module Interpreter
+ # Interpret the string _source_ as a body of a block, while passing
+ # *args into the block.
+ #
+ # A small example explains how the method is supposed to be used and how
+ # the *args can be fetched:
+ #
+ # class A
+ # include Tins::Interpreter
+ # def c
+ # 3
+ # end
+ # end
+ #
+ # A.new.interpret('|a,b| a + b + c', 1, 2) # => 6
+ #
+ # To use a specified binding see #interpret_with_binding.
+ def interpret(source, *args)
+ interpret_with_binding(source, binding, *args)
+ end
+
+ # Interpret the string _source_ as a body of a block, while passing
+ # *args into the block and using _my_binding_ for evaluation.
+ #
+ # A small example:
+ #
+ # class A
+ # include Tins::Interpreter
+ # def c
+ # 3
+ # end
+ # def foo
+ # b = 2
+ # interpret_with_binding('|a| a + b + c', binding, 1) # => 6
+ # end
+ # end
+ # A.new.foo # => 6
+ #
+ # See also #interpret.
+ def interpret_with_binding(source, my_binding, *args)
+ path = '(interpret)'
+ if source.respond_to? :to_io
+ path = source.path if source.respond_to? :path
+ source = source.to_io.read
+ end
+ block = lambda { |*a| eval("lambda { #{source} }", my_binding, path).call(*a) }
+ instance_exec(*args, &block)
+ end
+ end
+
+ # This module contains the _constant_ method. For small example of its usage
+ # see the documentation of the DSLAccessor module.
+ module Constant
+ # Create a constant named _name_, that refers to value _value_. _value is
+ # frozen, if this is possible. If you want to modify/exchange a value use
+ # DSLAccessor#dsl_reader/DSLAccessor#dsl_accessor instead.
+ def constant(name, value = name)
+ value = value.freeze rescue value
+ define_method(name) { value }
+ end
+ end
+
+ # The DSLAccessor module contains some methods, that can be used to make
+ # simple accessors for a DSL.
+ #
+ #
+ # class CoffeeMaker
+ # extend Tins::Constant
+ #
+ # constant :on
+ # constant :off
+ #
+ # extend Tins::DSLAccessor
+ #
+ # dsl_accessor(:state) { off } # Note: the off constant from above is used
+ #
+ # dsl_accessor :allowed_states, :on, :off
+ #
+ # def process
+ # allowed_states.include?(state) or fail "Explode!!!"
+ # if state == on
+ # puts "Make coffee."
+ # else
+ # puts "Idle..."
+ # end
+ # end
+ # end
+ #
+ # cm = CoffeeMaker.new
+ # cm.instance_eval do
+ # state # => :off
+ # state on
+ # state # => :on
+ # process # => outputs "Make coffee."
+ # end
+ #
+ # Note that Tins::SymbolMaker is an alternative for Tins::Constant in
+ # this example. On the other hand SymbolMaker can make debugging more
+ # difficult.
+ module DSLAccessor
+ # This method creates a dsl accessor named _name_. If nothing else is given
+ # as argument it defaults to nil. If *default is given as a single
+ # value it is used as a default value, if more than one value is given the
+ # _default_ array is used as the default value. If no default value but a
+ # block _block_ is given as an argument, the block is executed everytime
+ # the accessor is read in the context of the current instance.
+ #
+ # After setting up the accessor, the set or default value can be retrieved
+ # by calling the method +name+. To set a value one can call name
+ # :foo to set the attribute value to :foo or
+ # name(:foo, :bar) to set it to [ :foo, :bar ].
+ def dsl_accessor(name, *default, &block)
+ variable = "@#{name}"
+ define_method(name) do |*args|
+ if args.empty?
+ result =
+ if instance_variable_defined?(variable)
+ instance_variable_get(variable)
+ end
+ if result.nil?
+ result = if default.empty?
+ block && instance_eval(&block)
+ elsif default.size == 1
+ default.first
+ else
+ default
+ end
+ instance_variable_set(variable, result)
+ result
+ else
+ result
+ end
+ else
+ instance_variable_set(variable, args.size == 1 ? args.first : args)
+ end
+ end
+ end
+
+ # This method creates a dsl reader accessor, that behaves exactly like a
+ # #dsl_accessor but can only be read not set.
+ def dsl_reader(name, *default, &block)
+ variable = "@#{name}"
+ define_method(name) do |*args|
+ if args.empty?
+ result =
+ if instance_variable_defined?(variable)
+ instance_variable_get(variable)
+ end
+ if result.nil?
+ if default.empty?
+ block && instance_eval(&block)
+ elsif default.size == 1
+ default.first
+ else
+ default
+ end
+ else
+ result
+ end
+ else
+ raise ArgumentError, "wrong number of arguments (#{args.size} for 0)"
+ end
+ end
+ end
+ end
+
+ # This module can be included in another module/class. It generates a symbol
+ # for every missing method that was called in the context of this
+ # module/class.
+ module SymbolMaker
+ # Returns a symbol (_id_) for every missing method named _id_.
+ def method_missing(id, *args)
+ if args.empty?
+ id
+ else
+ super
+ end
+ end
+ end
+
+ # This module can be used to extend another module/class. It generates
+ # symbols for every missing constant under the namespace of this
+ # module/class.
+ module ConstantMaker
+ # Returns a symbol (_id_) for every missing constant named _id_.
+ def const_missing(id)
+ id
+ end
+ end
+
+ module BlankSlate
+ # Creates an anonymous blank slate class, that only responds to the methods
+ # *ids. ids can be Symbols, Strings, and Regexps that have to match
+ # the method name with #===.
+ def self.with(*ids)
+ opts = Hash === ids.last ? ids.pop : {}
+ ids = ids.map { |id| Regexp === id ? id : id.to_s }
+ klass = opts[:superclass] ? Class.new(opts[:superclass]) : Class.new
+ klass.instance_eval do
+ instance_methods.each do |m|
+ m = m.to_s
+ undef_method m unless m =~ /^(__|object_id)/ or ids.any? { |i| i === m }
+ end
+ end
+ klass
+ end
+ end
+
+ # See examples/recipe.rb and examples/recipe2.rb how this works at the
+ # moment.
+ module Deflect
+ # The basic Deflect exception
+ class DeflectError < StandardError; end
+
+ class << self
+ extend Tins::ThreadLocal
+
+ # A thread local variable, that holds a DeflectorCollection instance for
+ # the current thread.
+ thread_local :deflecting
+ end
+
+ # A deflector is called with a _class_, a method _id_, and its
+ # *args.
+ class Deflector < Proc; end
+
+ # This class implements a collection of deflectors, to make them available
+ # by emulating Ruby's message dispatch.
+ class DeflectorCollection
+ def initialize
+ @classes = {}
+ end
+
+ # Add a new deflector _deflector_ for class _klass_ and method name _id_,
+ # and return self.
+ #
+ def add(klass, id, deflector)
+ k = @classes[klass]
+ k = @classes[klass] = {} unless k
+ k[id.to_s] = deflector
+ self
+ end
+
+ # Return true if messages are deflected for class _klass_ and method name
+ # _id_, otherwise return false.
+ def member?(klass, id)
+ !!(k = @classes[klass] and k.key?(id.to_s))
+ end
+
+ # Delete the deflecotor class _klass_ and method name _id_. Returns the
+ # deflector if any was found, otherwise returns true.
+ def delete(klass, id)
+ if k = @classes[klass]
+ d = k.delete id.to_s
+ @classes.delete klass if k.empty?
+ d
+ end
+ end
+
+ # Try to find a deflector for class _klass_ and method _id_ and return
+ # it. If none was found, return nil instead.
+ def find(klass, id)
+ klass.ancestors.find do |k|
+ if d = @classes[k] and d = d[id.to_s]
+ return d
+ end
+ end
+ end
+ end
+
+ @@sync = Sync.new
+
+ # Start deflecting method calls named _id_ to the _from_ class using the
+ # Deflector instance deflector.
+ def deflect_start(from, id, deflector)
+ @@sync.synchronize do
+ Deflect.deflecting ||= DeflectorCollection.new
+ Deflect.deflecting.member?(from, id) and
+ raise DeflectError, "#{from}##{id} is already deflected"
+ Deflect.deflecting.add(from, id, deflector)
+ from.class_eval do
+ define_method(id) do |*args|
+ if Deflect.deflecting and d = Deflect.deflecting.find(self.class, id)
+ d.call(self, id, *args)
+ else
+ super(*args)
+ end
+ end
+ end
+ end
+ end
+
+ # Return true if method _id_ is deflected from class _from_, otherwise
+ # return false.
+ def self.deflect?(from, id)
+ Deflect.deflecting && Deflect.deflecting.member?(from, id)
+ end
+
+ # Return true if method _id_ is deflected from class _from_, otherwise
+ # return false.
+ def deflect?(from, id)
+ Deflect.deflect?(from, id)
+ end
+
+ # Start deflecting method calls named _id_ to the _from_ class using the
+ # Deflector instance deflector. After that yield to the given block and
+ # stop deflecting again.
+ def deflect(from, id, deflector)
+ @@sync.synchronize do
+ begin
+ deflect_start(from, id, deflector)
+ yield
+ ensure
+ deflect_stop(from, id)
+ end
+ end
+ end
+
+ # Stop deflection method calls named _id_ to class _from_.
+ def deflect_stop(from, id)
+ @@sync.synchronize do
+ Deflect.deflecting.delete(from, id) or
+ raise DeflectError, "#{from}##{id} is not deflected from"
+ from.instance_eval { remove_method id }
+ end
+ end
+ end
+
+ # This module can be included into modules/classes to make the delegate
+ # method available.
+ module Delegate
+ UNSET = Object.new
+
+ # A method to easily delegate methods to an object, stored in an
+ # instance variable or returned by a method call.
+ #
+ # It's used like this:
+ # class A
+ # delegate :method_here, :@obj, :method_there
+ # end
+ # or:
+ # class A
+ # delegate :method_here, :method_call, :method_there
+ # end
+ #
+ # _other_method_name_ defaults to method_name, if it wasn't given.
+ #def delegate(method_name, to: UNSET, as: method_name)
+ def delegate(method_name, opts = {})
+ to = opts[:to] || UNSET
+ as = opts[:as] || method_name
+ raise ArgumentError, "to argument wasn't defined" if to == UNSET
+ to = to.to_s
+ case
+ when to[0, 2] == '@@'
+ define_method(as) do |*args, &block|
+ if self.class.class_variable_defined?(to)
+ self.class.class_variable_get(to).__send__(method_name, *args, &block)
+ end
+ end
+ when to[0] == ?@
+ define_method(as) do |*args, &block|
+ if instance_variable_defined?(to)
+ instance_variable_get(to).__send__(method_name, *args, &block)
+ end
+ end
+ when (?A..?Z).include?(to[0])
+ define_method(as) do |*args, &block|
+ Tins::DeepConstGet.deep_const_get(to).__send__(method_name, *args, &block)
+ end
+ else
+ define_method(as) do |*args, &block|
+ __send__(to).__send__(method_name, *args, &block)
+ end
+ end
+ end
+ end
+
+ # This module includes the block_self module_function.
+ module BlockSelf
+ module_function
+
+ # This method returns the receiver _self_ of the context in which _block_
+ # was created.
+ def block_self(&block)
+ eval 'self', block.__send__(:binding)
+ end
+ end
+
+ # This module contains a configurable method missing delegator and can be
+ # mixed into a module/class.
+ module MethodMissingDelegator
+
+ # Including this module in your classes makes an _initialize_ method
+ # available, whose first argument is used as method_missing_delegator
+ # attribute. If a superior _initialize_ method was defined it is called
+ # with all arguments but the first.
+ module DelegatorModule
+ include Tins::MethodMissingDelegator
+
+ def initialize(delegator, *a, &b)
+ self.method_missing_delegator = delegator
+ super(*a, &b) if defined? super
+ end
+ end
+
+ # This class includes DelegatorModule and can be used as a superclass
+ # instead of including DelegatorModule.
+ class DelegatorClass
+ include DelegatorModule
+ end
+
+ # This object will be the receiver of all missing method calls, if it has a
+ # value other than nil.
+ attr_accessor :method_missing_delegator
+
+ # Delegates all missing method calls to _method_missing_delegator_ if this
+ # attribute has been set. Otherwise it will call super.
+ def method_missing(id, *a, &b)
+ unless method_missing_delegator.nil?
+ method_missing_delegator.__send__(id, *a, &b)
+ else
+ super
+ end
+ end
+ end
+
+ module ParameterizedModule
+ # Pass _args_ and _block_ to configure the module and then return it after
+ # calling the parameterize method has been called with these arguments. The
+ # _parameterize_ method should return a configured module.
+ def parameterize_for(*args, &block)
+ respond_to?(:parameterize) ? parameterize(*args, &block) : self
+ end
+ end
+
+ module FromModule
+ include ParameterizedModule
+
+ alias from parameterize_for
+
+ def parameterize(opts = {})
+ modul = opts[:module] or raise ArgumentError, 'option :module is required'
+ import_methods = Array(opts[:methods])
+ result = modul.dup
+ remove_methods = modul.instance_methods.map(&:to_sym) - import_methods.map(&:to_sym)
+ remove_methods.each do |m|
+ begin
+ result.__send__ :remove_method, m
+ rescue NameError
+ end
+ end
+ result
+ end
+ end
+
+ module Scope
+ def scope_push(scope_frame, name = :default)
+ scope_get(name).push scope_frame
+ self
+ end
+
+ def scope_pop(name = :default)
+ scope_get(name).pop
+ scope_get(name).empty? and Thread.current[name] = nil
+ self
+ end
+
+ def scope_top(name = :default)
+ scope_get(name).last
+ end
+
+ def scope_reverse(name = :default, &block)
+ scope_get(name).reverse_each(&block)
+ end
+
+ def scope_block(scope_frame, name = :default)
+ scope_push(scope_frame, name)
+ yield
+ ensure
+ scope_pop(name)
+ end
+
+ def scope_get(name = :default)
+ Thread.current[name] ||= []
+ end
+
+ def scope(name = :default)
+ scope_get(name).dup
+ end
+ end
+
+ module DynamicScope
+ class Context < Hash
+ def [](name)
+ super name.to_sym
+ end
+
+ def []=(name, value)
+ super name.to_sym, value
+ end
+ end
+
+ include Scope
+
+ attr_accessor :dynamic_scope_name
+
+ def dynamic_defined?(id)
+ self.dynamic_scope_name ||= :variables
+ scope_reverse(dynamic_scope_name) { |c| c.key?(id) and return true }
+ false
+ end
+
+ def dynamic_scope(&block)
+ self.dynamic_scope_name ||= :variables
+ scope_block(Context.new, dynamic_scope_name, &block)
+ end
+
+ def method_missing(id, *args)
+ self.dynamic_scope_name ||= :variables
+ if args.empty? and scope_reverse(dynamic_scope_name) { |c| c.key?(id) and return c[id] }
+ super
+ elsif args.size == 1 and id.to_s =~ /(.*?)=\Z/
+ c = scope_top(dynamic_scope_name) or super
+ c[$1] = args.first
+ else
+ super
+ end
+ end
+ end
+end
+DSLKit = Tins
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/duration.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/duration.rb
new file mode 100644
index 0000000000..264a888f18
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/duration.rb
@@ -0,0 +1,95 @@
+module Tins
+ class Duration
+ include Comparable
+
+ def initialize(seconds)
+ @negative = seconds < 0
+ seconds = seconds.abs
+ @original_seconds = seconds
+ @days, @hours, @minutes, @seconds, @fractional_seconds =
+ [ 86_400, 3600, 60, 1, 0 ].inject([ [], seconds ]) {|(r, s), d|
+ if d > 0
+ dd, rest = s.divmod(d)
+ r << dd
+ [ r, rest ]
+ else
+ r << s
+ end
+ }
+ end
+
+ def to_f
+ @original_seconds.to_f
+ end
+
+ def <=>(other)
+ to_f <=> other.to_f
+ end
+
+ def negative?
+ @negative
+ end
+
+ def days?
+ @days > 0
+ end
+
+ def hours?
+ @hours > 0
+ end
+
+ def minutes?
+ @minutes > 0
+ end
+
+ def seconds?
+ @seconds > 0
+ end
+
+ def fractional_seconds?
+ @fractional_seconds > 0
+ end
+
+ def format(template = '%S%d+%h:%m:%s.%f', precision: nil)
+ result = template.gsub(/%[DdhmSs]/) { |directive|
+ case directive
+ when '%S' then ?- if negative?
+ when '%d' then @days
+ when '%h' then '%02u' % @hours
+ when '%m' then '%02u' % @minutes
+ when '%s' then '%02u' % @seconds
+ when '%D' then format_smart
+ end
+ }
+ if result.include?('%f')
+ if precision
+ fractional_seconds = "%.#{precision}f" % @fractional_seconds
+ else
+ fractional_seconds = '%f' % @fractional_seconds
+ end
+ result.gsub!('%f', fractional_seconds[2..-1])
+ end
+ result
+ end
+
+ def to_s
+ format_smart
+ end
+
+ private
+
+ def format_smart
+ template = '%h:%m:%s'
+ precision = nil
+ if days?
+ template.prepend '%d+'
+ end
+ if fractional_seconds?
+ template << '.%f'
+ precision = 3
+ end
+ template.prepend '%S'
+ format template, precision: precision
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/expose.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/expose.rb
new file mode 100644
index 0000000000..297ad784b2
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/expose.rb
@@ -0,0 +1,27 @@
+module Tins
+ module Expose
+ # Expose any (private/protected) method or internal state of this object
+ # returning the result for specing purposes.
+ #
+ # @param method_name [ Symbol | String ] name of the method
+ # (shortcut for reader methods).
+ # @param block [ Proc ] any private/protected methods of the object can be
+ # called in this block.
+ #
+ # @return [ Object ] result of the method or block call
+ def expose(method_name = nil, *args, &block)
+ if block
+ instance_eval(&block)
+ elsif method_name.nil?
+ methods = private_methods(true) + protected_methods(true)
+ o = dup
+ o.singleton_class.class_eval do
+ public(*methods)
+ end
+ o
+ elsif method_name
+ __send__(method_name, *args)
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/extract_last_argument_options.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/extract_last_argument_options.rb
new file mode 100644
index 0000000000..8ab8e7c9c9
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/extract_last_argument_options.rb
@@ -0,0 +1,14 @@
+module Tins
+ module ExtractLastArgumentOptions
+ def extract_last_argument_options
+ last_argument = last
+ if last_argument.respond_to?(:to_hash) and
+ options = last_argument.to_hash.dup
+ then
+ return self[0..-2], options
+ else
+ return dup, {}
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/file_binary.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/file_binary.rb
new file mode 100644
index 0000000000..255f3c1b40
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/file_binary.rb
@@ -0,0 +1,83 @@
+module Tins
+ module FileBinary
+ module Constants
+ SEEK_SET = ::File::SEEK_SET
+
+ ZERO = "\x00"
+ BINARY = "\x01-\x1f\x7f-\xff"
+
+ if defined?(::Encoding)
+ ZERO.force_encoding(Encoding::ASCII_8BIT)
+ BINARY.force_encoding(Encoding::ASCII_8BIT)
+ end
+ end
+
+ class << self
+ # Default options can be queried/set via this hash.
+ attr_accessor :default_options
+ end
+ self.default_options = {
+ offset: 0,
+ buffer_size: 2 ** 13,
+ percentage_binary: 30.0,
+ percentage_zeros: 0.0,
+ }
+
+ # Returns true if this file is considered to be binary, false if it is not
+ # considered to be binary, and nil if it was empty.
+ #
+ # A file is considered to be binary if the percentage of zeros exceeds
+ # options[:percentage_zeros] or the percentage of binary bytes
+ # (8-th bit is 1) exceeds options[:percentage_binary] in the
+ # buffer of size options[:buffer_size] that is checked (beginning
+ # from offset options[:offset]). If an option isn't given the one
+ # from FileBinary.default_options is used instead.
+ def binary?(options = {})
+ options = FileBinary.default_options.merge(options)
+ old_pos = tell
+ seek options[:offset], Constants::SEEK_SET
+ data = read options[:buffer_size]
+ !data or data.empty? and return nil
+ data_size = data.size
+ data.count(Constants::ZERO).to_f / data_size >
+ options[:percentage_zeros] / 100.0 and return true
+ data.count(Constants::BINARY).to_f / data_size >
+ options[:percentage_binary] / 100.0
+ ensure
+ old_pos and seek old_pos, Constants::SEEK_SET
+ end
+
+ # Returns true if FileBinary#binary? returns false, false if
+ # FileBinary#binary? returns true, and nil otherwise. For an explanation of
+ # +options+, see FileBinary#binary?.
+ def ascii?(options = {})
+ case binary?(options)
+ when true then false
+ when false then true
+ end
+ end
+
+ def self.included(modul)
+ modul.instance_eval do
+ extend ClassMethods
+ end
+ super
+ end
+
+ module ClassMethods
+ # Returns true if the file with name +name+ is considered to be binary
+ # using the FileBinary#binary? method.
+ def binary?(name, options = {})
+ open(name, 'rb') { |f| f.binary?(options) }
+ end
+
+ # Returns true if the file with name +name+ is considered to be ascii
+ # using the FileBinary#ascii? method.
+ def ascii?(name, options = {})
+ open(name, 'rb') { |f| f.ascii?(options) }
+ end
+ end
+ end
+end
+
+require 'tins/alias'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/find.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/find.rb
new file mode 100644
index 0000000000..560ca2d299
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/find.rb
@@ -0,0 +1,149 @@
+require 'enumerator'
+require 'pathname'
+require 'tins/module_group'
+
+module Tins
+ module Find
+ EXPECTED_STANDARD_ERRORS = ModuleGroup[
+ Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP,
+ Errno::ENAMETOOLONG
+ ]
+
+ class Finder
+ module PathExtension
+ attr_accessor :finder
+
+ def finder_stat
+ finder.protect_from_errors do
+ finder.follow_symlinks ? File.stat(self) : File.lstat(self)
+ end
+ end
+
+ def file
+ finder.protect_from_errors do
+ File.new(self) if file?
+ end
+ end
+
+ def file?
+ finder.protect_from_errors { s = finder_stat and s.file? }
+ end
+
+ def directory?
+ finder.protect_from_errors { s = finder_stat and s.directory? }
+ end
+
+ def exist?
+ finder.protect_from_errors { File.exist?(self) }
+ end
+
+ def stat
+ finder.protect_from_errors { File.stat(self) }
+ end
+
+ def lstat
+ finder.protect_from_errors { File.lstat(self) }
+ end
+
+ def pathname
+ Pathname.new(self)
+ end
+
+ def suffix
+ pathname.extname[1..-1] || ''
+ end
+ end
+
+ def initialize(opts = {})
+ @show_hidden = opts.fetch(:show_hidden) { true }
+ @raise_errors = opts.fetch(:raise_errors) { false }
+ @follow_symlinks = opts.fetch(:follow_symlinks) { true }
+ if opts.key?(:visit) && opts.key?(:suffix)
+ raise ArgumentError, 'either use visit or suffix argument'
+ elsif opts.key?(:visit)
+ @visit = opts.fetch(:visit) { -> path { true } }
+ elsif opts.key?(:suffix)
+ @suffix = Array(opts[:suffix])
+ @visit = -> path { @suffix.nil? || @suffix.empty? || @suffix.include?(path.suffix) }
+ end
+ end
+
+ attr_accessor :show_hidden
+
+ attr_accessor :raise_errors
+
+ attr_accessor :follow_symlinks
+
+ attr_accessor :suffix
+
+ def visit_path?(path)
+ if !defined?(@visit) || @visit.nil?
+ true
+ else
+ @visit.(path)
+ end
+ end
+
+ def find(*paths)
+ block_given? or return enum_for(__method__, *paths)
+ paths.collect! { |d| d.dup }
+ while path = paths.shift
+ path = prepare_path(path)
+ catch(:prune) do
+ stat = path.finder_stat or next
+ visit_path?(path) and yield path
+ if stat.directory?
+ ps = protect_from_errors { Dir.entries(path) } or next
+ ps.sort!
+ ps.reverse_each do |p|
+ next if p == "." or p == ".."
+ next if !@show_hidden && p.start_with?('.')
+ p = File.join(path, p)
+ paths.unshift p
+ end
+ end
+ end
+ end
+ end
+
+ def prepare_path(path)
+ path = path.dup
+ path.extend PathExtension
+ path.finder = self
+ path
+ end
+
+ def protect_from_errors(errors = Find::EXPECTED_STANDARD_ERRORS)
+ yield
+ rescue errors
+ raise_errors and raise
+ return
+ end
+ end
+
+ #
+ # Calls the associated block with the name of every path and directory
+ # listed as arguments, then recursively on their subdirectories, and so on.
+ #
+ # See the +Find+ module documentation for an example.
+ #
+ def find(*paths, &block) # :yield: path
+ opts = Hash === paths.last ? paths.pop : {}
+ Finder.new(opts).find(*paths, &block)
+ end
+
+ #
+ # Skips the current path or directory, restarting the loop with the next
+ # entry. If the current path is a directory, that directory will not be
+ # recursively entered. Meaningful only within the block associated with
+ # Find::find.
+ #
+ # See the +Find+ module documentation for an example.
+ #
+ def prune
+ throw :prune
+ end
+
+ module_function :find, :prune
+ end
+end
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/generator.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/generator.rb
new file mode 100644
index 0000000000..49ecb2c0c7
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/generator.rb
@@ -0,0 +1,68 @@
+module Tins
+ # This class can create generator objects, that can produce all tuples, that
+ # would be created by as many for-loops as dimensions were given.
+ #
+ # The generator
+ # g = Tins::Generator[1..2, %w[a b c]]
+ # produces
+ # g.to_a # => [[1, "a"], [1, "b"], [1, "c"], [2, "a"], [2, "b"], [2, "c"]]
+ #
+ # The 'each' method can be used to iterate over the tuples
+ # g.each { |a, b| puts "#{a} #{b}" }
+ # and Tins::Generator includes the Enumerable module, so
+ # Enumerable.instance_methods can be used as well:
+ # g.select { |a, b| %w[a c].include? b } # => [[1, "a"], [1, "c"], [2, "a"], [2, "c"]]
+ #
+ class Generator
+ include Enumerable
+
+ # Create a new Generator object from the enumberables _enums_.
+ def self.[](*enums)
+ new(enums)
+ end
+
+ # Create a new Generator instance. Use the objects in the Array _enums_
+ # as dimensions. The should all respond to the :each method (see module
+ # Enumerable in the core ruby library).
+ def initialize(enums)
+ @enums, @iterators, @n = [], [], 0
+ enums.each { |e| add_dimension(e) }
+ end
+
+ # Iterate over all tuples produced by this generator and yield to them.
+ def each(&block) # :yield: tuple
+ recurse(&block)
+ self
+ end
+
+ def recurse(tuple = [ nil ] * @n, i = 0, &block)
+ if i < @n - 1 then
+ @enums[i].__send__(@iterators[i]) do |x|
+ tuple[i] = x
+ recurse(tuple, i + 1, &block)
+ end
+ else
+ @enums[i].__send__(@iterators[i]) do |x|
+ tuple[i] = x
+ yield tuple.dup
+ end
+ end
+ end
+ private :recurse
+
+ # Add another dimension to this generator. _enum_ is an object, that ought
+ # to respond to the _iterator_ method (defaults to :each).
+ def add_dimension(enum, iterator = :each)
+ @enums << enum
+ @iterators << iterator
+ @n += 1
+ end
+
+ # Return the size of this generator, that is the number of its dimensions.
+ def size
+ @enums.size
+ end
+ end
+end
+
+require 'tins/alias'
diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/go.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/go.rb
new file mode 100644
index 0000000000..e4d62d8525
--- /dev/null
+++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/go.rb
@@ -0,0 +1,96 @@
+module Tins
+ module GO
+ module EnumerableExtension
+ def push(argument)
+ @arguments ||= []
+ @arguments.push argument
+ self
+ end
+ alias << push
+
+ def each(&block)
+ @arguments.each(&block)
+ self
+ end
+ include Enumerable
+ end
+
+ module_function
+
+ # Parses the argument array _args_, according to the pattern _s_, to
+ # retrieve the single character command line options from it. If _s_ is
+ # 'xy:' an option '-x' without an option argument is searched, and an
+ # option '-y foo' with an option argument ('foo'). To disable the '-x'
+ # option, pass '~x'.
+ #
+ # The _defaults_ argument specifies default values for the options.
+ #
+ # An option hash is returned with all found options set to true or the
+ # found option argument.
+ def go(s, args = ARGV, defaults: {})
+ d = defaults || {}
+ b, v = s.scan(/(.)(:?)/).inject([ {}, {} ]) { |t, (o, a)|
+ a = a == ?:
+ t[a ? 1 : 0][o] = a ? nil : false
+ t
+ }
+ b.each_key do |k|
+ d.key?(k) or next
+ if [ 0, false, nil ].include?(d[k])
+ b[k] = false
+ elsif d[k].respond_to?(:to_int)
+ b[k] = d[k].to_int
+ else
+ b[k] = 1
+ end
+ end
+ v.each_key do |k|
+ d.key?(k) or next
+ if [ 0, false, nil ].include?(d[k])
+ v[k] = nil
+ else
+ v[k] = d[k].to_s
+ end
+ end
+ r = []
+ while a = args.shift
+ /\A-(?
.+)/ =~ a or (r << a; next) + until p == '' + o = p.slice!(0, 1) + if v.key?(o) + if p.empty? && args.empty? + r << a + break 1 + elsif p == '' + a = args.shift + else + a = p + end + if v[o].nil? || !(EnumerableExtension === v[o]) + a = a.dup + a.extend EnumerableExtension + a << a + v[o] = a + else + v[o] << a + end + break + elsif b.key?(o) + if b[o] + b[o] += 1 + else + b[o] = 1 + end + else + r << a + end + end && break + end + r.reject! { |a| (b[p] = false) || true if /\A~(?
.)/ =~ a } + args.replace r + b.merge(v) + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/hash_symbolize_keys_recursive.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/hash_symbolize_keys_recursive.rb new file mode 100644 index 0000000000..7869a6a084 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/hash_symbolize_keys_recursive.rb @@ -0,0 +1,48 @@ +require 'tins/thread_local' + +module Tins + module HashSymbolizeKeysRecursive + extend Tins::ThreadLocal + + thread_local :seen + + def symbolize_keys_recursive(circular: nil) + self.seen = {} + _symbolize_keys_recursive(self, circular: circular) + ensure + self.seen = nil + end + + def symbolize_keys_recursive!(circular: nil) + replace symbolize_keys_recursive(circular: circular) + end + + private + + def _symbolize_keys_recursive(object, circular: nil) + case + when seen[object.__id__] + object = circular + when Hash === object + seen[object.__id__] = true + new_object = object.class.new + seen[new_object.__id__] = true + object.each do |k, v| + new_object[k.to_s.to_sym] = _symbolize_keys_recursive(v, circular: circular) + end + object = new_object + when Array === object + seen[object.__id__] = true + new_object = object.class.new(object.size) + seen[new_object.__id__] = true + object.each_with_index do |v, i| + new_object[i] = _symbolize_keys_recursive(v, circular: circular) + end + object = new_object + end + object + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/hash_union.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/hash_union.rb new file mode 100644 index 0000000000..ce47d11427 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/hash_union.rb @@ -0,0 +1,15 @@ +module Tins + module HashUnion + def |(other) + case + when other.respond_to?(:to_hash) + other = other.to_hash + when other.respond_to?(:to_h) + other = other.to_h + end + other.merge(self) + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/if_predicate.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/if_predicate.rb new file mode 100644 index 0000000000..a238e9857e --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/if_predicate.rb @@ -0,0 +1,7 @@ +module Tins + module IfPredicate + def if? + self ? self : nil + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/implement.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/implement.rb new file mode 100644 index 0000000000..c6b62d1a8f --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/implement.rb @@ -0,0 +1,40 @@ +module Tins + module Implement + MESSAGES = { + default: 'method %{method_name} not implemented in module %{module}', + subclass: 'method %{method_name} has to be implemented in '\ + 'subclasses of %{module}', + submodule: 'method %{method_name} has to be implemented in '\ + 'submodules of %{module}', + } + + def implement(method_name, msg = :default) + method_name.nil? and return + case msg + when ::Symbol + msg = MESSAGES.fetch(msg) + when ::Hash + return implement method_name, msg.fetch(:in) + end + display_method_name = method_name + if m = instance_method(method_name) rescue nil + m.extend Tins::MethodDescription + display_method_name = m.description(style: :name) + end + begin + msg = msg % { method_name: display_method_name, module: self } + rescue KeyError + end + define_method(method_name) do |*| + raise ::NotImplementedError, msg + end + end + + def implement_in_submodule(method_name) + implement method_name, + 'method %{method_name} has to be implemented in submodules of'\ + ' %{module}' + end + end +end + diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/limited.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/limited.rb new file mode 100644 index 0000000000..6b753bb06c --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/limited.rb @@ -0,0 +1,44 @@ +require 'thread' + +module Tins + class Limited + # Create a Limited instance, that runs _maximum_ threads at most. + def initialize(maximum) + @mutex = Mutex.new + @continue = ConditionVariable.new + @maximum = Integer(maximum) + raise ArgumentError, "maximum < 1" if @maximum < 1 + @count = 0 + @tg = ThreadGroup.new + end + + # The maximum number of worker threads. + attr_reader :maximum + + # Execute _maximum_ number of threads in parallel. + def execute + @mutex.synchronize do + loop do + if @count < @maximum + @count += 1 + Thread.new do + @tg.add Thread.current + yield + @mutex.synchronize { @count -= 1 } + @continue.signal + end + return + else + @continue.wait(@mutex) + end + end + end + end + + def wait + @tg.list.each(&:join) + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/lines_file.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/lines_file.rb new file mode 100644 index 0000000000..13fb5550c3 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/lines_file.rb @@ -0,0 +1,123 @@ +module Tins + class LinesFile + module LineExtension + attr_reader :line_number + + def filename + lines_file.filename.dup + end + end + + def self.for_filename(filename, line_number = nil) + obj = new(File.readlines(filename), line_number) + obj.filename = filename + obj + end + + def self.for_file(file, line_number = nil) + obj = new(file.readlines, line_number) + obj.filename = file.path + obj + end + + def self.for_lines(lines, line_number = nil) + new(lines, line_number) + end + + def initialize(lines, line_number = nil) + @lines = lines + @lines.each_with_index do |line, i| + line.extend LineExtension + line.instance_variable_set :@line_number, i + 1 + line.instance_variable_set :@lines_file, self + end + instance_variable_set :@line_number, line_number || (@lines.empty? ? 0 : 1) + end + + attr_accessor :filename + + attr_reader :line_number + + def rewind + self.line_number = 1 + self + end + + def next! + old = line_number + self.line_number += 1 + line_number > old ? self : nil + end + + def previous! + old = line_number + self.line_number -= 1 + line_number < old ? self : nil + end + + def line_number=(number) + number = number.to_i + if number > 0 && number <= last_line_number + @line_number = number + end + end + + def last_line_number + @lines.size + end + + def empty? + @lines.empty? + end + + def each(&block) + empty? and return self + old_line_number = line_number + 1.upto(last_line_number) do |number| + self.line_number = number + block.call(line) + end + self + ensure + self.line_number = old_line_number + end + include Enumerable + + def line + index = line_number - 1 + @lines[index] if index >= 0 + end + + def file_linenumber + "#{filename}:#{line_number}" + end + + def match_backward(regexp, previous_after_match = false) + begin + if line =~ regexp + previous_after_match and previous! + return $~.captures + end + end while previous! + end + + def match_forward(regexp, next_after_match = false) + begin + if line =~ regexp + next_after_match and next! + return $~.captures + end + end while next! + end + + def to_s + "#{line_number} #{line.chomp}" + end + + def inspect + "#<#{self.class}: #{to_s.inspect}>" + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/memoize.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/memoize.rb new file mode 100644 index 0000000000..0ea38c7035 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/memoize.rb @@ -0,0 +1,91 @@ +require 'tins/extract_last_argument_options' + +module Tins + module Memoize + module CacheMethods + # Return the cache object. + def __memoize_cache__ + @__memoize_cache__ ||= {} + end + + # Clear cached values for all methods/functions. + def memoize_cache_clear + __memoize_cache__.clear + self + end + + def memoize_apply_visibility(id) + visibility = instance_eval do + case + when private_method_defined?(id) + :private + when protected_method_defined?(id) + :protected + end + end + yield + ensure + visibility and __send__(visibility, id) + end + end + + class ::Module + # Automatically memoize calls of the the methods +method_ids+. The + # memoized results do NOT ONLY depend on the arguments, but ALSO on the + # object the method is called on. + def memoize_method(*method_ids) + method_ids.extend(ExtractLastArgumentOptions) + method_ids, opts = method_ids.extract_last_argument_options + include CacheMethods + method_ids.each do |method_id| + method_id = method_id.to_s.to_sym + memoize_apply_visibility method_id do + orig_method = instance_method(method_id) + __send__(:define_method, method_id) do |*args| + mc = __memoize_cache__ + if mc.key?(method_id) and result = mc[method_id][args] + result + else + (mc[method_id] ||= {})[args] = result = orig_method.bind(self).call(*args) + $DEBUG and warn "#{self.class} cached method #{method_id}(#{args.inspect unless args.empty?}) = #{result.inspect} [#{__id__}]" + opts[:freeze] and result.freeze + end + result + end + end + end + method_ids.size == 1 ? method_ids.first : method_ids + end + + include CacheMethods + + # Automatically memoize calls of the functions +function_ids+. The + # memoized result does ONLY depend on the arguments given to the + # function. + def memoize_function(*function_ids) + function_ids.extend(ExtractLastArgumentOptions) + function_ids, opts = function_ids.extract_last_argument_options + mc = __memoize_cache__ + function_ids.each do |function_id| + function_id = function_id.to_s.to_sym + memoize_apply_visibility function_id do + orig_function = instance_method(function_id) + __send__(:define_method, function_id) do |*args| + if mc.key?(function_id) and result = mc[function_id][args] + result + else + (mc[function_id] ||= {})[args] = result = orig_function.bind(self).call(*args) + opts[:freeze] and result.freeze + $DEBUG and warn "#{self.class} cached function #{function_id}(#{args.inspect unless args.empty?}) = #{result.inspect}" + end + result + end + end + end + function_ids.size == 1 ? function_ids.first : function_ids + end + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/method_description.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/method_description.rb new file mode 100644 index 0000000000..7e0aa601ae --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/method_description.rb @@ -0,0 +1,143 @@ +module Tins + module MethodDescription + class Parameters + class Parameter < Struct.new(:type, :name) + def ==(other) + type == other.type + end + + def inspect + "#<#{self.class} #{to_s.inspect}>" + end + end + + class RestParameter < Parameter + def to_s + "*#{name}" + end + end + + class KeyrestParameter < Parameter + def to_s + "**#{name}" + end + end + + class ReqParameter < Parameter + def to_s + name.to_s + end + end + + class OptParameter < Parameter + def to_s + "#{name}=?" + end + end + + class KeyParameter < Parameter + def to_s + "#{name}:?" + end + end + + class KeyreqParameter < Parameter + def to_s + "#{name}:" + end + end + + class BlockParameter < Parameter + def to_s + "{name}" + end + end + + class GenericParameter < Parameter + def to_s + [ name, type ] * ?: + end + end + + def self.build(type, name) + parameter_classname = "#{type.to_s.capitalize}Parameter" + parameter_class = + if const_defined? parameter_classname + const_get parameter_classname + else + GenericParameter + end + parameter_class.new(type, name) + end + end + + class Signature + def initialize(*parameters) + @parameters = parameters + end + + attr_reader :parameters + + def eql?(other) + @parameters.eql? other.parameters + end + + def ==(other) + @parameters == other.parameters + end + + def ===(method) + self == method.signature + end + + def to_s + @parameters * ?, + end + + def inspect + "#<#{self.class} (#{to_s})>" + end + end + + def signature + description style: :parameters + end + + def description(style: :namespace) + valid_styles = %i[ namespace name parameters ] + valid_styles.include?(style) or + raise ArgumentError, + "style has to be one of #{valid_styles * ', '}" + if respond_to?(:parameters) + generated_name = 'x0' + parameter_array = parameters.map { |p_type, p_name| + unless p_name + generated_name = generated_name.succ + p_name = generated_name + end + Parameters.build(p_type, p_name) + } + signature = Signature.new(*parameter_array) + if style == :parameters + return signature + end + end + result = '' + if style == :namespace + if owner <= Module + result << receiver.to_s << ?. # XXX Better to use owner here as well? + else + result << owner.name.to_s << ?# + end + end + if %i[ namespace name ].include?(style) + result << name.to_s << '(' + end + result << (signature || arity).to_s + if %i[ namespace name ].include?(style) + result << ?) + end + result + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/minimize.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/minimize.rb new file mode 100644 index 0000000000..68c94aff96 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/minimize.rb @@ -0,0 +1,55 @@ +module Tins + # This module can be mixed into all classes, whose instances respond to the + # [] and size-methods, like for example Array. The returned elements from [] + # should respond to the succ method. + module Minimize + # Returns a minimized version of this object, that is successive elements + # are substituted with ranges a..b. In the situation ..., x, y,... and y != + # x.succ a range x..x is created, to make it easier to iterate over all the + # ranges in one run. A small example: + # [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ].minimize # => [ 'A'..'C', 'G'..'G', 'K'..'M' ] + # + # If the order of the original elements doesn't matter, it's a good idea to + # first sort them and then minimize: + # [ 5, 1, 4, 2 ].sort.minimize # => [ 1..2, 4..5 ] + def minimize + result = [] + last_index = size - 1 + size.times do |i| + result << [ self[0] ] if i == 0 + if self[i].succ != self[i + 1] or i == last_index + result[-1] << self[i] + result << [ self[i + 1] ] unless i == last_index + end + end + result.map! { |a, b| a..b } + end + + # First minimizes this object, then calls the replace method with the + # result. + def minimize! + replace minimize + end + + # Invert a minimized version of an object. Some small examples: + # [ 'A'..'C', 'G'..'G', 'K'..'M' ].unminimize # => [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ] + # and + # [ 1..2, 4..5 ].unminimize # => [ 1, 2, 4, 5 ] + def unminimize + result = [] + for range in self + for e in range + result << e + end + end + result + end + + # Invert a minimized version of this object in place. + def unminimize! + replace unminimize + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/module_group.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/module_group.rb new file mode 100644 index 0000000000..91e3b6fc51 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/module_group.rb @@ -0,0 +1,13 @@ +module Tins + module ModuleGroup + def self.[](*modules) + modul = Module.new + modules.each do |m| + m.module_eval { include modul } + end + modul + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/named_set.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/named_set.rb new file mode 100644 index 0000000000..1b31e0af8f --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/named_set.rb @@ -0,0 +1,12 @@ +require 'set' + +module Tins + class NamedSet < Set + def initialize(name) + @name = name + super() + end + + attr_accessor :name + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/null.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/null.rb new file mode 100644 index 0000000000..d974a9d8f3 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/null.rb @@ -0,0 +1,101 @@ +module Tins + # Implementation of the null object pattern in Ruby. + module Null + def method_missing(*) + self + end + + def const_missing(*) + self + end + + def to_s + '' + end + + def to_str + nil + end + + def to_f + 0.0 + end + + def to_i + 0 + end + + def to_int + nil + end + + def to_a + [] + end + + def to_ary + nil + end + + def inspect + 'NULL' + end + + def nil? + true + end + + def blank? + true + end + + def as_json(*) + end + + def to_json(*) + 'null' + end + + module Kernel + def null(value = nil) + value.nil? ? Tins::NULL : value + end + + alias Null null + + def null_plus(opts = {}) + value = opts[:value] + opts[:caller] = caller + if respond_to?(:caller_locations, true) + opts[:caller_locations] = caller_locations + end + + value.nil? ? Tins::NullPlus.new(opts) : value + end + + alias NullPlus null_plus + end + end + + class NullClass < Module + include Tins::Null + end + + NULL = NullClass.new + + NULL.freeze + + class NullPlus + include Tins::Null + + def initialize(opts = {}) + singleton_class.class_eval do + opts.each do |name, value| + define_method(name) { value } + end + end + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/once.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/once.rb new file mode 100644 index 0000000000..8e2800ff8c --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/once.rb @@ -0,0 +1,25 @@ +module Tins + module Once + include File::Constants + + module_function + + def only_once(lock_filename = nil, locking_constant = nil) + lock_filename ||= $0 + locking_constant ||= LOCK_EX + f = File.new(lock_filename, RDONLY) + f.flock(locking_constant) and yield + ensure + if f + f.flock LOCK_UN + f.close + end + end + + def try_only_once(lock_filename = nil, locking_constant = nil, &block) + only_once(lock_filename, locking_constant || LOCK_EX | LOCK_NB, &block) + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/p.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/p.rb new file mode 100644 index 0000000000..e4061f4385 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/p.rb @@ -0,0 +1,23 @@ +require 'pp' + +module Tins + module P + private + + # Raise a runtime error with the inspected objects +objs+ (obtained by + # calling the #inspect method) as their message text. This is useful for + # quick debugging. + def p!(*objs) + raise((objs.size < 2 ? objs.first : objs).inspect) + end + + # Raise a runtime error with the inspected objects +objs+ (obtained by + # calling the #pretty_inspect method) as their message text. This is useful + # for quick debugging. + def pp!(*objs) + raise("\n" + (objs.size < 2 ? objs.first : objs).pretty_inspect.chomp) + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/partial_application.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/partial_application.rb new file mode 100644 index 0000000000..cbd382268f --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/partial_application.rb @@ -0,0 +1,31 @@ +module Tins + module PartialApplication + # If this module is included into a Proc (or similar object), it tampers + # with its Proc#arity method. + def self.included(modul) + modul.module_eval do + old_arity = instance_method(:arity) + define_method(:arity) do + defined?(@__arity__) or old_arity.bind(self).call + end + end + super + end + + # Create a partial application of this Proc (or similar object) using + # _args_ as the already applied arguments. + def partial(*args) + if args.empty? + dup + elsif args.size > arity + raise ArgumentError, "wrong number of arguments (#{args.size} for #{arity})" + else + f = lambda { |*b| call(*(args + b)) } + f.instance_variable_set :@__arity__, arity - args.size + f + end + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/proc_compose.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/proc_compose.rb new file mode 100644 index 0000000000..6fefd60f97 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/proc_compose.rb @@ -0,0 +1,15 @@ +module Tins + module ProcCompose + def compose(other) + self.class.new do |*args| + if other.respond_to?(:call) + call(*other.call(*args)) + else + call(*other.to_proc.call(*args)) + end + end + end + + alias * compose + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/proc_prelude.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/proc_prelude.rb new file mode 100644 index 0000000000..8bb6cbea3e --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/proc_prelude.rb @@ -0,0 +1,73 @@ +require 'tins/memoize' + +module Tins + module ProcPrelude + def apply(&my_proc) + my_proc or raise ArgumentError, 'a block argument is required' + lambda { |list| my_proc.call(*list) } + end + + def map_apply(my_method, *args, &my_proc) + my_proc or raise ArgumentError, 'a block argument is required' + lambda { |x, y| my_proc.call(x, y.__send__(my_method, *args)) } + end + + def call(obj, &my_proc) + my_proc or raise ArgumentError, 'a block argument is required' + obj.instance_eval(&my_proc) + end + + def array + lambda { |*list| list } + end + memoize_function :array, freeze: true + + def first + lambda { |*list| list.first } + end + memoize_function :first, freeze: true + + alias head first + + def second + lambda { |*list| list[1] } + end + memoize_function :second, freeze: true + + def tail + lambda { |*list| list[1..-1] } + end + memoize_function :tail, freeze: true + + def last + lambda { |*list| list.last } + end + memoize_function :last, freeze: true + + def rotate(n = 1) + lambda { |*list| list.rotate(n) } + end + + alias swap rotate + + def id1 + lambda { |obj| obj } + end + memoize_function :id1, freeze: true + + def const(konst = nil, &my_proc) + konst ||= my_proc.call + lambda { |*_| konst } + end + + def nth(n) + lambda { |*list| list[n] } + end + + def from(&block) + my_method, binding = block.call, block.binding + my_self = eval 'self', binding + lambda { |*list| my_self.__send__(my_method, *list) } + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/range_plus.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/range_plus.rb new file mode 100644 index 0000000000..07ed9c33ad --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/range_plus.rb @@ -0,0 +1,9 @@ +module Tins + module RangePlus + def +(other) + to_a + other.to_a + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/require_maybe.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/require_maybe.rb new file mode 100644 index 0000000000..aab9dccf4d --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/require_maybe.rb @@ -0,0 +1,9 @@ +module Tins + module RequireMaybe + def require_maybe(library) + require library + rescue LoadError => e + block_given? and yield e + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/responding.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/responding.rb new file mode 100644 index 0000000000..f2dd7e3468 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/responding.rb @@ -0,0 +1,19 @@ +module Tins + module Responding + def responding?(*method_names) + Class.new do + define_method(:to_s) do + "Responding to #{method_names * ', '}" + end + + alias inspect to_s + + define_method(:===) do |object| + method_names.all? do |method_name| + object.respond_to?(method_name) + end + end + end.new + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/secure_write.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/secure_write.rb new file mode 100644 index 0000000000..fc79904df3 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/secure_write.rb @@ -0,0 +1,27 @@ +module Tins + module SecureWrite + # Write to a file atomically + def secure_write(filename, content = nil, mode = 'w') + temp = File.new(filename + ".tmp.#$$.#{Time.now.to_f}", mode) + if content.nil? and block_given? + yield temp + elsif !content.nil? + temp.write content + else + raise ArgumentError, "either content or block argument required" + end + temp.fsync + size = temp.stat.size + temp.close + File.rename temp.path, filename + size + ensure + if temp + !temp.closed? and temp.close + File.file?(temp.path) and File.unlink temp.path + end + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/sexy_singleton.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/sexy_singleton.rb new file mode 100644 index 0000000000..d342df54a1 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/sexy_singleton.rb @@ -0,0 +1,39 @@ +require 'singleton' + +module Tins + + SexySingleton = Singleton.dup + + module SexySingleton + module SingletonClassMethods + end + end + + class << SexySingleton + alias __old_singleton_included__ included + + def included(klass) + __old_singleton_included__(klass) + (class << klass; self; end).class_eval do + if Object.method_defined?(:respond_to_missing?) + def respond_to_missing?(name, *args) + instance.respond_to?(name) || super + end + else + def respond_to?(name, *args) + instance.respond_to?(name) || super + end + end + + def method_missing(name, *args, &block) + if instance.respond_to?(name) + instance.__send__(name, *args, &block) + else + super + end + end + end + super + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_byte_order_mark.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_byte_order_mark.rb new file mode 100644 index 0000000000..36f069ede2 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_byte_order_mark.rb @@ -0,0 +1,20 @@ +require 'tins/concern' + +module Tins + module StringByteOrderMark + def bom_encoding + prefix = self[0, 4].force_encoding(Encoding::ASCII_8BIT) + case prefix + when /\A\xef\xbb\xbf/n then Encoding::UTF_8 + when /\A\x00\x00\xff\xfe/n then Encoding::UTF_32BE + when /\A\xff\xfe\x00\x00/n then Encoding::UTF_32LE + when /\A\xfe\xff/n then Encoding::UTF_16BE + when /\A\xff\xfe/n then Encoding::UTF_16LE + when /\A\x2b\x2f\x76[\x38-\x39\x2b\x2f]/n then Encoding::UTF_7 + when /\A\x84\x31\x95\x33/n then Encoding::GB18030 + end + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_camelize.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_camelize.rb new file mode 100644 index 0000000000..90e2f207c6 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_camelize.rb @@ -0,0 +1,16 @@ +module Tins + module StringCamelize + def camelize(first_letter = :upper) + case first_letter + when :upper, true + gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } + when :lower, false + self[0].chr.downcase + camelize[1..-1] + end + end + + alias camelcase camelize + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_underscore.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_underscore.rb new file mode 100644 index 0000000000..c2e82287ba --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_underscore.rb @@ -0,0 +1,15 @@ +module Tins + module StringUnderscore + def underscore + word = dup + word.gsub!(/::/, '/') + word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2') + word.gsub!(/([a-z\d])([A-Z])/,'\1_\2') + word.tr!("-", "_") + word.downcase! + word + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_version.rb new file mode 100644 index 0000000000..bd5cf874e2 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/string_version.rb @@ -0,0 +1,104 @@ +module Tins + module StringVersion + LEVELS = [ :major, :minor, :build, :revision ].each_with_index. + each_with_object({}) { |(k, v), h| h[k] = v }.freeze + + SYMBOLS = LEVELS.invert.freeze + + class Version + include Comparable + + def initialize(string) + string =~ /\A\d+(\.\d+)*\z/ or + raise ArgumentError, "#{string.inspect} isn't a version number" + @version = string.frozen? ? string.dup : string + end + + LEVELS.each do |symbol, level| + define_method(symbol) do + self[level] + end + + define_method("#{symbol}=") do |new_level| + self[level] = new_level + end + end + + def bump(level = array.size - 1) + level = level_of(level) + self[level] += 1 + for l in level.succ..3 + self[l] &&= 0 + end + self + end + + def level_of(specifier) + if specifier.respond_to?(:to_sym) + LEVELS.fetch(specifier) + else + specifier + end + end + + def [](level) + array[level_of(level)] + end + + def []=(level, value) + level = level_of(level) + value = value.to_i + value >= 0 or raise ArgumentError, + "version numbers can't contain negative numbers like #{value}" + a = array + a[level] = value + a.map!(&:to_i) + @version.replace a * ?. + end + + def succ! + self[-1] += 1 + self + end + + def pred! + self[-1] -= 1 + self + end + + def <=>(other) + pairs = array.zip(other.array) + pairs.map! { |a, b| [ a.to_i, b.to_i ] } + a, b = pairs.transpose + a <=> b + end + + def ==(other) + (self <=> other).zero? + end + + def array + @version.split(?.).map(&:to_i) + end + + alias to_a array + + def to_s + @version + end + + def initialize_copy(source) + super + @version = source.instance_variable_get(:@version).dup + end + + alias inspect to_s + end + + def version + Version.new(self) + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/subhash.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/subhash.rb new file mode 100644 index 0000000000..4efa924e16 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/subhash.rb @@ -0,0 +1,42 @@ +module Tins + module Subhash + # Create a subhash from this hash, that only contains key-value pairs + # matching +patterns+ and return it. +patterns+ can be for example /^foo/ + # to put 'foobar' and 'foobaz' or 'foo'/:foo to put 'foo' into the subhash. + # + # If a block is given this method yields to it after the first pattern + # matched with a 3-tuple of +(key, value, match_data)+ using the return + # value of the block as the value of the result hash. +match_data+ is a + # MatchData instance if the matching pattern was a regular rexpression + # otherwise it is nil. + def subhash(*patterns) + patterns.map! do |pat| + pat = pat.to_sym.to_s if pat.respond_to?(:to_sym) + pat.respond_to?(:match) ? pat : pat.to_s + end + result = + if default_proc + self.class.new(&default_proc) + else + self.class.new(default) + end + if block_given? + each do |k, v| + patterns.each { |pat| + if pat === k.to_s + result[k] = yield(k, v, $~) + break + end + } + end + else + each do |k, v| + result[k] = v if patterns.any? { |pat| pat === k.to_s } + end + end + result + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/temp_io.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/temp_io.rb new file mode 100644 index 0000000000..bafcb857cf --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/temp_io.rb @@ -0,0 +1,26 @@ +require 'tmpdir' + +module Tins + module TempIO + def temp_io(content: nil, name: __method__) + content.nil? and raise ArgumentError, "missing keyword: content" + name = File.basename(name.to_s) + Dir.mktmpdir do |dir| + name = File.join(dir, name) + File.open(name, 'w+b') do |io| + if content.respond_to?(:call) + if content.respond_to?(:arity) && content.arity == 1 + content.call(io) + else + io.write content.call + end + else + io.write content + end + io.rewind + yield io + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/temp_io_enum.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/temp_io_enum.rb new file mode 100644 index 0000000000..028ce3c600 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/temp_io_enum.rb @@ -0,0 +1,26 @@ +require 'tins/temp_io' + +module Tins + module TempIO + class Enum < Enumerator + include Tins::TempIO + + def initialize(chunk_size: 2 ** 16, filename: nil, &content_proc) + content_proc or raise ArgumentError, 'need a content proc as block argument' + super() do |y| + temp_io(name: 'some-stream', content: content_proc) do |file| + until file.eof? + y.yield file.read(chunk_size) + end + end + end.tap do |enum| + if filename + enum.define_singleton_method(:filename) do + filename + end + end + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/terminal.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/terminal.rb new file mode 100644 index 0000000000..3c2cd95489 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/terminal.rb @@ -0,0 +1,42 @@ +begin + require 'io/console' +rescue LoadError +end + +module Tins + module Terminal + + module_function + + def winsize + if IO.respond_to?(:console) + console = IO.console + if console.respond_to?(:winsize) + console.winsize + else + [] + end + else + [] + end + end + + def rows + winsize[0] || `stty size 2>/dev/null`.split[0].to_i.nonzero? || + `tput lines 2>/dev/null`.to_i.nonzero? || 25 + end + + def lines + rows + end + + def columns + winsize[1] || `stty size 2>/dev/null`.split[1].to_i.nonzero? || + `tput cols 2>/dev/null`.to_i.nonzero? || 80 + end + + def cols + columns + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/thread_local.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/thread_local.rb new file mode 100644 index 0000000000..cf6169cf5a --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/thread_local.rb @@ -0,0 +1,57 @@ +module Tins + module ThreadLocal + @@mutex = Mutex.new + + @@cleanup = lambda do |my_object_id| + my_id = "__thread_local_#{my_object_id}__" + @@mutex.synchronize do + for t in Thread.list + t[my_id] = nil if t[my_id] + end + end + end + + # Define a thread local variable named _name_ in this module/class. If the + # value _value_ is given, it is used to initialize the variable. + def thread_local(name, default_value = nil, &default) + is_a?(Module) or raise TypeError, "receiver has to be a Module" + + default_value && default and raise ArgumentError, + "require either default_falue or default block" + + if default_value + default = -> * { default_value } + end + + name = name.to_s + my_id = "__thread_local_#{__id__}__" + + ObjectSpace.define_finalizer(self, @@cleanup) + + define_method(name) do + values = Thread.current[my_id] ||= {} + if default && !values.key?(name) + values[name] = default.call + end + values[name] + end + + define_method("#{name}=") do |value| + Thread.current[my_id] ||= {} + Thread.current[my_id][name] = value + end + + self + end + + # Define a thread local variable for the current instance with name _name_. + # If the value _value_ is given, it is used to initialize the variable. + def instance_thread_local(name, default_value = nil, &default) + class << self + extend Tins::ThreadLocal + self + end.thread_local name, default_value, &default + self + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/time_dummy.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/time_dummy.rb new file mode 100644 index 0000000000..dc58d5735d --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/time_dummy.rb @@ -0,0 +1,57 @@ +require 'time' + +module Tins + module TimeDummy + def self.included(modul) + class << modul + alias really_new new + alias really_now now + + remove_method :now rescue nil + remove_method :new rescue nil + + def dummy=(value) + if value.respond_to?(:to_str) + value = Time.parse(value.to_str) + elsif value.respond_to?(:to_time) + value = value.to_time + end + @dummy = value + end + + def dummy(value = nil) + if value.nil? + if defined?(@dummy) + @dummy + end + else + begin + old_dummy = @dummy + self.dummy = value + yield + ensure + self.dummy = old_dummy + end + end + end + + def new(*a) + if dummy + dummy.dup + elsif caller.first =~ /`now`/ + really_now + else + really_new(*a) + end + end + + def now + new + end + end + super + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/to.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/to.rb new file mode 100644 index 0000000000..4c5947a8a8 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/to.rb @@ -0,0 +1,8 @@ +module Tins + module To + def to(string) + shift_width = (string[/\A\s*/]).size + string.gsub(/^[^\S\n]{0,#{shift_width}}/, '') + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/to_proc.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/to_proc.rb new file mode 100644 index 0000000000..110f3bbf3d --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/to_proc.rb @@ -0,0 +1,12 @@ +module Tins + module ToProc + # :nocov: + def to_proc + lambda do |obj, *args| + obj.__send__(self, *args[0..-1]) + end + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/token.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/token.rb new file mode 100644 index 0000000000..16459b2460 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/token.rb @@ -0,0 +1,36 @@ +require 'securerandom' + +module Tins + class Token < String + DEFAULT_ALPHABET = + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".freeze + + BASE64_ALPHABET = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".freeze + + BASE64_URL_FILENAME_SAFE_ALPHABET = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".freeze + + BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".freeze + + BASE32_EXTENDED_HEX_ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUV".freeze + + BASE16_ALPHABET = "0123456789ABCDEF".freeze + + def initialize(bits: 128, length: nil, alphabet: DEFAULT_ALPHABET, random: SecureRandom) + alphabet.size > 1 or raise ArgumentError, 'need at least 2 symbols in alphabet' + if length + length > 0 or raise ArgumentError, 'length has to be positive' + else + bits > 0 or raise ArgumentError, 'bits has to be positive' + length = (Math.log(1 << bits) / Math.log(alphabet.size)).ceil + end + self.bits = (Math.log(alphabet.size ** length) / Math.log(2)).floor + token = '' + length.times { token << alphabet[random.random_number(alphabet.size)] } + super token + end + + attr_accessor :bits + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/uniq_by.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/uniq_by.rb new file mode 100644 index 0000000000..fae406232b --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/uniq_by.rb @@ -0,0 +1,10 @@ +module Tins + module UniqBy + def uniq_by(&b) + b ||= lambda { |x| x } + inject({}) { |h, e| h[b[e]] ||= e; h }.values + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/unit.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/unit.rb new file mode 100644 index 0000000000..998bb526bf --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/unit.rb @@ -0,0 +1,179 @@ +require 'strscan' +require 'bigdecimal' + +module Tins::Unit + Prefix = Struct.new(:name, :step, :multiplier, :fraction) + + PREFIX_LC = [ + '', 'k', 'm', 'g', 't', 'p', 'e', 'z', 'y', + ].each_with_index.map { |n, i| Prefix.new(n.freeze, 1000, 1000 ** i, false) }.freeze + + PREFIX_UC = [ + '', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', + ].each_with_index.map { |n, i| Prefix.new(n.freeze, 1024, 1024 ** i, false) }.freeze + + PREFIX_F = [ + '', 'm', 'µ', 'n', 'p', 'f', 'a', 'z', 'y', + ].each_with_index.map { |n, i| Prefix.new(n.freeze, 1000, 1000 ** -i, true) }.freeze + + class ParserError < ArgumentError; end + + module_function + + def prefixes(identifier) + case identifier + when :uppercase, :uc, 1024 + PREFIX_UC + when :lowercase, :lc, 1000 + PREFIX_LC + when :fraction, :f, 0.001 + PREFIX_F + when Array + identifier + end + end + + def format(value, format: '%f %U', prefix: 1024, unit: ?b) + prefixes = prefixes(prefix) + first_prefix = prefixes.first or + raise ArgumentError, 'a non-empty array of prefixes is required' + if value.zero? + result = format.sub('%U', unit) + result %= value + else + prefix = prefixes[ + (first_prefix.fraction ? -1 : 1) * Math.log(value.abs) / Math.log(first_prefix.step) + ] + result = format.sub('%U', "#{prefix.name}#{unit}") + result %= (value / prefix.multiplier.to_f) + end + end + + class UnitParser < StringScanner + NUMBER = /([+-]? + (?:0|[1-9]\d*) + (?: + \.\d+(?i:e[+-]?\d+) | + \.\d+ | + (?i:e[+-]?\d+) + )? + )/x + + def initialize(source, unit, prefixes = nil) + super source + if prefixes + @unit_re = unit_re(Tins::Unit.prefixes(prefixes), unit) + @unit_lc_re = @unit_uc_re = nil + else + @unit_lc_re = unit_re(Tins::Unit.prefixes(:lc), unit) + @unit_uc_re = unit_re(Tins::Unit.prefixes(:uc), unit) + @unit_re = nil + end + @number = 1.0 + end + + def unit_re(prefixes, unit) + re = Regexp.new( + "(#{prefixes.reverse.map { |pre| Regexp.quote(pre.name) } * ?|})(#{unit})" + ) + re.singleton_class.class_eval do + define_method(:prefixes) { prefixes } + end + re + end + + private :unit_re + + attr_reader :number + + def scan(re) + re.nil? and return + super + end + + def scan_number + scan(NUMBER) or return + @number *= BigDecimal(self[1]) + end + + def scan_unit + case + when scan(@unit_re) + prefix = @unit_re.prefixes.find { |pre| pre.name == self[1] } or return + @number *= prefix.multiplier + when scan(@unit_lc_re) + prefix = @unit_lc_re.prefixes.find { |pre| pre.name == self[1] } or return + @number *= prefix.multiplier + when scan(@unit_uc_re) + prefix = @unit_uc_re.prefixes.find { |pre| pre.name == self[1] } or return + @number *= prefix.multiplier + end + end + + def scan_char(char) + scan(/#{char}/) or return + end + + def parse + raise NotImplementedError + end + end + + class FormatParser < StringScanner + def initialize(format, unit_parser) + super format + @unit_parser = unit_parser + end + + def reset + super + @unit_parser.reset + end + + def location + @unit_parser.peek(10).inspect + end + + private :location + + def parse + reset + until eos? || @unit_parser.eos? + case + when scan(/%f/) + @unit_parser.scan_number or + raise ParserError, "\"%f\" expected at #{location}" + when scan(/%U/) + @unit_parser.scan_unit or + raise ParserError, "\"%U\" expected at #{location}" + when scan(/%%/) + @unit_parser.scan_char(?%) or + raise ParserError, "#{?%.inspect} expected at #{location}" + else + char = scan(/./) + @unit_parser.scan_char(char) or + raise ParserError, "#{char.inspect} expected at #{location}" + end + end + unless eos? && @unit_parser.eos? + raise ParserError, + "format #{string.inspect} and string "\ + "#{@unit_parser.string.inspect} do not match" + end + @unit_parser.number + end + end + + # Parse the string +string+ if it matches +format+ with the unit +unit+ and + # the prefixes specified by +prefix+. + def parse(string, format: '%f %U', unit: ?b, prefix: nil) + prefixes = prefixes(prefix) + FormatParser.new(format, UnitParser.new(string, unit, prefixes)).parse + end + + def parse?(string, **options) + parse(string, **options) + rescue ParserError + nil + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/version.rb new file mode 100644 index 0000000000..16e1a7177b --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/version.rb @@ -0,0 +1,8 @@ +module Tins + # Tins version + VERSION = '1.25.0' + VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc: + VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc: + VERSION_MINOR = VERSION_ARRAY[1] # :nodoc: + VERSION_BUILD = VERSION_ARRAY[2] # :nodoc: +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/write.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/write.rb new file mode 100644 index 0000000000..8a6eab1755 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/write.rb @@ -0,0 +1,19 @@ +require 'tins/secure_write' + +module Tins + module Write + def self.extended(modul) + modul.extend SecureWrite + if modul.respond_to?(:write) + $DEBUG and warn "Skipping inclusion of Tins::Write#write method, include Tins::Write::SecureWrite#secure_write instead" + else + class << modul; self; end.instance_eval do + alias_method :write, :secure_write + end + end + super + end + end +end + +require 'tins/alias' diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt.rb new file mode 100644 index 0000000000..9d7b263825 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt.rb @@ -0,0 +1,45 @@ +require 'tins' + +module Tins + require 'tins/xt/attempt' + require 'tins/xt/blank' + require 'tins/xt/count_by' + require 'tins/xt/deep_dup' + require 'tins/xt/file_binary' + require 'tins/xt/full' + require 'tins/xt/hash_symbolize_keys_recursive' + require 'tins/xt/hash_union' + require 'tins/xt/irb' + require 'tins/xt/named' + require 'tins/xt/null' + require 'tins/xt/p' + require 'tins/xt/partial_application' + require 'tins/xt/range_plus' + require 'tins/xt/require_maybe' + require 'tins/xt/secure_write' + require 'tins/xt/string' + require 'tins/xt/subhash' + require 'tins/xt/time_dummy' + require 'tins/xt/date_dummy' + require 'tins/xt/date_time_dummy' + require 'tins/xt/uniq_by' + require 'tins/xt/write' + require 'tins/xt/if_predicate' + require 'tins/xt/ask_and_send' + require 'tins/xt/extract_last_argument_options' + require 'tins/xt/deep_const_get' + require 'tins/xt/responding' + require 'tins/xt/proc_compose' + require 'tins/xt/proc_prelude' + require 'tins/xt/sexy_singleton' + require 'tins/xt/method_description' + require 'tins/xt/annotate' + require 'tins/xt/concern' + require 'tins/xt/dslkit' + require 'tins/xt/time_freezer' + require 'tins/xt/case_predicate' + require 'tins/xt/implement' + require 'tins/xt/complete' + require 'tins/xt/expose' + require 'tins/xt/temp_io' +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/annotate.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/annotate.rb new file mode 100644 index 0000000000..82118aab6f --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/annotate.rb @@ -0,0 +1,5 @@ +require 'tins/annotate' + +class Module + include Tins::Annotate +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/ask_and_send.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/ask_and_send.rb new file mode 100644 index 0000000000..84ca6fdf6d --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/ask_and_send.rb @@ -0,0 +1,7 @@ +require 'tins/ask_and_send' + +module Tins + class ::Object + include Tins::AskAndSend + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/attempt.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/attempt.rb new file mode 100644 index 0000000000..40d5e0de10 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/attempt.rb @@ -0,0 +1,7 @@ +require 'tins/attempt' + +module Tins + class ::Object + include Tins::Attempt + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/blank.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/blank.rb new file mode 100644 index 0000000000..d6833928c9 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/blank.rb @@ -0,0 +1,67 @@ +module Tins + module Blank + module Object + def blank? + respond_to?(:empty?) ? empty? : !self + end + + def present? + !blank? + end + end + + module NilClass + def blank? + true + end + end + + module FalseClass + def blank? + true + end + end + + module TrueClass + def blank? + false + end + end + + module Array + def self.included(modul) + modul.module_eval do + alias_method :blank?, :empty? + end + end + end + + module Hash + def self.included(modul) + modul.module_eval do + alias_method :blank?, :empty? + end + end + end + + module String + def blank? + self !~ /\S/ + end + end + + module Numeric + def blank? + false + end + end + end +end + +unless Object.respond_to?(:blank?) + for k in Tins::Blank.constants + Object.const_get(k).class_eval do + include Tins::Blank.const_get(k) + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/case_predicate.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/case_predicate.rb new file mode 100644 index 0000000000..c688acf611 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/case_predicate.rb @@ -0,0 +1,8 @@ +require 'tins/case_predicate' + +module Tins + class ::Object + include Tins::CasePredicate + end +end + diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/complete.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/complete.rb new file mode 100644 index 0000000000..94a0712b67 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/complete.rb @@ -0,0 +1,7 @@ +require 'tins/complete' + +module Tins + class ::Object + include Tins::Complete + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/concern.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/concern.rb new file mode 100644 index 0000000000..e4e5d0269b --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/concern.rb @@ -0,0 +1,20 @@ +require 'tins/concern' + +module Tins + module Concern + module ModuleMixin + def tins_concern_configure(*args) + Thread.current[:tin_concern_args] = args + self + end + + def tins_concern_args + Thread.current[:tin_concern_args] + end + end + end + + class ::Module + include Tins::Concern::ModuleMixin + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/count_by.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/count_by.rb new file mode 100644 index 0000000000..3455bdc2bd --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/count_by.rb @@ -0,0 +1,11 @@ +require 'tins/count_by' + +module Tins + module ::Enumerable + include CountBy + end + + class ::Array + include CountBy + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/date_dummy.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/date_dummy.rb new file mode 100644 index 0000000000..5a3bbaed48 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/date_dummy.rb @@ -0,0 +1,7 @@ +require 'tins/date_dummy' + +module Tins + class ::Date + include DateDummy + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/date_time_dummy.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/date_time_dummy.rb new file mode 100644 index 0000000000..4c290366f8 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/date_time_dummy.rb @@ -0,0 +1,7 @@ +require 'tins/date_time_dummy' + +module Tins + class ::DateTime + include DateTimeDummy + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/deep_const_get.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/deep_const_get.rb new file mode 100644 index 0000000000..e8dbb5674b --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/deep_const_get.rb @@ -0,0 +1,7 @@ +require 'tins/deep_const_get' + +module Tins + class ::Object + include DeepConstGet + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/deep_dup.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/deep_dup.rb new file mode 100644 index 0000000000..f9c0b48a55 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/deep_dup.rb @@ -0,0 +1,7 @@ +require 'tins/deep_dup' + +module Tins + class ::Object + include Tins::DeepDup + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/dslkit.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/dslkit.rb new file mode 100644 index 0000000000..4b56232837 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/dslkit.rb @@ -0,0 +1,22 @@ +require 'tins' + +module Tins + class ::Module + include Tins::Constant + include Tins::DSLAccessor + include Tins::ClassMethod + include Tins::Delegate + include Tins::ParameterizedModule + include Tins::FromModule + end + + class ::Object + include Tins::ThreadLocal + include Tins::ThreadGlobal + include Tins::Interpreter + include Tins::Deflect + include Tins::ThreadLocal + include Tins::Eigenclass + include Tins::BlockSelf + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/expose.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/expose.rb new file mode 100644 index 0000000000..10c80c5461 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/expose.rb @@ -0,0 +1,5 @@ +require 'tins/expose' + +class ::Object + include Tins::Expose +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/extract_last_argument_options.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/extract_last_argument_options.rb new file mode 100644 index 0000000000..794a7d7321 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/extract_last_argument_options.rb @@ -0,0 +1,7 @@ +require 'tins/extract_last_argument_options' + +module Tins + class ::Array + include ExtractLastArgumentOptions + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/file_binary.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/file_binary.rb new file mode 100644 index 0000000000..c2f02a4500 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/file_binary.rb @@ -0,0 +1,7 @@ +require 'tins/file_binary' + +module Tins + class ::File + include FileBinary + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/full.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/full.rb new file mode 100644 index 0000000000..1c9048f490 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/full.rb @@ -0,0 +1,39 @@ +require 'tins/xt/blank' + +module Tins + module Full + # Returns the object if it isn't blank (as in Object#blank?), otherwise it + # returns nil. If a block was given as an argument and the object isn't + # blank, the block is executed with the object as its first argument. If an + # argument +dispatch+ was given and the object wasn't blank the method + # given by dispatch is called on the object. This is the same as + # foo.full?(&:bar) in the previous block form. + def full?(dispatch = nil, *args) + if blank? + obj = nil + #elsif Module === dispatch # TODO + # dispatch.found?(self) + elsif dispatch + obj = __send__(dispatch, *args) + obj = nil if obj.blank? + else + obj = self + end + if block_given? and obj + yield obj + else + obj + end + end + + def all_full? + if respond_to?(:all?) && all?(&:full?) + block_given? ? yield(self) : self + end + end + end + + class ::Object + include Full + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/hash_symbolize_keys_recursive.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/hash_symbolize_keys_recursive.rb new file mode 100644 index 0000000000..162b9d1e32 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/hash_symbolize_keys_recursive.rb @@ -0,0 +1,7 @@ +require 'tins/hash_symbolize_keys_recursive' + +module Tins + class ::Hash + include HashSymbolizeKeysRecursive + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/hash_union.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/hash_union.rb new file mode 100644 index 0000000000..22ad94194a --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/hash_union.rb @@ -0,0 +1,11 @@ +require 'tins/hash_union' + +module Tins + class ::Hash + if method_defined?(:|) + warn "#{self}#| already defined, didn't include at #{__FILE__}:#{__LINE__}" + else + include HashUnion + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/if_predicate.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/if_predicate.rb new file mode 100644 index 0000000000..1c0ee6e10f --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/if_predicate.rb @@ -0,0 +1,7 @@ +require 'tins/if_predicate' + +module Tins + class ::Object + include Tins::IfPredicate + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/implement.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/implement.rb new file mode 100644 index 0000000000..3f4b7963ee --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/implement.rb @@ -0,0 +1,5 @@ +require 'tins/implement' + +class Module + include Tins::Implement +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/irb.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/irb.rb new file mode 100644 index 0000000000..920f61b615 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/irb.rb @@ -0,0 +1,23 @@ +require 'irb' + +module Tins + IRB = ::IRB + + module ::IRB + def self.examine(binding = TOPLEVEL_BINDING) + setup nil + workspace = WorkSpace.new binding + irb = Irb.new workspace + @CONF[:MAIN_CONTEXT] = irb.context + catch(:IRB_EXIT) { irb.eval_input } + rescue Interrupt + exit + end + end + + class ::Object + def examine(binding = TOPLEVEL_BINDING) + IRB.examine(binding) + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/method_description.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/method_description.rb new file mode 100644 index 0000000000..b5ca8cc095 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/method_description.rb @@ -0,0 +1,23 @@ +require 'tins/method_description' + +module Tins + class ::UnboundMethod + include MethodDescription + + alias to_s description + + def inspect + "#<#{self.class}: #{description}>" + end + end + + class ::Method + include MethodDescription + + alias to_s description + + def inspect + "#<#{self.class}: #{description}>" + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/named.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/named.rb new file mode 100644 index 0000000000..7c15116e70 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/named.rb @@ -0,0 +1,23 @@ +require 'tins/xt/string_version' + +class Object + def named(name, method, *args, &named_block) + extend Module.new { + define_method(name) do |*rest, &block| + block = named_block if named_block + __send__(method, *(args + rest), &block) + end + } + end +end + +class Module + def named(name, method, *args, &named_block) + include Module.new { + define_method(name) do |*rest, &block| + block = named_block if named_block + __send__(method, *(args + rest), &block) + end + } + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/null.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/null.rb new file mode 100644 index 0000000000..37455d3a2c --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/null.rb @@ -0,0 +1,9 @@ +require 'tins/null' + +module Tins + ::NULL = Tins::NULL + + class ::Object + include Tins::Null::Kernel + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/p.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/p.rb new file mode 100644 index 0000000000..775f2bb3ee --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/p.rb @@ -0,0 +1,7 @@ +require 'tins/p' + +module Tins + class ::Object + include Tins::P + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/partial_application.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/partial_application.rb new file mode 100644 index 0000000000..9c05b840b5 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/partial_application.rb @@ -0,0 +1,11 @@ +require 'tins/partial_application' + +module Tins + class ::Proc + include PartialApplication + end + + class ::Method + include PartialApplication + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/proc_compose.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/proc_compose.rb new file mode 100644 index 0000000000..2bde627e71 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/proc_compose.rb @@ -0,0 +1,7 @@ +require 'tins/proc_compose' + +module Tins + class ::Proc + include Tins::ProcCompose + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/proc_prelude.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/proc_prelude.rb new file mode 100644 index 0000000000..ed64d2187f --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/proc_prelude.rb @@ -0,0 +1,7 @@ +require 'tins/proc_prelude' + +module Tins + class ::Proc + extend Tins::ProcPrelude + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/range_plus.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/range_plus.rb new file mode 100644 index 0000000000..fc6cc4fdee --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/range_plus.rb @@ -0,0 +1,12 @@ +require 'tins/range_plus' + +module Tins + class ::Range + if method_defined?(:+) + warn "#{self}#+ already defined, didn't include at #{__FILE__}:#{__LINE__}" + else + include RangePlus + end + end +end + diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/require_maybe.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/require_maybe.rb new file mode 100644 index 0000000000..ae6d9e15ff --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/require_maybe.rb @@ -0,0 +1,7 @@ +require 'tins/require_maybe' + +module Tins + class ::Object + include Tins::RequireMaybe + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/responding.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/responding.rb new file mode 100644 index 0000000000..ec626b3653 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/responding.rb @@ -0,0 +1,7 @@ +require 'tins/responding' + +module Tins + class ::Object + include Tins::Responding + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/secure_write.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/secure_write.rb new file mode 100644 index 0000000000..86aeb82527 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/secure_write.rb @@ -0,0 +1,11 @@ +require 'tins/secure_write' + +module Tins + #class ::Object + # include Tins::SecureWrite + #end + + class ::IO + extend Tins::SecureWrite + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/sexy_singleton.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/sexy_singleton.rb new file mode 100644 index 0000000000..2182c99f34 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/sexy_singleton.rb @@ -0,0 +1,3 @@ +module Tins + ::SexySingleton = Tins::SexySingleton +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string.rb new file mode 100644 index 0000000000..9a4661ac13 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string.rb @@ -0,0 +1,6 @@ +module Tins + require 'tins/xt/string_camelize' + require 'tins/xt/string_underscore' + require 'tins/xt/string_version' + require 'tins/xt/string_byte_order_mark' +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_byte_order_mark.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_byte_order_mark.rb new file mode 100644 index 0000000000..06694bee66 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_byte_order_mark.rb @@ -0,0 +1,7 @@ +module Tins + require 'tins/string_byte_order_mark' + class ::String + include StringByteOrderMark + end +end + diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_camelize.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_camelize.rb new file mode 100644 index 0000000000..0b19427fa3 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_camelize.rb @@ -0,0 +1,6 @@ +module Tins + require 'tins/string_camelize' + class ::String + include StringCamelize + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_underscore.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_underscore.rb new file mode 100644 index 0000000000..48d9aa03c8 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_underscore.rb @@ -0,0 +1,6 @@ +module Tins + require 'tins/string_underscore' + class ::String + include StringUnderscore + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_version.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_version.rb new file mode 100644 index 0000000000..fc46c81057 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/string_version.rb @@ -0,0 +1,7 @@ +module Tins + require 'tins/string_version' + + class ::String + include StringVersion + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/subhash.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/subhash.rb new file mode 100644 index 0000000000..4d1485458d --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/subhash.rb @@ -0,0 +1,11 @@ +require 'tins/subhash' + +module Tins + class ::Hash + include Tins::Subhash + + def subhash!(*patterns) + replace subhash(*patterns) + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/temp_io.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/temp_io.rb new file mode 100644 index 0000000000..a0ba260f94 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/temp_io.rb @@ -0,0 +1,5 @@ +require 'tins/temp_io' + +class ::Object + include Tins::TempIO +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/time_dummy.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/time_dummy.rb new file mode 100644 index 0000000000..8b1a4e52dd --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/time_dummy.rb @@ -0,0 +1,7 @@ +require 'tins/time_dummy' + +module Tins + class ::Time + include TimeDummy + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/time_freezer.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/time_freezer.rb new file mode 100644 index 0000000000..768dedde12 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/time_freezer.rb @@ -0,0 +1,15 @@ +require 'tins/xt/time_dummy' +require 'tins/xt/date_time_dummy' +require 'tins/xt/date_dummy' + +module Tins::TimeFreezer + def self.freeze(time) + Time.dummy(time) do + DateTime.dummy(time) do + Date.dummy(time) do + yield + end + end + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/to.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/to.rb new file mode 100644 index 0000000000..b1c8c21475 --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/to.rb @@ -0,0 +1,5 @@ +module Tins + class ::Object + include ::Tins::To + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/uniq_by.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/uniq_by.rb new file mode 100644 index 0000000000..87eca8b10d --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/uniq_by.rb @@ -0,0 +1,15 @@ +require 'tins/uniq_by' + +module Tins + module ::Enumerable + include UniqBy + end + + class ::Array + include UniqBy + + def uniq_by!(&b) + replace uniq_by(&b) + end + end +end diff --git a/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/write.rb b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/write.rb new file mode 100644 index 0000000000..7c8071709f --- /dev/null +++ b/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/tins-1.25.0/lib/tins/xt/write.rb @@ -0,0 +1,11 @@ +require 'tins/write' + +module Tins + #class ::Object + # include Tins::Write + #end + + class ::IO + extend Tins::Write + end +end