Sha256: b7781ad4afe597a9c4c3c1d1b42075b329899cf555d333a315942a383dd0c60d

Contents?: true

Size: 1.41 KB

Versions: 4

Compression:

Stored size: 1.41 KB

Contents

require 'puppet'
require 'puppet/parser/ast/branch'

class Puppet::Parser::AST
    class BooleanOperator < AST::Branch

        attr_accessor :operator, :lval, :rval

        # Iterate across all of our children.
        def each
            [@lval,@rval,@operator].each { |child| yield child }
        end

        # Returns a boolean which is the result of the boolean operation
        # of lval and rval operands
        def evaluate(scope)
            # evaluate the first operand, should return a boolean value
            lval = @lval.safeevaluate(scope)
            
            # return result
            # lazy evaluate right operand
            case @operator
            when "and";
                if Puppet::Parser::Scope.true?(lval)
                    rval = @rval.safeevaluate(scope)
                    Puppet::Parser::Scope.true?(rval)
                else # false and false == false
                    false
                end
            when "or"; 
                if Puppet::Parser::Scope.true?(lval) 
                    true
                else
                    rval = @rval.safeevaluate(scope)
                    Puppet::Parser::Scope.true?(rval)
                end
            end
        end

        def initialize(hash)
            super

            unless %w{and or}.include?(@operator)
                raise ArgumentError, "Invalid boolean operator %s" % @operator
            end
        end
    end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
puppet-0.24.9 lib/puppet/parser/ast/boolean_operator.rb
puppet-0.24.7 lib/puppet/parser/ast/boolean_operator.rb
puppet-0.24.6 lib/puppet/parser/ast/boolean_operator.rb
puppet-0.24.8 lib/puppet/parser/ast/boolean_operator.rb