In Files

  • rexml/validation/validation.rb

REXML::Validation::Validator

Constants

NILEVENT

Public Instance Methods

dump() click to toggle source
 
               # File rexml/validation/validation.rb, line 14
def dump
  puts @root.inspect
end
            
reset() click to toggle source
 
               # File rexml/validation/validation.rb, line 7
def reset
  @current = @root
  @root.reset
  @root.previous = true
  @attr_stack = []
  self
end
            
validate( event ) click to toggle 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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus