summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/ast/classdef.rb
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-01-13 23:16:26 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-01-13 23:16:26 +0000
commit87b3bb111f2ea68cbeb875f07e826e4f75ea9eea (patch)
treec03530a415b2f90be6b4c6d5b594f0b8c78a3c0b /lib/puppet/parser/ast/classdef.rb
parent1d4638a03df6821c16c00db3084f89889f19ac33 (diff)
downloadpuppet-87b3bb111f2ea68cbeb875f07e826e4f75ea9eea.tar.gz
puppet-87b3bb111f2ea68cbeb875f07e826e4f75ea9eea.tar.xz
puppet-87b3bb111f2ea68cbeb875f07e826e4f75ea9eea.zip
Moving ast classes into separate files
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@825 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/parser/ast/classdef.rb')
-rw-r--r--lib/puppet/parser/ast/classdef.rb77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/puppet/parser/ast/classdef.rb b/lib/puppet/parser/ast/classdef.rb
new file mode 100644
index 000000000..b9f1c1c6b
--- /dev/null
+++ b/lib/puppet/parser/ast/classdef.rb
@@ -0,0 +1,77 @@
+require 'puppet/parser/ast/compdef'
+
+class Puppet::Parser::AST
+ # Define a new class. Syntactically similar to component definitions,
+ # but classes are always singletons -- only one can exist on a given
+ # host.
+ class ClassDef < AST::CompDef
+ attr_accessor :parentclass
+
+ def each
+ if @parentclass
+ #[@name,@args,@parentclass,@code].each { |child| yield child }
+ [@name,@parentclass,@code].each { |child| yield child }
+ else
+ #[@name,@args,@code].each { |child| yield child }
+ [@name,@code].each { |child| yield child }
+ end
+ end
+
+ # Store our parse tree according to name.
+ def evaluate(scope)
+ name = @name.safeevaluate(scope)
+ #args = @args.safeevaluate(scope)
+
+ #:args => args,
+ arghash = {
+ :name => name,
+ :code => @code
+ }
+
+ if @parentclass
+ arghash[:parentclass] = @parentclass.safeevaluate(scope)
+ end
+
+ #Puppet.debug("defining hostclass '%s' with arguments [%s]" %
+ # [name,args])
+
+ begin
+ scope.settype(name,
+ HostClass.new(arghash)
+ )
+ rescue Puppet::ParseError => except
+ except.line = self.line
+ except.file = self.file
+ raise except
+ rescue => detail
+ error = Puppet::ParseError.new(detail)
+ error.line = self.line
+ error.file = self.file
+ error.stack = caller
+ raise error
+ end
+ end
+
+ def initialize(hash)
+ @parentclass = nil
+ super
+ end
+
+ def tree(indent = 0)
+ #@args.tree(indent + 1),
+ return [
+ @name.tree(indent + 1),
+ ((@@indline * 4 * indent) + self.typewrap("class")),
+ @parentclass ? @parentclass.tree(indent + 1) : "",
+ @code.tree(indent + 1),
+ ].join("\n")
+ end
+
+ def to_s
+ return "class %s(%s) inherits %s {\n%s }" %
+ [@name, @parentclass, @code]
+ #[@name, @args, @parentclass, @code]
+ end
+ end
+
+end