diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-22 00:33:44 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-22 00:33:44 +0000 |
commit | ea32a38d73dc4c1dec030c2c52d339e8976b881b (patch) | |
tree | 616b935ad7b17fcee8d8dd345618f3446f5f1b59 /lib/puppet | |
parent | bba972fd1bcbb7747f73eee6b6789e02ad18071a (diff) | |
download | puppet-ea32a38d73dc4c1dec030c2c52d339e8976b881b.tar.gz puppet-ea32a38d73dc4c1dec030c2c52d339e8976b881b.tar.xz puppet-ea32a38d73dc4c1dec030c2c52d339e8976b881b.zip |
Function autoloading now works as requested in #214.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1482 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/parser/functions.rb | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/puppet/parser/functions.rb b/lib/puppet/parser/functions.rb index a9f7ff1da..9292e43f5 100644 --- a/lib/puppet/parser/functions.rb +++ b/lib/puppet/parser/functions.rb @@ -1,4 +1,5 @@ # Grr +require 'puppet/autoload' require 'puppet/parser/scope' module Puppet::Parser @@ -6,10 +7,14 @@ module Functions # A module for managing parser functions. Each specified function # becomes an instance method on the Scope class. + class << self + include Puppet::Util + end + # Create a new function type. def self.newfunction(name, ftype = :statement, &block) @functions ||= {} - name = name.intern if name.is_a? String + name = symbolize(name) if @functions.include? name raise Puppet::DevError, "Function %s already defined" % name @@ -35,7 +40,18 @@ module Functions # Determine if a given name is a function def self.function(name) - name = name.intern if name.is_a? String + name = symbolize(name) + + unless defined? @autoloader + @autoloader = Puppet::Autoload.new(self, + "puppet/parser/functions", + :wrap => false + ) + end + + unless @functions.include? name + @autoloader.load(name) + end if @functions.include? name return @functions[name][:name] @@ -46,7 +62,7 @@ module Functions # Determine if a given function returns a value or not. def self.rvalue?(name) - name = name.intern if name.is_a? String + name = symbolize(name) if @functions.include? name case @functions[name][:type] |