diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-01-13 23:16:26 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-01-13 23:16:26 +0000 |
commit | 87b3bb111f2ea68cbeb875f07e826e4f75ea9eea (patch) | |
tree | c03530a415b2f90be6b4c6d5b594f0b8c78a3c0b /lib/puppet/parser/ast/classdef.rb | |
parent | 1d4638a03df6821c16c00db3084f89889f19ac33 (diff) | |
download | puppet-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.rb | 77 |
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 |