diff options
Diffstat (limited to 'lib/chef/deprecated.rb')
-rw-r--r-- | lib/chef/deprecated.rb | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/lib/chef/deprecated.rb b/lib/chef/deprecated.rb new file mode 100644 index 0000000000..de5090a48b --- /dev/null +++ b/lib/chef/deprecated.rb @@ -0,0 +1,190 @@ +#-- +# Copyright:: Copyright 2016 Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require "chef/mixin/convert_to_class_name" + +# Structured deprecations have a unique URL associated with them, which must exist before the deprecation is merged. +class Chef + class Deprecated + + class << self + include Chef::Mixin::ConvertToClassName + + def create(type, message = nil, location = nil) + Chef::Deprecated.const_get(convert_to_class_name(type.to_s)).send(:new, message, location) + end + end + + class Base + BASE_URL = "https://docs.chef.io/deprecations_" + + attr_accessor :message, :location + + def initialize(msg = nil, location = nil) + @message = msg if msg + @location = location if location + end + + def link + "Please see #{url} for further details and information on how to correct this problem." + end + + def url + "#{BASE_URL}#{target}" + end + + # We know that the only time this gets called is by Chef::Log.deprecation, + # so special case + def <<(location) + @location = location + end + + def inspect + "#{message} (CHEF-#{id})#{location}.\n#{link}" + end + + def id + raise NotImplementedError, "subclasses of Chef::Deprecated::Base should define #id with a unique number" + end + + def target + raise NotImplementedError, "subclasses of Chef::Deprecated::Base should define #target" + end + end + + class JsonAutoInflate < Base + def id + 1 + end + + def target + "json_auto_inflate.html" + end + end + + class ExitCode < Base + def id + 2 + end + + def target + "exit_code.html" + end + end + + class ChefGemCompileTime < Base + def id + 3 + end + + def target + "chef_gem_compile_time.html" + end + end + + class Attributes < Base + def id + 4 + end + + def target + "attributes.html" + end + end + + class CustomResource < Base + def id + 5 + end + + def target + "custom_resource_cleanups.html" + end + end + + class EasyInstall < Base + def id + 6 + end + + def target + "easy_install.html" + end + end + + class VerifyFile < Base + def id + 7 + end + + def target + "verify_file.html" + end + end + + class SupportsProperty < Base + def id + 8 + end + + def target + "supports_property.html" + end + end + + class ChefRest < Base + def id + 9 + end + + def target + "chef_rest.html" + end + end + + class ResourceCloning < Base + def id + 3694 + end + + def target + "resource_cloning.html" + end + end + + class InternalApi < Base + def id + 0 + end + + def target + "internal_api.html" + end + end + + class Generic < Base + def url + "https://docs.chef.io/chef_deprecations_client.html" + end + + def inspect + "#{message}\nThis is a generic error message and should be updated to have a proper deprecation class. #{location}\nPlease see #{url} for an overview of Chef deprecations." + end + end + + end +end |