Module: REXML::Validation::Validator

Module | REXML::Validation::Validator
In: | rexml/validation/validation.rb

### Methods

dump reset validate

### Constants

NILEVENT | = | [ nil ]

### Public Instance methods

dump()

[Source]

    # File rexml/validation/validation.rb, line 14
          def dump
            puts @root.inspect
          end

reset()

[Source]

    # File rexml/validation/validation.rb, line 7
          def reset
            @current = @root
            @root.reset
            @root.previous = true
            @attr_stack = []
            self
          end

validate( event )

[Source]

    # File rexml/validation/validation.rb, line 17
          def validate( event )
            #puts "Current: #@current"
            #puts "Event: #{event.inspect}"
            @attr_stack = [] unless defined? @attr_stack
            match = @current.next(event)
            raise ValidationException.new( "Validation error.  Expected: "+
              @current.expected.join( " or " )+" from #{@current.inspect} "+
              " but got #{Event.new( event[0], event[1] ).inspect}" ) unless match
            @current = match

            # Check for attributes
            case event[0]
            when :start_element
              #puts "Checking attributes"
              @attr_stack << event[2]
              begin
                sattr = [:start_attribute, nil]
                eattr = [:end_attribute]
                text = [:text, nil]
                k,v = event[2].find { |k,v|
                  sattr[1] = k
                  #puts "Looking for #{sattr.inspect}"
                  m = @current.next( sattr )
                  #puts "Got #{m.inspect}"
                  if m
                    # If the state has text children...
                    #puts "Looking for #{eattr.inspect}"
                    #puts "Expect #{m.expected}"
                    if m.matches?( eattr )
                      #puts "Got end"
                      @current = m
                    else
                      #puts "Didn't get end"
                      text[1] = v
                      #puts "Looking for #{text.inspect}"
                      m = m.next( text )
                      #puts "Got #{m.inspect}"
                      text[1] = nil
                      return false unless m
                      @current = m if m
                    end
                    m = @current.next( eattr )
                    if m
                      @current = m
                      true
                    else
                      false
                    end
                  else
                    false
                  end
                }
                event[2].delete(k) if k
              end while k
            when :end_element
              attrs = @attr_stack.pop
              raise ValidationException.new( "Validation error.  Illegal "+
                " attributes: #{attrs.inspect}") if attrs.length > 0
            end
          end

[Validate]