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

Changeset 1776

Show
Ignore:
Timestamp:
05/15/07 22:34:45 (1 year ago)
Author:
nahi
Message:
  • added support for token and language. applied a patch with a little modification.
Files:

Legend:

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

    r1767 r1776  
    238238  extend SOAPModuleUtils 
    239239  SOAPENCType = QName.new(EncodingNamespace, StringLiteral) 
     240end 
     241 
     242class SOAPNormalizedString < XSD::XSDNormalizedString 
     243  include SOAPBasetype 
     244  extend SOAPModuleUtils 
     245  SOAPENCType = QName.new(EncodingNamespace, NormalizedStringLiteral) 
     246end 
     247 
     248class SOAPToken < XSD::XSDToken 
     249  include SOAPBasetype 
     250  extend SOAPModuleUtils 
     251  SOAPENCType = QName.new(EncodingNamespace, TokenLiteral) 
     252end 
     253 
     254class SOAPLanguage < XSD::XSDLanguage 
     255  include SOAPBasetype 
     256  extend SOAPModuleUtils 
     257  SOAPENCType = QName.new(EncodingNamespace, LanguageLiteral) 
    240258end 
    241259 
  • trunk/lib/soap/mapping/encodedregistry.rb

    r1775 r1776  
    188188    [::String,       ::SOAP::SOAPGMonth,     BasetypeFactory], 
    189189    [::String,       ::SOAP::SOAPQName,      BasetypeFactory], 
     190    [::String,       ::SOAP::SOAPNormalizedString, BasetypeFactory], 
     191    [::String,       ::SOAP::SOAPToken,      BasetypeFactory], 
     192    [::String,       ::SOAP::SOAPLanguage,   BasetypeFactory], 
    190193 
    191194    [::Hash,         ::SOAP::SOAPArray,      HashFactory], 
     
    251254    [::String,       ::SOAP::SOAPGMonth,     BasetypeFactory], 
    252255    [::String,       ::SOAP::SOAPQName,      BasetypeFactory], 
     256    [::String,       ::SOAP::SOAPNormalizedString, BasetypeFactory], 
     257    [::String,       ::SOAP::SOAPToken,      BasetypeFactory], 
     258    [::String,       ::SOAP::SOAPLanguage,   BasetypeFactory], 
    253259 
    254260    [::Hash,         ::SOAP::SOAPArray,      HashFactory], 
  • trunk/lib/soap/mapping/typeMap.rb

    r1652 r1776  
    1414 
    1515  XSD::XSDString::Type => SOAPString, 
     16  XSD::XSDNormalizedString::Type => SOAPNormalizedString, 
     17  XSD::XSDToken::Type => SOAPToken, 
     18  XSD::XSDLanguage::Type => SOAPLanguage, 
    1619  XSD::XSDBoolean::Type => SOAPBoolean, 
    1720  XSD::XSDDecimal::Type => SOAPDecimal, 
     
    4750  # soap4r does not use soapenc types actively but it should be accepted. 
    4851  SOAP::SOAPString::SOAPENCType => SOAPString, 
     52  SOAP::SOAPNormalizedString::SOAPENCType => SOAPNormalizedString, 
     53  SOAP::SOAPToken::SOAPENCType => SOAPToken, 
     54  SOAP::SOAPLanguage::SOAPENCType => SOAPLanguage, 
    4955  SOAP::SOAPBoolean::SOAPENCType => SOAPBoolean, 
    5056  SOAP::SOAPDecimal::SOAPENCType => SOAPDecimal, 
  • trunk/lib/xsd/datatypes.rb

    r1749 r1776  
    4747 
    4848NormalizedStringLiteral = 'normalizedString' 
    49 #3.3.2 token 
    50 #3.3.3 language 
     49TokenLiteral = 'token' 
     50LanguageLiteral = 'language' 
    5151#3.3.4 NMTOKEN 
    5252#3.3.5 NMTOKENS 
     
    256256    if d.is_a?(String) 
    257257      # Integer("00012") => 10 in Ruby. 
    258       d.sub!(/^([+\-]?)0*(?=\d)/, "\\1") 
     258      d = d.sub(/^([+\-]?)0*(?=\d)/, "\\1") 
    259259    end 
    260260    screen_data_str(d) 
     
    10141014end 
    10151015 
     1016class XSDToken < XSDNormalizedString 
     1017  Type = QName.new(Namespace, TokenLiteral) 
     1018 
     1019  def initialize(value = nil) 
     1020    init(Type, value) 
     1021  end 
     1022 
     1023private 
     1024 
     1025  def screen_data(value) 
     1026    if /[\t\n]|\A | \z|  / =~ value 
     1027      raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.") 
     1028    end 
     1029    super 
     1030  end 
     1031end   
     1032 
     1033class XSDLanguage < XSDToken 
     1034  Type = QName.new(Namespace, LanguageLiteral) 
     1035 
     1036  def initialize(value = nil) 
     1037    init(Type, value) 
     1038  end 
     1039 
     1040private 
     1041 
     1042  def screen_data(value) 
     1043    if /\A(aa|ab|ae|af|ak|am|an|ar|as|av|ay|az|ba|be|bg|bh|bi|bm|bn|bo|br|bs|ca|ce|ch|co|cr|cs|cu|cv|cy|da|de|dv|dz|ee|el|en|eo|es|et|eu|fa|ff|fi|fj|fo|fr|fy|ga|gd|gl|gn|gu|gv|ha|he|hi|ho|hr|ht|hu|hy|hz|ia|id|ie|ig|ii|ik|io|is|it|iu|ja|jv|ka|kg|ki|kj|kk|kl|km|kn|ko|kr|ks|ku|kv|kw|ky|la|lb|lg|li|ln|lo|lt|lu|lv|mg|mh|mi|mk|ml|mn|mo|mr|ms|mt|my|na|nb|nd|ne|ng|nl|nn|no|nr|nv|ny|oc|oj|om|or|os|pa|pi|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sc|sd|se|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|ty|ug|uk|ur|uz|ve|vi|vo|wa|wo|xh|yi|yo|za|zh|zu)\z/ =~ value 
     1044      raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }', see ISO 639 for more information.") 
     1045    end 
     1046    super 
     1047  end 
     1048end   
     1049 
    10161050class XSDInteger < XSDDecimal 
    10171051  Type = QName.new(Namespace, IntegerLiteral) 
  • trunk/test/xsd/test_xsd.rb

    r1738 r1776  
    9292        end 
    9393        assert_raises(XSD::ValueSpaceError) do 
    94           p XSD::XSDString.new("\xC0\xC0").to_s 
     94          XSD::XSDString.new("\xC0\xC0").to_s 
    9595        end 
    9696      ensure 
     
    9999    ensure 
    100100      XSD::Charset.module_eval { @internal_encoding = @encoding_backup } 
     101    end 
     102  end 
     103 
     104  def test_XSDNormalizedString 
     105    XSD::Charset.module_eval { @encoding_backup = @internal_encoding; @internal_encoding = "NONE" } 
     106    begin 
     107      o = XSD::XSDNormalizedString.new 
     108      assert_equal(XSD::Namespace, o.type.namespace) 
     109      assert_equal(XSD::NormalizedStringLiteral, o.type.name) 
     110      assert_equal(nil, o.data) 
     111      assert_equal(true, o.is_nil) 
     112 
     113      str = "abc" 
     114      assert_equal(str, XSD::XSDNormalizedString.new(str).data) 
     115      assert_equal(str, XSD::XSDNormalizedString.new(str).to_s) 
     116      back = XSD::XSDString.strict_ces_validation 
     117      XSD::XSDString.strict_ces_validation = true 
     118      begin 
     119        assert_raises(XSD::ValueSpaceError) do 
     120          XSD::XSDNormalizedString.new("\0") 
     121        end 
     122        assert_raises(XSD::ValueSpaceError) do 
     123          XSD::XSDNormalizedString.new("\xC0\xC0").to_s 
     124        end 
     125        assert_raises(XSD::ValueSpaceError) do 
     126          XSD::XSDNormalizedString.new("a\tb").to_s 
     127        end 
     128        assert_raises(XSD::ValueSpaceError) do 
     129          XSD::XSDNormalizedString.new("a\r").to_s 
     130        end 
     131        assert_raises(XSD::ValueSpaceError) do 
     132          XSD::XSDNormalizedString.new("\nb").to_s 
     133        end 
     134      ensure 
     135        XSD::XSDString.strict_ces_validation = back 
     136      end 
     137    ensure 
     138      XSD::Charset.module_eval { @internal_encoding = @encoding_backup } 
     139    end 
     140  end 
     141 
     142  def test_XSDToken 
     143    XSD::Charset.module_eval { @encoding_backup = @internal_encoding; @internal_encoding = "NONE" } 
     144    begin 
     145      o = XSD::XSDToken.new 
     146      assert_equal(XSD::Namespace, o.type.namespace) 
     147      assert_equal(XSD::TokenLiteral, o.type.name) 
     148      assert_equal(nil, o.data) 
     149      assert_equal(true, o.is_nil) 
     150 
     151      str = "abc" 
     152      assert_equal(str, XSD::XSDToken.new(str).data) 
     153      assert_equal(str, XSD::XSDToken.new(str).to_s) 
     154      back = XSD::XSDString.strict_ces_validation 
     155      XSD::XSDString.strict_ces_validation = true 
     156      begin 
     157        assert_raises(XSD::ValueSpaceError) do 
     158          XSD::XSDToken.new("\0") 
     159        end 
     160        assert_raises(XSD::ValueSpaceError) do 
     161          XSD::XSDToken.new("\xC0\xC0").to_s 
     162        end 
     163        assert_raises(XSD::ValueSpaceError) do 
     164          XSD::XSDToken.new("a\tb").to_s 
     165        end 
     166        assert_raises(XSD::ValueSpaceError) do 
     167          XSD::XSDToken.new("a\r").to_s 
     168        end 
     169        assert_raises(XSD::ValueSpaceError) do 
     170          XSD::XSDToken.new("\nb").to_s 
     171        end 
     172        assert_raises(XSD::ValueSpaceError) do 
     173          XSD::XSDToken.new(" a").to_s 
     174        end 
     175        assert_raises(XSD::ValueSpaceError) do 
     176          XSD::XSDToken.new("b ").to_s 
     177        end 
     178        assert_raises(XSD::ValueSpaceError) do 
     179          XSD::XSDToken.new("a  b").to_s 
     180        end 
     181        assert_equal("a b", XSD::XSDToken.new("a b").data) 
     182      ensure 
     183        XSD::XSDString.strict_ces_validation = back 
     184      end 
     185    ensure 
     186      XSD::Charset.module_eval { @internal_encoding = @encoding_backup } 
     187    end 
     188 
     189    def test_XSDLanguage 
     190      o = XSD::XSDLanguage.new 
     191      assert_equal(XSD::Namespace, o.type.namespace) 
     192      assert_equal(XSD::LanguageLiteral, o.type.name) 
     193      assert_equal(nil, o.data) 
     194      assert_equal(true, o.is_nil) 
     195 
     196      str = "ja" 
     197      assert_equal(str, XSD::XSDLanguage.new(str).data) 
     198      assert_equal(str, XSD::XSDLanguage.new(str).to_s) 
     199      assert_raises(XSD::ValueSpaceError) do 
     200        XSD::XSDLanguage.new("jb") 
     201      end 
    101202    end 
    102203  end