summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-08-22 00:33:44 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-08-22 00:33:44 +0000
commitea32a38d73dc4c1dec030c2c52d339e8976b881b (patch)
tree616b935ad7b17fcee8d8dd345618f3446f5f1b59 /lib/puppet
parentbba972fd1bcbb7747f73eee6b6789e02ad18071a (diff)
downloadpuppet-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.rb22
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]