Module: REXML::Validation::Validator
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
| |
Defined in: | lib/rexml/validation/validation.rb |
Constant Summary
-
NILEVENT =
# File 'lib/rexml/validation/validation.rb', line 7[ nil ]
Instance Method Summary
Instance Method Details
#dump
[ GitHub ]# File 'lib/rexml/validation/validation.rb', line 15
def dump puts @root.inspect end
#reset
[ GitHub ]# File 'lib/rexml/validation/validation.rb', line 8
def reset @current = @root @root.reset @root.previous = true @attr_stack = [] self end
#validate(event)
# File 'lib/rexml/validation/validation.rb', line 18
def validate( event ) @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 @attr_stack << event[2] begin sattr = [:start_attribute, nil] eattr = [:end_attribute] text = [:text, nil] k, = event[2].find { |key,value| sattr[1] = key m = @current.next( sattr ) if m # If the state has text children... if m.matches?( eattr ) @current = m else text[1] = value m = m.next( text ) 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