diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2017-03-21 11:54:41 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-21 11:54:41 -0700 |
commit | 1ad9b6c8c262d232d2a666f7348ed34c04687cc4 (patch) | |
tree | f3d0685b0e1c038c73faeddb7c51d600f5e6f2db | |
parent | b39d1b2937d7f6b2b974531f99b60e7b5d026fc7 (diff) | |
parent | 9b24a408c89bc69a9967c8a9c590d3efb010dfb5 (diff) | |
download | chef-1ad9b6c8c262d232d2a666f7348ed34c04687cc4.tar.gz |
Merge pull request #5930 from chef/lcg/remove-dsl-method-missing
Chef-13: remove method_missing from the DSL
-rw-r--r-- | RELEASE_NOTES.md | 5 | ||||
-rw-r--r-- | lib/chef/dsl/method_missing.rb | 75 | ||||
-rw-r--r-- | lib/chef/dsl/recipe.rb | 5 | ||||
-rw-r--r-- | lib/chef/recipe.rb | 10 | ||||
-rw-r--r-- | spec/integration/recipes/recipe_dsl_spec.rb | 29 | ||||
-rw-r--r-- | spec/unit/recipe_spec.rb | 4 |
6 files changed, 17 insertions, 111 deletions
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 6c35ae9354..bfae0e52e5 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -117,3 +117,8 @@ This option has been unimplemented on the server side for years, so any use of i ### Remove Chef::ShellOut This was deprecated and replaced a long time ago with mixlib-shellout and the shell_out mixin. + +### Remove `method_missing` from the Recipe DSL + +The core of chef hasn't used this to implement the Recipe DSL since 12.5.1 and its unlikely that any external code depended upon it. + diff --git a/lib/chef/dsl/method_missing.rb b/lib/chef/dsl/method_missing.rb deleted file mode 100644 index 2917a54ee8..0000000000 --- a/lib/chef/dsl/method_missing.rb +++ /dev/null @@ -1,75 +0,0 @@ -#-- -# Copyright:: Copyright 2008-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. -# - -class Chef - module DSL - # @deprecated scheduled to die in a Chef 13 fire - module MethodMissing - def describe_self_for_error - if respond_to?(:name) - %Q{`#{self.class} "#{name}"'} - elsif respond_to?(:recipe_name) - %Q{`#{self.class} "#{recipe_name}"'} - else - to_s - end - end - - # DEPRECATED: - # method_missing must live for backcompat purposes until Chef 13. - def method_missing(method_symbol, *args, &block) - # - # If there is already DSL for this, someone must have called - # method_missing manually. Not a fan. Not. A. Fan. - # - if respond_to?(method_symbol) - Chef.deprecated(:internal_api, "Calling method_missing(#{method_symbol.inspect}) directly is deprecated in Chef 12 and will be removed in Chef 13. Use public_send() or send() instead.") - return send(method_symbol, *args, &block) - end - - # - # If a definition exists, then Chef::DSL::Definitions.add_definition was - # never called. DEPRECATED. - # - if run_context.definitions.has_key?(method_symbol.to_sym) - Chef.deprecated(:internal_api, "Definition #{method_symbol} (#{run_context.definitions[method_symbol.to_sym]}) was added to the run_context without calling Chef::DSL::Definitions.add_definition(#{method_symbol.to_sym.inspect}). This will become required in Chef 13.") - Chef::DSL::Definitions.add_definition(method_symbol) - return send(method_symbol, *args, &block) - end - - # - # See if the resource exists anyway. If the user had set - # Chef::Resource::Blah = <resource>, a deprecation warning will be - # emitted and the DSL method 'blah' will be added to the DSL. - # - resource_class = Chef::ResourceResolver.resolve(method_symbol, node: run_context ? run_context.node : nil) - if resource_class - Chef::DSL::Resources.add_resource_dsl(method_symbol) - return send(method_symbol, *args, &block) - end - - begin - super - rescue NoMethodError - raise NoMethodError, "No resource or method named `#{method_symbol}' for #{describe_self_for_error}" - rescue NameError - raise NameError, "No resource, method, or local variable named `#{method_symbol}' for #{describe_self_for_error}" - end - end - end - end -end diff --git a/lib/chef/dsl/recipe.rb b/lib/chef/dsl/recipe.rb index e2bd070179..dedf291857 100644 --- a/lib/chef/dsl/recipe.rb +++ b/lib/chef/dsl/recipe.rb @@ -1,7 +1,7 @@ #-- # Author:: Adam Jacob (<adam@chef.io>) # Author:: Christopher Walters (<cw@chef.io>) -# Copyright:: Copyright 2008-2016 Chef Software, Inc. +# Copyright:: Copyright 2008-2017, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,7 +27,6 @@ require "chef/dsl/reboot_pending" require "chef/dsl/audit" require "chef/dsl/powershell" require "chef/dsl/core" -require "chef/dsl/method_missing" require "chef/mixin/lazy_module_include" class Chef @@ -60,8 +59,6 @@ class Chef include Chef::DSL::Powershell include Chef::DSL::Resources include Chef::DSL::Definitions - # method_missing will disappear in Chef 13 - include Chef::DSL::MethodMissing extend Chef::Mixin::LazyModuleInclude def resource_class_for(snake_case_name) diff --git a/lib/chef/recipe.rb b/lib/chef/recipe.rb index 77d82f83ab..967703b629 100644 --- a/lib/chef/recipe.rb +++ b/lib/chef/recipe.rb @@ -1,7 +1,7 @@ #-- # Author:: Adam Jacob (<adam@chef.io>) # Author:: Christopher Walters (<cw@chef.io>) -# Copyright:: Copyright 2008-2016, Chef Software Inc. +# Copyright:: Copyright 2008-2017, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -104,5 +104,13 @@ class Chef run_context.node.tags.delete(tag) end end + + def to_s + "cookbook: #{cookbook_name ? cookbook_name : "(none)"}, recipe: #{recipe_name ? recipe_name : "(none)"} " + end + + def inspect + to_s + end end end diff --git a/spec/integration/recipes/recipe_dsl_spec.rb b/spec/integration/recipes/recipe_dsl_spec.rb index 27176f65d8..bc99dddaf3 100644 --- a/spec/integration/recipes/recipe_dsl_spec.rb +++ b/spec/integration/recipes/recipe_dsl_spec.rb @@ -1174,35 +1174,6 @@ describe "Recipe DSL methods" do end end - context "with provides? returning true to blarghle_blarghle_little_star and not resource_name" do - before do - temp_blarghle_blarghle_little_star = blarghle_blarghle_little_star - resource_class.define_singleton_method(:provides?) do |node, resource_name| - @called_provides = true - resource_name == temp_blarghle_blarghle_little_star - end - end - - it "my_resource does not return the resource" do - dsl_name = my_resource - expect_converge do - instance_eval("#{dsl_name} 'foo'") - end.to raise_error(Chef::Exceptions::NoSuchResourceType) - expect(resource_class.called_provides).to be_truthy - end - - it "blarghle_blarghle_little_star 'foo' returns the resource and emits a warning" do - Chef::Config[:treat_deprecation_warnings_as_errors] = false - dsl_name = blarghle_blarghle_little_star - recipe = converge do - instance_eval("#{dsl_name} 'foo'") - end - expect(recipe.logged_warnings).to include "WARN: #{resource_class}.provides? returned true when asked if it provides DSL #{dsl_name}, but provides :#{dsl_name} was never called!" - expect(BaseThingy.created_resource).to eq resource_class - expect(resource_class.called_provides).to be_truthy - end - end - context "and a provider" do let(:provider_class) do Class.new(BaseThingy::Provider) do diff --git a/spec/unit/recipe_spec.rb b/spec/unit/recipe_spec.rb index 5ee33b14dd..cb500da34a 100644 --- a/spec/unit/recipe_spec.rb +++ b/spec/unit/recipe_spec.rb @@ -307,7 +307,7 @@ describe Chef::Recipe do it "gives a sane error message when using method_missing" do expect do recipe.no_such_resource("foo") - end.to raise_error(NoMethodError, %q{No resource or method named `no_such_resource' for `Chef::Recipe "test"'}) + end.to raise_error(NoMethodError, /undefined method `no_such_resource' for cookbook: hjk, recipe: test :Chef::Recipe/) end it "gives a sane error message when using method_missing 'bare'" do @@ -316,7 +316,7 @@ describe Chef::Recipe do # Giving an argument will change this from NameError to NoMethodError no_such_resource end - end.to raise_error(NameError, %q{No resource, method, or local variable named `no_such_resource' for `Chef::Recipe "test"'}) + end.to raise_error(NameError, /undefined local variable or method `no_such_resource' for cookbook: hjk, recipe: test :Chef::Recipe/) end it "gives a sane error message when using build_resource" do |