# encoding: UTF-8 # WSDL4R - XMLSchema simpleContent restriction definition for WSDL. # Copyright (C) 2000-2007 NAKAMURA, Hiroshi . # This program is copyrighted free software by NAKAMURA, Hiroshi. You can # redistribute it and/or modify it under the same terms of Ruby's license; # either the dual license version in 2003, or any later version. require 'wsdl/info' require 'xsd/namedelements' module WSDL module XMLSchema class SimpleRestriction < Info attr_reader :base attr_accessor :length attr_accessor :minlength attr_accessor :maxlength attr_accessor :pattern attr_reader :enumeration attr_accessor :whitespace attr_accessor :maxinclusive attr_accessor :maxexclusive attr_accessor :minexclusive attr_accessor :mininclusive attr_accessor :totaldigits attr_accessor :fractiondigits attr_reader :fixed attr_reader :attributes def initialize super @base = nil @enumeration = [] # NamedElements? @length = nil @maxlength = nil @minlength = nil @pattern = nil @fixed = {} @attributes = XSD::NamedElements.new end def valid?(value) return false unless check_restriction(value) return false unless check_length(value) return false unless check_maxlength(value) return false unless check_minlength(value) return false unless check_pattern(value) true end def enumeration? !@enumeration.empty? end def parse_element(element) case element when LengthName Length.new when MinLengthName MinLength.new when MaxLengthName MaxLength.new when PatternName Pattern.new when EnumerationName Enumeration.new when WhiteSpaceName WhiteSpace.new when MaxInclusiveName MaxInclusive.new when MaxExclusiveName MaxExclusive.new when MinExclusiveName MinExclusive.new when MinInclusiveName MinInclusive.new when TotalDigitsName TotalDigits.new when FractionDigitsName FractionDigits.new when AttributeName o = Attribute.new @attributes << o o when AttributeGroupName o = AttributeGroup.new @attributes << o o when AnyAttributeName o = AnyAttribute.new @attributes << o o end end def parse_attr(attr, value) case attr when BaseAttrName @base = value end end private def check_restriction(value) @enumeration.empty? or @enumeration.include?(value) end def check_length(value) @length.nil? or value.size == @length end def check_maxlength(value) @maxlength.nil? or value.size <= @maxlength end def check_minlength(value) @minlength.nil? or value.size >= @minlength end def check_pattern(value) @pattern.nil? or @pattern =~ value end end end end