From 9dc01eafb44618cb71169d8c891d3ce2792aed1f Mon Sep 17 00:00:00 2001 From: Noah Kantrowitz Date: Mon, 3 Apr 2017 17:23:10 -0500 Subject: Try removing the const-ificiation of DSL-based resources/providers. Signed-off-by: Noah Kantrowitz --- lib/chef/provider.rb | 27 ----------- lib/chef/provider/lwrp_base.rb | 2 - lib/chef/resource.rb | 22 --------- lib/chef/resource/lwrp_base.rb | 2 - spec/unit/lwrp_spec.rb | 107 ++++++----------------------------------- 5 files changed, 15 insertions(+), 145 deletions(-) diff --git a/lib/chef/provider.rb b/lib/chef/provider.rb index 8334eab0a6..ce2f431fec 100644 --- a/lib/chef/provider.rb +++ b/lib/chef/provider.rb @@ -432,33 +432,6 @@ class Chef end end - module DeprecatedLWRPClass - def const_missing(class_name) - if Chef::Provider.deprecated_constants[class_name.to_sym] - Chef.deprecated(:custom_resource, "Using an LWRP provider by its name (#{class_name}) directly is no longer supported in Chef 12 and will be removed. Use Chef::ProviderResolver.new(node, resource, action) instead.") - Chef::Provider.deprecated_constants[class_name.to_sym] - else - raise NameError, "uninitialized constant Chef::Provider::#{class_name}" - end - end - - # @api private - def register_deprecated_lwrp_class(provider_class, class_name) - # Register Chef::Provider::MyProvider with deprecation warnings if you - # try to access it - if Chef::Provider.const_defined?(class_name, false) - Chef::Log.warn "Chef::Provider::#{class_name} already exists! Cannot create deprecation class for #{provider_class}" - else - Chef::Provider.deprecated_constants[class_name.to_sym] = provider_class - end - end - - def deprecated_constants - raise "Deprecated constants should be called only on Chef::Provider" unless self == Chef::Provider - @deprecated_constants ||= {} - end - end - extend DeprecatedLWRPClass end end diff --git a/lib/chef/provider/lwrp_base.rb b/lib/chef/provider/lwrp_base.rb index cbf25f1e4f..1340b55ae4 100644 --- a/lib/chef/provider/lwrp_base.rb +++ b/lib/chef/provider/lwrp_base.rb @@ -75,8 +75,6 @@ class Chef LWRPBase.loaded_lwrps[filename] = true - Chef::Provider.register_deprecated_lwrp_class(provider_class, convert_to_class_name(resource_name)) - provider_class end diff --git a/lib/chef/resource.rb b/lib/chef/resource.rb index bd966f9c79..ca6603c06a 100644 --- a/lib/chef/resource.rb +++ b/lib/chef/resource.rb @@ -1488,27 +1488,6 @@ class Chef self.class.resource_for_node(name, node).new("name", run_context).provider_for_action(action).class end - module DeprecatedLWRPClass - - # @api private - def register_deprecated_lwrp_class(resource_class, class_name) - if Chef::Resource.const_defined?(class_name, false) - Chef::Log.warn "#{class_name} already exists! Deprecation class overwrites #{resource_class}" - Chef::Resource.send(:remove_const, class_name) - end - - if !Chef::Config[:treat_deprecation_warnings_as_errors] - Chef::Resource.const_set(class_name, resource_class) - Chef::Resource.deprecated_constants[class_name.to_sym] = resource_class - end - end - - def deprecated_constants - raise "Deprecated constants should be called only on Chef::Resource" unless self == Chef::Resource - @deprecated_constants ||= {} - end - end - def self.remove_canonical_dsl if @resource_name remaining = Chef.resource_handler_map.delete_canonical(@resource_name, self) @@ -1517,7 +1496,6 @@ class Chef end end end - extend DeprecatedLWRPClass end end diff --git a/lib/chef/resource/lwrp_base.rb b/lib/chef/resource/lwrp_base.rb index 7dfe147341..b12ac98673 100644 --- a/lib/chef/resource/lwrp_base.rb +++ b/lib/chef/resource/lwrp_base.rb @@ -69,8 +69,6 @@ class Chef LWRPBase.loaded_lwrps[filename] = true - # Create the deprecated Chef::Resource::LwrpFoo class - Chef::Resource.register_deprecated_lwrp_class(resource_class, convert_to_class_name(resource_name)) resource_class end diff --git a/spec/unit/lwrp_spec.rb b/spec/unit/lwrp_spec.rb index 28773a3c30..353376aa77 100644 --- a/spec/unit/lwrp_spec.rb +++ b/spec/unit/lwrp_spec.rb @@ -417,9 +417,8 @@ describe "LWRP" do Chef::Config[:treat_deprecation_warnings_as_errors] = @old_treat_deprecation_warnings_as_errors end - it "should load the provider into a properly-named class" do - expect(Chef::Provider.const_get("LwrpBuckPasser")).to be_kind_of(Class) - expect(Chef::Provider::LwrpBuckPasser <= Chef::Provider::LWRPBase).to be_truthy + it "should not load the provider into a const" do + expect(defined?(Chef::Provider::LwrpBuckPasser)).to be_nil end it "should create a method for each action" do @@ -571,55 +570,28 @@ describe "LWRP" do end context "resource class created" do + let(:test_lwrp_class) { @test_lwrp_class } before(:context) do @tmpdir = Dir.mktmpdir("lwrp_test") resource_path = File.join(@tmpdir, "once.rb") IO.write(resource_path, "default_action :create") - - @old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors] - Chef::Config[:treat_deprecation_warnings_as_errors] = false - Chef::Resource::LWRPBase.build_from_file("lwrp", resource_path, nil) + @test_lwrp_class = Chef::Resource::LWRPBase.build_from_file("lwrp", resource_path, nil) end after(:context) do FileUtils.remove_entry @tmpdir - Chef::Config[:treat_deprecation_warnings_as_errors] = @old_treat_deprecation_warnings_as_errors end - it "should load the resource into a properly-named class" do - expect(Chef::Resource::LwrpOnce).to be_kind_of(Class) - expect(Chef::Resource::LwrpOnce <= Chef::Resource::LWRPBase).to be_truthy + it "should not load the resource into a const" do + expect(defined?(Chef::Resource::LwrpOnce)).to be_nil end - it "get_lwrp(:lwrp_once).new is a Chef::Resource::LwrpOnce" do + it "get_lwrp(:lwrp_once).new is an instance of the LWRP class" do lwrp = get_lwrp(:lwrp_once).new("hi") - expect(lwrp.kind_of?(Chef::Resource::LwrpOnce)).to be_truthy - expect(lwrp.is_a?(Chef::Resource::LwrpOnce)).to be_truthy - expect(get_lwrp(:lwrp_once) === lwrp).to be_truthy - expect(Chef::Resource::LwrpOnce === lwrp).to be_truthy - end - - it "Chef::Resource::LwrpOnce.new is a get_lwrp(:lwrp_once)" do - lwrp = Chef::Resource::LwrpOnce.new("hi") - expect(lwrp.kind_of?(get_lwrp(:lwrp_once))).to be_truthy - expect(lwrp.is_a?(get_lwrp(:lwrp_once))).to be_truthy + expect(lwrp.kind_of?(test_lwrp_class)).to be_truthy + expect(lwrp.is_a?(test_lwrp_class)).to be_truthy expect(get_lwrp(:lwrp_once) === lwrp).to be_truthy - expect(Chef::Resource::LwrpOnce === lwrp).to be_truthy - end - - it "works even if LwrpOnce exists in the top level" do - module ::LwrpOnce - end - expect(Chef::Resource::LwrpOnce).not_to eq(::LwrpOnce) - end - - it "allows monkey patching of the lwrp through Chef::Resource" do - monkey = Module.new do - def issue_3607 - end - end - Chef::Resource::LwrpOnce.send(:include, monkey) - expect { get_lwrp(:lwrp_once).new("blah").issue_3607 }.not_to raise_error + expect(test_lwrp_class === lwrp).to be_truthy end context "with a subclass of get_lwrp(:lwrp_once)" do @@ -634,12 +606,12 @@ describe "LWRP" do expect(subclass === lwrp).to be_truthy expect(lwrp.class === subclass) end - it "subclass.new is a Chef::Resource::LwrpOnce" do + it "subclass.new is an instance of the LWRP class" do lwrp = subclass.new("hi") - expect(lwrp.kind_of?(Chef::Resource::LwrpOnce)).to be_truthy - expect(lwrp.is_a?(Chef::Resource::LwrpOnce)).to be_truthy - expect(Chef::Resource::LwrpOnce === lwrp).to be_truthy - expect(lwrp.class === Chef::Resource::LwrpOnce) + expect(lwrp.kind_of?(test_lwrp_class)).to be_truthy + expect(lwrp.is_a?(test_lwrp_class)).to be_truthy + expect(test_lwrp_class === lwrp).to be_truthy + expect(lwrp.class === test_lwrp_class) end it "subclass.new is a get_lwrp(:lwrp_once)" do lwrp = subclass.new("hi") @@ -648,55 +620,6 @@ describe "LWRP" do expect(get_lwrp(:lwrp_once) === lwrp).to be_truthy expect(lwrp.class === get_lwrp(:lwrp_once)) end - it "Chef::Resource::LwrpOnce.new is *not* a subclass" do - lwrp = Chef::Resource::LwrpOnce.new("hi") - expect(lwrp.kind_of?(subclass)).to be_falsey - expect(lwrp.is_a?(subclass)).to be_falsey - expect(subclass === lwrp.class).to be_falsey - expect(subclass === Chef::Resource::LwrpOnce).to be_falsey - end - it "get_lwrp(:lwrp_once).new is *not* a subclass" do - lwrp = get_lwrp(:lwrp_once).new("hi") - expect(lwrp.kind_of?(subclass)).to be_falsey - expect(lwrp.is_a?(subclass)).to be_falsey - expect(subclass === lwrp.class).to be_falsey - expect(subclass === get_lwrp(:lwrp_once)).to be_falsey - end - end - - context "with a subclass of Chef::Resource::LwrpOnce" do - let(:subclass) do - Class.new(Chef::Resource::LwrpOnce) - end - - it "subclass.new is a subclass" do - lwrp = subclass.new("hi") - expect(lwrp.kind_of?(subclass)).to be_truthy - expect(lwrp.is_a?(subclass)).to be_truthy - expect(subclass === lwrp).to be_truthy - expect(lwrp.class === subclass) - end - it "subclass.new is a Chef::Resource::LwrpOnce" do - lwrp = subclass.new("hi") - expect(lwrp.kind_of?(Chef::Resource::LwrpOnce)).to be_truthy - expect(lwrp.is_a?(Chef::Resource::LwrpOnce)).to be_truthy - expect(Chef::Resource::LwrpOnce === lwrp).to be_truthy - expect(lwrp.class === Chef::Resource::LwrpOnce) - end - it "subclass.new is a get_lwrp(:lwrp_once)" do - lwrp = subclass.new("hi") - expect(lwrp.kind_of?(get_lwrp(:lwrp_once))).to be_truthy - expect(lwrp.is_a?(get_lwrp(:lwrp_once))).to be_truthy - expect(get_lwrp(:lwrp_once) === lwrp).to be_truthy - expect(lwrp.class === get_lwrp(:lwrp_once)) - end - it "Chef::Resource::LwrpOnce.new is *not* a subclass" do - lwrp = Chef::Resource::LwrpOnce.new("hi") - expect(lwrp.kind_of?(subclass)).to be_falsey - expect(lwrp.is_a?(subclass)).to be_falsey - expect(subclass === lwrp.class).to be_falsey - expect(subclass === Chef::Resource::LwrpOnce).to be_falsey - end it "get_lwrp(:lwrp_once).new is *not* a subclass" do lwrp = get_lwrp(:lwrp_once).new("hi") expect(lwrp.kind_of?(subclass)).to be_falsey -- cgit v1.2.1