summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util/provider_features.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/util/provider_features.rb')
-rw-r--r--lib/puppet/util/provider_features.rb294
1 files changed, 147 insertions, 147 deletions
diff --git a/lib/puppet/util/provider_features.rb b/lib/puppet/util/provider_features.rb
index e0f90aebe..ac294d20d 100644
--- a/lib/puppet/util/provider_features.rb
+++ b/lib/puppet/util/provider_features.rb
@@ -3,167 +3,167 @@ require 'puppet/util/methodhelper'
require 'puppet/util/docs'
require 'puppet/util'
module Puppet::Util::ProviderFeatures
+ include Puppet::Util::Docs
+ # The class that models the features and handles checking whether the features
+ # are present.
+ class ProviderFeature
+ include Puppet::Util
+ include Puppet::Util::MethodHelper
include Puppet::Util::Docs
- # The class that models the features and handles checking whether the features
- # are present.
- class ProviderFeature
- include Puppet::Util
- include Puppet::Util::MethodHelper
- include Puppet::Util::Docs
- attr_accessor :name, :docs, :methods
-
- # Are all of the requirements met?
- def available?(obj)
- if self.methods
- return !!methods_available?(obj)
- else
- # In this case, the provider has to declare support for this
- # feature, and that's been checked before we ever get to the
- # method checks.
- return false
- end
- end
-
- def initialize(name, docs, hash)
- self.name = symbolize(name)
- self.docs = docs
- hash = symbolize_options(hash)
- set_options(hash)
- end
-
- private
-
- # Are all of the required methods available?
- def methods_available?(obj)
- methods.each do |m|
- if obj.is_a?(Class)
- return false unless obj.public_method_defined?(m)
- else
- return false unless obj.respond_to?(m)
- end
- end
- true
- end
+ attr_accessor :name, :docs, :methods
+
+ # Are all of the requirements met?
+ def available?(obj)
+ if self.methods
+ return !!methods_available?(obj)
+ else
+ # In this case, the provider has to declare support for this
+ # feature, and that's been checked before we ever get to the
+ # method checks.
+ return false
+ end
end
- # Define one or more features. At a minimum, features require a name
- # and docs, and at this point they should also specify a list of methods
- # required to determine if the feature is present.
- def feature(name, docs, hash = {})
- @features ||= {}
- raise(Puppet::DevError, "Feature #{name} is already defined") if @features.include?(name)
- begin
- obj = ProviderFeature.new(name, docs, hash)
- @features[obj.name] = obj
- rescue ArgumentError => detail
- error = ArgumentError.new(
- "Could not create feature #{name}: #{detail}"
- )
- error.set_backtrace(detail.backtrace)
- raise error
- end
+ def initialize(name, docs, hash)
+ self.name = symbolize(name)
+ self.docs = docs
+ hash = symbolize_options(hash)
+ set_options(hash)
end
- # Return a hash of all feature documentation.
- def featuredocs
- str = ""
- @features ||= {}
- return nil if @features.empty?
- names = @features.keys.sort { |a,b| a.to_s <=> b.to_s }
- names.each do |name|
- doc = @features[name].docs.gsub(/\n\s+/, " ")
- str += "- **#{name}**: #{doc}\n"
- end
+ private
- if providers.length > 0
- headers = ["Provider", names].flatten
- data = {}
- providers.each do |provname|
- data[provname] = []
- prov = provider(provname)
- names.each do |name|
- if prov.feature?(name)
- data[provname] << "**X**"
- else
- data[provname] << ""
- end
- end
- end
- str += doctable(headers, data)
+ # Are all of the required methods available?
+ def methods_available?(obj)
+ methods.each do |m|
+ if obj.is_a?(Class)
+ return false unless obj.public_method_defined?(m)
+ else
+ return false unless obj.respond_to?(m)
end
- str
+ end
+ true
+ end
+ end
+
+ # Define one or more features. At a minimum, features require a name
+ # and docs, and at this point they should also specify a list of methods
+ # required to determine if the feature is present.
+ def feature(name, docs, hash = {})
+ @features ||= {}
+ raise(Puppet::DevError, "Feature #{name} is already defined") if @features.include?(name)
+ begin
+ obj = ProviderFeature.new(name, docs, hash)
+ @features[obj.name] = obj
+ rescue ArgumentError => detail
+ error = ArgumentError.new(
+ "Could not create feature #{name}: #{detail}"
+ )
+ error.set_backtrace(detail.backtrace)
+ raise error
+ end
+ end
+
+ # Return a hash of all feature documentation.
+ def featuredocs
+ str = ""
+ @features ||= {}
+ return nil if @features.empty?
+ names = @features.keys.sort { |a,b| a.to_s <=> b.to_s }
+ names.each do |name|
+ doc = @features[name].docs.gsub(/\n\s+/, " ")
+ str += "- **#{name}**: #{doc}\n"
end
- # Return a list of features.
- def features
- @features ||= {}
- @features.keys
+ if providers.length > 0
+ headers = ["Provider", names].flatten
+ data = {}
+ providers.each do |provname|
+ data[provname] = []
+ prov = provider(provname)
+ names.each do |name|
+ if prov.feature?(name)
+ data[provname] << "**X**"
+ else
+ data[provname] << ""
+ end
+ end
+ end
+ str += doctable(headers, data)
end
+ str
+ end
+
+ # Return a list of features.
+ def features
+ @features ||= {}
+ @features.keys
+ end
+
+ # Generate a module that sets up the boolean methods to test for given
+ # features.
+ def feature_module
+ unless defined?(@feature_module)
+ @features ||= {}
+ @feature_module = ::Module.new
+ const_set("FeatureModule", @feature_module)
+ features = @features
+ # Create a feature? method that can be passed a feature name and
+ # determine if the feature is present.
+ @feature_module.send(:define_method, :feature?) do |name|
+ method = name.to_s + "?"
+ return !!(respond_to?(method) and send(method))
+ end
+
+ # Create a method that will list all functional features.
+ @feature_module.send(:define_method, :features) do
+ return false unless defined?(features)
+ features.keys.find_all { |n| feature?(n) }.sort { |a,b|
+ a.to_s <=> b.to_s
+ }
+ end
+
+ # Create a method that will determine if a provided list of
+ # features are satisfied by the curred provider.
+ @feature_module.send(:define_method, :satisfies?) do |*needed|
+ ret = true
+ needed.flatten.each do |feature|
+ unless feature?(feature)
+ ret = false
+ break
+ end
+ end
+ ret
+ end
+
+ # Create a boolean method for each feature so you can test them
+ # individually as you might need.
+ @features.each do |name, feature|
+ method = name.to_s + "?"
+ @feature_module.send(:define_method, method) do
+ (is_a?(Class) ? declared_feature?(name) : self.class.declared_feature?(name)) or feature.available?(self)
+ end
+ end
- # Generate a module that sets up the boolean methods to test for given
- # features.
- def feature_module
- unless defined?(@feature_module)
- @features ||= {}
- @feature_module = ::Module.new
- const_set("FeatureModule", @feature_module)
- features = @features
- # Create a feature? method that can be passed a feature name and
- # determine if the feature is present.
- @feature_module.send(:define_method, :feature?) do |name|
- method = name.to_s + "?"
- return !!(respond_to?(method) and send(method))
- end
-
- # Create a method that will list all functional features.
- @feature_module.send(:define_method, :features) do
- return false unless defined?(features)
- features.keys.find_all { |n| feature?(n) }.sort { |a,b|
- a.to_s <=> b.to_s
- }
- end
-
- # Create a method that will determine if a provided list of
- # features are satisfied by the curred provider.
- @feature_module.send(:define_method, :satisfies?) do |*needed|
- ret = true
- needed.flatten.each do |feature|
- unless feature?(feature)
- ret = false
- break
- end
- end
- ret
- end
-
- # Create a boolean method for each feature so you can test them
- # individually as you might need.
- @features.each do |name, feature|
- method = name.to_s + "?"
- @feature_module.send(:define_method, method) do
- (is_a?(Class) ? declared_feature?(name) : self.class.declared_feature?(name)) or feature.available?(self)
- end
- end
-
- # Allow the provider to declare that it has a given feature.
- @feature_module.send(:define_method, :has_features) do |*names|
- @declared_features ||= []
- names.each do |name|
- name = symbolize(name)
- @declared_features << name
- end
- end
- # Aaah, grammatical correctness
- @feature_module.send(:alias_method, :has_feature, :has_features)
+ # Allow the provider to declare that it has a given feature.
+ @feature_module.send(:define_method, :has_features) do |*names|
+ @declared_features ||= []
+ names.each do |name|
+ name = symbolize(name)
+ @declared_features << name
end
- @feature_module
+ end
+ # Aaah, grammatical correctness
+ @feature_module.send(:alias_method, :has_feature, :has_features)
end
+ @feature_module
+ end
- # Return the actual provider feature instance. Really only used for testing.
- def provider_feature(name)
- return nil unless defined?(@features)
+ # Return the actual provider feature instance. Really only used for testing.
+ def provider_feature(name)
+ return nil unless defined?(@features)
- @features[name]
- end
+ @features[name]
+ end
end