summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Kantrowitz <noah@coderanger.net>2017-04-03 17:23:10 -0500
committerNoah Kantrowitz <noah@coderanger.net>2017-04-03 17:23:10 -0500
commit9dc01eafb44618cb71169d8c891d3ce2792aed1f (patch)
tree21130bfc55193f42b6630387cdd458f34e0ee185
parent1ffb0a0fa00f1ef359e42886def859df6fd3e48c (diff)
downloadchef-9dc01eafb44618cb71169d8c891d3ce2792aed1f.tar.gz
Try removing the const-ificiation of DSL-based resources/providers.
Signed-off-by: Noah Kantrowitz <noah@coderanger.net>
-rw-r--r--lib/chef/provider.rb27
-rw-r--r--lib/chef/provider/lwrp_base.rb2
-rw-r--r--lib/chef/resource.rb22
-rw-r--r--lib/chef/resource/lwrp_base.rb2
-rw-r--r--spec/unit/lwrp_spec.rb107
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