summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/pathutil-0.16.2/lib/pathutil/helpers.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/pathutil-0.16.2/lib/pathutil/helpers.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/pathutil-0.16.2/lib/pathutil/helpers.rb129
1 files changed, 129 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/pathutil-0.16.2/lib/pathutil/helpers.rb b/vendor/bundle/ruby/3.4.0/gems/pathutil-0.16.2/lib/pathutil/helpers.rb
new file mode 100644
index 0000000..7398008
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/pathutil-0.16.2/lib/pathutil/helpers.rb
@@ -0,0 +1,129 @@
+# Frozen-string-literal: true
+# Copyright: 2015 - 2017 Jordon Bedwell - MIT License
+# Encoding: utf-8
+
+class Pathutil
+ module Helpers
+ extend self
+
+ # --
+
+ def allowed
+ return @allowed ||= begin
+ {
+ :yaml => {
+ :classes => [],
+ :symbols => []
+ }
+ }
+ end
+ end
+
+ # --
+ # Wraps around YAML and SafeYAML to provide alternatives to Rubies.
+ # @note We default aliases to yes so we can detect if you explicit true.
+ # @return Hash
+ # --
+ def load_yaml(data, safe: true, whitelist_classes: allowed[:yaml][:classes], \
+ whitelist_symbols: allowed[:yaml][:symbols], aliases: :yes)
+
+ require "yaml"
+ unless safe
+ return YAML.load(
+ data
+ )
+ end
+
+ if !YAML.respond_to?(:safe_load)
+ setup_safe_yaml whitelist_classes, aliases
+ SafeYAML.load(
+ data
+ )
+
+ else
+ YAML.safe_load(
+ data,
+ whitelist_classes,
+ whitelist_symbols,
+ aliases
+ )
+ end
+ end
+
+ # --
+ # Make a temporary name suitable for temporary files and directories.
+ # @return String
+ # --
+ def make_tmpname(prefix = "", suffix = nil, root = nil)
+ prefix = tmpname_prefix(prefix)
+ suffix = tmpname_suffix(suffix)
+
+ root ||= Dir::Tmpname.tmpdir
+ File.join(root, __make_tmpname(
+ prefix, suffix
+ ))
+ end
+
+ # --
+ private
+ def __make_tmpname((prefix, suffix), number)
+ prefix &&= String.try_convert(prefix) || tmpname_agerr(:prefix, prefix)
+ suffix &&= String.try_convert(suffix) || tmpname_agerr(:suffix, suffix)
+
+ time = Time.now.strftime("%Y%m%d")
+ path = "#{prefix}#{time}-#{$$}-#{rand(0x100000000).to_s(36)}".dup
+ path << "-#{number}" if number
+ path << suffix if suffix
+ path
+ end
+
+ private
+ def tmpname_agerr(type, val)
+ raise ArgumentError, "unexpected #{type}: #{val.inspect}"
+ end
+
+ # --
+ private
+ def tmpname_suffix(suffix)
+ suffix = suffix.join("-") if suffix.is_a?(Array)
+ suffix = suffix.gsub(/\A\-/, "") unless !suffix || suffix.empty?
+ suffix
+ end
+
+ # --
+ # Cleanup the temp name prefix, joining if necessary.
+ # rubocop:disable Style/ParallelAssignment
+ # --
+ private
+ def tmpname_prefix(prefix)
+ ext, prefix = prefix, "" if !prefix.is_a?(Array) && prefix.start_with?(".")
+ ext = prefix.pop if prefix.is_a?(Array) && prefix[-1].start_with?(".")
+ prefix = prefix.join("-") if prefix.is_a?(Array)
+
+ unless prefix.empty?
+ prefix = prefix.gsub(/\-\Z/, "") \
+ + "-"
+ end
+
+ return [
+ prefix, ext || ""
+ ]
+ end
+
+ # --
+ # Wrap around, cleanup, deprecate and use SafeYAML.
+ # rubocop:enable Style/ParallelAssignment
+ # --
+ private
+ def setup_safe_yaml(whitelist_classes, aliases)
+ warn "WARN: SafeYAML does not support disabling of aliases." if aliases && aliases != :yes
+ warn "WARN: SafeYAML will be removed when Ruby 2.0 goes EOL."
+ require "safe_yaml/load"
+
+ SafeYAML.restore_defaults!
+ whitelist_classes.map(&SafeYAML.method(
+ :whitelist_class!
+ ))
+ end
+ end
+end