diff options
Diffstat (limited to 'lib/puppet/parser/functions.rb')
-rw-r--r-- | lib/puppet/parser/functions.rb | 158 |
1 files changed, 79 insertions, 79 deletions
diff --git a/lib/puppet/parser/functions.rb b/lib/puppet/parser/functions.rb index 3e56f2a95..c238da5d4 100644 --- a/lib/puppet/parser/functions.rb +++ b/lib/puppet/parser/functions.rb @@ -7,116 +7,116 @@ require 'monitor' # class. module Puppet::Parser::Functions - (@functions = Hash.new { |h,k| h[k] = {} }).extend(MonitorMixin) - (@modules = {} ).extend(MonitorMixin) + (@functions = Hash.new { |h,k| h[k] = {} }).extend(MonitorMixin) + (@modules = {} ).extend(MonitorMixin) - class << self - include Puppet::Util - end + class << self + include Puppet::Util + end - def self.autoloader - unless defined?(@autoloader) + def self.autoloader + unless defined?(@autoloader) - @autoloader = Puppet::Util::Autoload.new( - self, - "puppet/parser/functions", + @autoloader = Puppet::Util::Autoload.new( + self, + "puppet/parser/functions", - :wrap => false - ) - end - - @autoloader + :wrap => false + ) end - Environment = Puppet::Node::Environment + @autoloader + end - def self.environment_module(env = nil) - @modules.synchronize { - @modules[ env || Environment.current || Environment.root ] ||= Module.new - } - end + Environment = Puppet::Node::Environment - # Create a new function type. - def self.newfunction(name, options = {}, &block) - name = symbolize(name) + def self.environment_module(env = nil) + @modules.synchronize { + @modules[ env || Environment.current || Environment.root ] ||= Module.new + } + end - raise Puppet::DevError, "Function #{name} already defined" if functions.include?(name) + # Create a new function type. + def self.newfunction(name, options = {}, &block) + name = symbolize(name) - ftype = options[:type] || :statement + raise Puppet::DevError, "Function #{name} already defined" if functions.include?(name) - unless ftype == :statement or ftype == :rvalue - raise Puppet::DevError, "Invalid statement type #{ftype.inspect}" - end + ftype = options[:type] || :statement - fname = "function_#{name}" - environment_module.send(:define_method, fname, &block) - - # Someday we'll support specifying an arity, but for now, nope - #functions[name] = {:arity => arity, :type => ftype} - functions[name] = {:type => ftype, :name => fname} - functions[name][:doc] = options[:doc] if options[:doc] + unless ftype == :statement or ftype == :rvalue + raise Puppet::DevError, "Invalid statement type #{ftype.inspect}" end - # Remove a function added by newfunction - def self.rmfunction(name) - name = symbolize(name) + fname = "function_#{name}" + environment_module.send(:define_method, fname, &block) - raise Puppet::DevError, "Function #{name} is not defined" unless functions.include? name + # Someday we'll support specifying an arity, but for now, nope + #functions[name] = {:arity => arity, :type => ftype} + functions[name] = {:type => ftype, :name => fname} + functions[name][:doc] = options[:doc] if options[:doc] + end - functions.delete name + # Remove a function added by newfunction + def self.rmfunction(name) + name = symbolize(name) - fname = "function_#{name}" - environment_module.send(:remove_method, fname) - end + raise Puppet::DevError, "Function #{name} is not defined" unless functions.include? name - # Determine if a given name is a function - def self.function(name) - name = symbolize(name) + functions.delete name - unless functions.include?(name) or functions(Puppet::Node::Environment.root).include?(name) - autoloader.load(name,Environment.current || Environment.root) - end + fname = "function_#{name}" + environment_module.send(:remove_method, fname) + end - ( functions(Environment.root)[name] || functions[name] || {:name => false} )[:name] + # Determine if a given name is a function + def self.function(name) + name = symbolize(name) + + unless functions.include?(name) or functions(Puppet::Node::Environment.root).include?(name) + autoloader.load(name,Environment.current || Environment.root) end - def self.functiondocs - autoloader.loadall + ( functions(Environment.root)[name] || functions[name] || {:name => false} )[:name] + end - ret = "" + def self.functiondocs + autoloader.loadall - functions.sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |name, hash| - #ret += "#{name}\n#{hash[:type]}\n" - ret += "#{name}\n#{"-" * name.to_s.length}\n" - if hash[:doc] - ret += Puppet::Util::Docs.scrub(hash[:doc]) - else - ret += "Undocumented.\n" - end + ret = "" - ret += "\n\n- **Type**: #{hash[:type]}\n\n" - end + functions.sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |name, hash| + #ret += "#{name}\n#{hash[:type]}\n" + ret += "#{name}\n#{"-" * name.to_s.length}\n" + if hash[:doc] + ret += Puppet::Util::Docs.scrub(hash[:doc]) + else + ret += "Undocumented.\n" + end - ret + ret += "\n\n- **Type**: #{hash[:type]}\n\n" end - def self.functions(env = nil) - @functions.synchronize { - @functions[ env || Environment.current || Environment.root ] - } - end + ret + end - # Determine if a given function returns a value or not. - def self.rvalue?(name) - (functions[symbolize(name)] || {})[:type] == :rvalue - end + def self.functions(env = nil) + @functions.synchronize { + @functions[ env || Environment.current || Environment.root ] + } + end + + # Determine if a given function returns a value or not. + def self.rvalue?(name) + (functions[symbolize(name)] || {})[:type] == :rvalue + end - # Runs a newfunction to create a function for each of the log levels + # Runs a newfunction to create a function for each of the log levels - Puppet::Util::Log.levels.each do |level| - newfunction(level, :doc => "Log a message on the server at level #{level.to_s}.") do |vals| - send(level, vals.join(" ")) - end + Puppet::Util::Log.levels.each do |level| + newfunction(level, :doc => "Log a message on the server at level #{level.to_s}.") do |vals| + send(level, vals.join(" ")) end + end end |