lib/pathutil/helpers.rb
class Pathutil module Helpers extend self # ------------------------------------------------------------------------ # Wraps around YAML and SafeYAML to provide alternatives to Rubies. # @note We default aliases to yes so we can detect if you explicit true. # ------------------------------------------------------------------------ def load_yaml(data, safe: true, whitelist_classes: [], whitelist_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 # ------------------------------------------------------------------------ def make_tmpname(prefix = "", suffix = nil, root = nil) prefix = prefix.join("-") if prefix.is_a?(Array) suffix = suffix.join("-") if suffix.is_a?(Array) suffix = suffix.gsub(/\A\-/, "") unless !suffix || suffix.empty? prefix = prefix.gsub(/\-\Z/, "") + "-" unless prefix.empty? root ||= Dir::Tmpname.tmpdir File.join(root, Dir::Tmpname.make_tmpname( prefix, suffix )) end # ------------------------------------------------------------------------ # rubocop:disable Metrics/LineLength # ------------------------------------------------------------------------ private def setup_safe_yaml(whitelist_classes, aliases) warn "#{self.class.name}:WARN: SafeYAML does not support disabling of aliases." if aliases && aliases != :yes warn "#{self.class.name}: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