Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 239

Show
Ignore:
Timestamp:
07/12/01 12:04:58 (7 years ago)
Author:
nakahiro
Message:

All: Triming data except XSDString before parsing it.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/XMLSchemaDatatypes.rb

    r230 r239  
    9393    end 
    9494  end 
     95 
     96protected 
     97  def trim( data ) 
     98    data.sub( /\A\s*(\S*)\s*\z/, '\1' ) 
     99  end 
    95100end 
    96101 
     
    120125  def set( newBoolean ) 
    121126    if newBoolean.is_a?( String ) 
    122       if newBoolean == 'true' || newBoolean == '1' 
     127      str = trim( newBoolean ) 
     128      if str == 'true' || str == '1' 
    123129        @data = true 
    124       elsif newBoolean == 'false' || newBoolean == '0' 
     130      elsif str == 'false' || str == '0' 
    125131        @data = false 
    126132      else 
    127         raise ValueSpaceError.new( "Boolean: #{ newBoolean } is not acceptable." ) 
     133        raise ValueSpaceError.new( "Boolean: #{ str } is not acceptable." ) 
    128134      end 
    129135    else 
     
    134140 
    135141class XSDString < XSDBase 
     142  CharsRegexp = Regexp.new( '\A[\x9\xa\xd\x20-\xd7ff\xe000-\xfffd\x10000\x10ffff]*\z' ) 
     143 
    136144public 
    137145 
     
    142150 
    143151  def set( newString ) 
     152    unless CharsRegexp =~ newString 
     153      raise ValueSpaceError.new( "String: #{ newString } is not acceptable." ) 
     154    end 
    144155    @data = newString 
    145156  end 
     
    158169 
    159170  def set( newDecimal ) 
    160     /^([+-]?)(\d*)(?:\.(\d*)?)?$/ =~ newDecimal.to_s 
     171    /^([+-]?)(\d*)(?:\.(\d*)?)?$/ =~ trim( newDecimal.to_s ) 
    161172    unless Regexp.last_match 
    162173      raise ValueSpaceError.new( "Decimal: #{ newDecimal } is not acceptable." ) 
     
    202213    @data = if newFloat.is_a?( Float ) 
    203214        narrowTo32bit( newFloat ) 
    204       elsif newFloat == 'NaN' 
    205         0.0/0.0 
    206       elsif newFloat == 'INF' 
    207         1.0/0.0 
    208       elsif newFloat == '-INF' 
    209         -1.0/0.0 
    210215      else 
    211         narrowTo32bit( newFloat.to_f ) 
     216        str = trim( newFloat.to_s ) 
     217        if str == 'NaN' 
     218          0.0/0.0 
     219        elsif str == 'INF' 
     220          1.0/0.0 
     221        elsif str == '-INF' 
     222          -1.0/0.0 
     223        else 
     224          narrowTo32bit( str.to_f ) 
     225        end 
    212226      end 
    213227  end 
     
    250264    @data = if newDouble.is_a?( Float ) 
    251265        newDouble 
    252       elsif newDouble == 'NaN' 
    253         0.0/0.0 
    254       elsif newDouble == 'INF' 
    255         1.0/0.0 
    256       elsif newDouble == '-INF' 
    257         -1.0/0.0 
    258266      else 
    259         newDouble.to_f 
     267        str = trim( newDouble.to_s ) 
     268        if str == 'NaN' 
     269          0.0/0.0 
     270        elsif str == 'INF' 
     271          1.0/0.0 
     272        elsif str == '-INF' 
     273          -1.0/0.0 
     274        else 
     275          str.to_f 
     276        end 
    260277      end 
    261278  end 
     
    293310      @data = Date.new3( gt.year, gt.mon, gt.mday, gt.hour, gt.min, gt.sec ) 
    294311    else 
    295       /^([+-]?\d+)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+-]\d\d:\d\d)?)?$/ =~ t.to_s 
     312      /^([+-]?\d+)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+-]\d\d:\d\d)?)?$/ =~ trim( t.to_s ) 
    296313      unless Regexp.last_match 
    297314        raise ValueSpaceError.new( "DateTime: #{ t } is not acceptable." ) 
     
    375392      @data = t 
    376393    else 
    377       /^(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(?:Z|(?:([+-])(\d\d):(\d\d))?)?$/ =~ t.to_s 
     394      /^(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(?:Z|(?:([+-])(\d\d):(\d\d))?)?$/ =~ trim( t.to_s ) 
    378395      unless Regexp.last_match 
    379396        raise ValueSpaceError.new( "Time: #{ t } is not acceptable." ) 
     
    433450      @data = Date.new3( gt.year, gt.mon, gt.mday, gt.hour, gt.min, gt.sec ) 
    434451    else 
    435       /^([+-]?\d+)-(\d\d)-(\d\d)(Z|(?:[+-]\d\d:\d\d)?)?$/ =~ t.to_s 
     452      /^([+-]?\d+)-(\d\d)-(\d\d)(Z|(?:[+-]\d\d:\d\d)?)?$/ =~ trim( t.to_s ) 
    436453      unless Regexp.last_match 
    437454        raise ValueSpaceError.new( "Time: #{ t } is not acceptable." ) 
     
    463480 
    464481  def set( newString ) 
    465     @data = [ newString ].pack( "m"
     482    @data = setEncoded( [ newString ].pack( "m" )
    466483  end 
    467484 
    468485  def setEncoded( newBase64String ) 
    469486    @data = String.new( newBase64String ) 
    470     @data.sub!( /^\s*/, '' ) 
    471     @data.sub!( /\s*$/, '' ) 
     487    @data = trim( @data ) 
    472488  end 
    473489