summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util/settings/setting.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/util/settings/setting.rb')
-rw-r--r--lib/puppet/util/settings/setting.rb110
1 files changed, 110 insertions, 0 deletions
diff --git a/lib/puppet/util/settings/setting.rb b/lib/puppet/util/settings/setting.rb
new file mode 100644
index 000000000..e64cfd6c6
--- /dev/null
+++ b/lib/puppet/util/settings/setting.rb
@@ -0,0 +1,110 @@
+# The base element type.
+class Puppet::Util::Settings::Setting
+ attr_accessor :name, :section, :default, :setbycli, :call_on_define
+ attr_reader :desc, :short
+
+ def desc=(value)
+ @desc = value.gsub(/^\s*/, '')
+ end
+
+ # get the arguments in getopt format
+ def getopt_args
+ if short
+ [["--#{name}", "-#{short}", GetoptLong::REQUIRED_ARGUMENT]]
+ else
+ [["--#{name}", GetoptLong::REQUIRED_ARGUMENT]]
+ end
+ end
+
+ # get the arguments in OptionParser format
+ def optparse_args
+ if short
+ ["--#{name}", "-#{short}", desc, :REQUIRED]
+ else
+ ["--#{name}", desc, :REQUIRED]
+ end
+ end
+
+ def hook=(block)
+ meta_def :handle, &block
+ end
+
+ # Create the new element. Pretty much just sets the name.
+ def initialize(args = {})
+ unless @settings = args.delete(:settings)
+ raise ArgumentError.new("You must refer to a settings object")
+ end
+
+ args.each do |param, value|
+ method = param.to_s + "="
+ unless self.respond_to? method
+ raise ArgumentError, "%s does not accept %s" % [self.class, param]
+ end
+
+ self.send(method, value)
+ end
+
+ unless self.desc
+ raise ArgumentError, "You must provide a description for the %s config option" % self.name
+ end
+ end
+
+ def iscreated
+ @iscreated = true
+ end
+
+ def iscreated?
+ if defined? @iscreated
+ return @iscreated
+ else
+ return false
+ end
+ end
+
+ def set?
+ if defined? @value and ! @value.nil?
+ return true
+ else
+ return false
+ end
+ end
+
+ # short name for the celement
+ def short=(value)
+ if value.to_s.length != 1
+ raise ArgumentError, "Short names can only be one character."
+ end
+ @short = value.to_s
+ end
+
+ # Convert the object to a config statement.
+ def to_config
+ str = @desc.gsub(/^/, "# ") + "\n"
+
+ # Add in a statement about the default.
+ if defined? @default and @default
+ str += "# The default value is '%s'.\n" % @default
+ end
+
+ # If the value has not been overridden, then print it out commented
+ # and unconverted, so it's clear that that's the default and how it
+ # works.
+ value = @settings.value(self.name)
+
+ if value != @default
+ line = "%s = %s" % [@name, value]
+ else
+ line = "# %s = %s" % [@name, @default]
+ end
+
+ str += line + "\n"
+
+ str.gsub(/^/, " ")
+ end
+
+ # Retrieves the value, or if it's not set, retrieves the default.
+ def value
+ @settings.value(self.name)
+ end
+end
+