vagrant/lib/vagrant/util/command_deprecation.rb

57 lines
1.5 KiB
Ruby

module Vagrant
module Util
# Automatically add deprecation notices to commands
module CommandDeprecation
# @return [String] generated name of command
def deprecation_command_name
name_parts = self.class.name.split("::")
[
name_parts[1].sub('Command', ''),
name_parts[3]
].compact.map(&:downcase).join(" ")
end
def self.included(klass)
klass.class_eval do
class << self
if method_defined?(:synopsis)
alias_method :non_deprecated_synopsis, :synopsis
def synopsis
if !non_deprecated_synopsis.to_s.empty?
"#{non_deprecated_synopsis} [DEPRECATED]"
else
non_deprecated_synopsis
end
end
end
end
alias_method :non_deprecated_execute, :execute
def execute(*args, &block)
@env[:ui].warn(I18n.t("vagrant.commands.deprecated",
name: deprecation_command_name
) + "\n")
non_deprecated_execute(*args, &block)
end
end
end
# Mark command deprecation complete and fully disable
# the command's functionality
module Complete
def self.included(klass)
klass.include(CommandDeprecation)
klass.class_eval do
def execute(*_)
raise Vagrant::Errors::CommandDeprecated,
name: deprecation_command_name
end
end
end
end
end
end
end