yieldmanager 0.9.5 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3-p362
data/README.md CHANGED
@@ -9,7 +9,7 @@ copies) and re-uses that wsdl for the life of the Yieldmanager::Client object.
9
9
 
10
10
  The current API version is stored in the API_VERSION file.
11
11
 
12
- The gem should run properly on 1.8, 1.9 and 2.0, but 1.8 support will likely be removed in a future version.
12
+ The gem should run properly on 1.8, 1.9, 2.0 and JRuby 1.7.4, but 1.8 support will likely be removed in a future version.
13
13
 
14
14
  ### Installation
15
15
 
@@ -0,0 +1,1092 @@
1
+ # soap/baseData.rb: SOAP4R - Base type library
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'xsd/datatypes'
10
+ require 'soap/soap'
11
+ require 'xsd/codegen/gensupport'
12
+ require 'soap/mapping/mapping'
13
+
14
+
15
+ module SOAP
16
+
17
+
18
+ ###
19
+ ## Mix-in module for SOAP base type classes.
20
+ #
21
+ module SOAPModuleUtils
22
+ include SOAP
23
+
24
+ public
25
+
26
+ def decode(elename)
27
+ d = self.new
28
+ d.elename = elename
29
+ d
30
+ end
31
+
32
+ def to_data(str)
33
+ new(str).data
34
+ end
35
+ end
36
+
37
+
38
+ ###
39
+ ## for SOAP type(base and compound)
40
+ #
41
+ module SOAPType
42
+ attr_accessor :encodingstyle
43
+ attr_accessor :elename
44
+ attr_accessor :id
45
+ attr_reader :precedents
46
+ attr_accessor :root
47
+ attr_accessor :parent
48
+ attr_accessor :position
49
+ attr_reader :extraattr
50
+ attr_accessor :definedtype
51
+
52
+ def initialize(*arg)
53
+ super
54
+ @encodingstyle = nil
55
+ @elename = XSD::QName::EMPTY
56
+ @id = nil
57
+ @precedents = []
58
+ @root = false
59
+ @parent = nil
60
+ @position = nil
61
+ @definedtype = nil
62
+ @extraattr = {}
63
+ end
64
+
65
+ def inspect
66
+ if self.is_a?(XSD::NSDBase)
67
+ sprintf("#<%s:0x%x %s %s>", self.class.name, __id__, self.elename, self.type)
68
+ else
69
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename)
70
+ end
71
+ end
72
+
73
+ def rootnode
74
+ node = self
75
+ while node = node.parent
76
+ break if SOAPEnvelope === node
77
+ end
78
+ node
79
+ end
80
+ end
81
+
82
+
83
+ ###
84
+ ## for SOAP base type
85
+ #
86
+ module SOAPBasetype
87
+ include SOAPType
88
+ include SOAP
89
+
90
+ attr_accessor :qualified
91
+
92
+ def initialize(*arg)
93
+ super
94
+ @qualified = nil
95
+ end
96
+ end
97
+
98
+
99
+ ###
100
+ ## for SOAP compound type
101
+ #
102
+ module SOAPCompoundtype
103
+ include SOAPType
104
+ include SOAP
105
+
106
+ attr_accessor :qualified
107
+
108
+ def initialize(*arg)
109
+ super
110
+ @qualified = nil
111
+ end
112
+ end
113
+
114
+ # marker for compound types which have named accessor
115
+ module SOAPNameAccessible
116
+ end
117
+
118
+
119
+ ###
120
+ ## Convenience datatypes.
121
+ #
122
+ class SOAPReference < XSD::NSDBase
123
+ include SOAPBasetype
124
+ extend SOAPModuleUtils
125
+
126
+ public
127
+
128
+ attr_accessor :refid
129
+
130
+ # Override the definition in SOAPBasetype.
131
+ def initialize(obj = nil)
132
+ super()
133
+ @type = XSD::QName::EMPTY
134
+ @refid = nil
135
+ @obj = nil
136
+ __setobj__(obj) if obj
137
+ end
138
+
139
+ def __getobj__
140
+ @obj
141
+ end
142
+
143
+ def __setobj__(obj)
144
+ @obj = obj
145
+ @refid = @obj.id || SOAPReference.create_refid(@obj)
146
+ @obj.id = @refid unless @obj.id
147
+ @obj.precedents << self
148
+ # Copies NSDBase information
149
+ @obj.type = @type unless @obj.type
150
+ end
151
+
152
+ # Why don't I use delegate.rb?
153
+ # -> delegate requires target object type at initialize time.
154
+ # Why don't I use forwardable.rb?
155
+ # -> forwardable requires a list of forwarding methods.
156
+ #
157
+ # ToDo: Maybe I should use forwardable.rb and give it a methods list like
158
+ # delegate.rb...
159
+ #
160
+ def method_missing(msg_id, *params)
161
+ if @obj
162
+ @obj.send(msg_id, *params)
163
+ else
164
+ nil
165
+ end
166
+ end
167
+
168
+ # for referenced base type such as a long value from Axis.
169
+ # base2obj requires a node to respond to :data
170
+ def data
171
+ if @obj.respond_to?(:data)
172
+ @obj.data
173
+ end
174
+ end
175
+
176
+ def refidstr
177
+ '#' + @refid
178
+ end
179
+
180
+ def self.create_refid(obj)
181
+ 'id' + obj.__id__.to_s
182
+ end
183
+
184
+ def self.decode(elename, refidstr)
185
+ if /\A#(.*)\z/ =~ refidstr
186
+ refid = $1
187
+ elsif /\Acid:(.*)\z/ =~ refidstr
188
+ refid = $1
189
+ else
190
+ raise ArgumentError.new("illegal refid #{refidstr}")
191
+ end
192
+ d = super(elename)
193
+ d.refid = refid
194
+ d
195
+ end
196
+ end
197
+
198
+
199
+ class SOAPExternalReference < XSD::NSDBase
200
+ include SOAPBasetype
201
+ extend SOAPModuleUtils
202
+
203
+ def initialize
204
+ super()
205
+ @type = XSD::QName::EMPTY
206
+ end
207
+
208
+ def referred
209
+ rootnode.external_content[external_contentid] = self
210
+ end
211
+
212
+ def refidstr
213
+ 'cid:' + external_contentid
214
+ end
215
+
216
+ private
217
+
218
+ def external_contentid
219
+ raise NotImplementedError.new
220
+ end
221
+ end
222
+
223
+
224
+ class SOAPNil < XSD::XSDNil
225
+ include SOAPBasetype
226
+ extend SOAPModuleUtils
227
+
228
+ public
229
+
230
+ def initialize(value = nil)
231
+ super(value)
232
+ @extraattr[XSD::AttrNilName] = 'true'
233
+ end
234
+ end
235
+
236
+ # SOAPRawString is for sending raw string. In contrast to SOAPString,
237
+ # SOAP4R does not do XML encoding and does not convert its CES. The string it
238
+ # holds is embedded to XML instance directly as a 'xsd:string'.
239
+ class SOAPRawString < XSD::XSDString
240
+ include SOAPBasetype
241
+ extend SOAPModuleUtils
242
+ end
243
+
244
+
245
+ ###
246
+ ## Basic datatypes.
247
+ #
248
+ class SOAPAnySimpleType < XSD::XSDAnySimpleType
249
+ include SOAPBasetype
250
+ extend SOAPModuleUtils
251
+ end
252
+
253
+ class SOAPString < XSD::XSDString
254
+ include SOAPBasetype
255
+ extend SOAPModuleUtils
256
+ SOAPENCType = QName.new(EncodingNamespace, StringLiteral)
257
+ end
258
+
259
+ class SOAPNormalizedString < XSD::XSDNormalizedString
260
+ include SOAPBasetype
261
+ extend SOAPModuleUtils
262
+ SOAPENCType = QName.new(EncodingNamespace, NormalizedStringLiteral)
263
+ end
264
+
265
+ class SOAPToken < XSD::XSDToken
266
+ include SOAPBasetype
267
+ extend SOAPModuleUtils
268
+ SOAPENCType = QName.new(EncodingNamespace, TokenLiteral)
269
+ end
270
+
271
+ class SOAPLanguage < XSD::XSDLanguage
272
+ include SOAPBasetype
273
+ extend SOAPModuleUtils
274
+ SOAPENCType = QName.new(EncodingNamespace, LanguageLiteral)
275
+ end
276
+
277
+ class SOAPNMTOKEN < XSD::XSDNMTOKEN
278
+ include SOAPBasetype
279
+ extend SOAPModuleUtils
280
+ SOAPENCType = QName.new(EncodingNamespace, NMTOKENLiteral)
281
+ end
282
+
283
+ class SOAPNMTOKENS < XSD::XSDNMTOKENS
284
+ include SOAPBasetype
285
+ extend SOAPModuleUtils
286
+ SOAPENCType = QName.new(EncodingNamespace, NMTOKENSLiteral)
287
+ end
288
+
289
+ class SOAPName < XSD::XSDName
290
+ include SOAPBasetype
291
+ extend SOAPModuleUtils
292
+ SOAPENCType = QName.new(EncodingNamespace, NameLiteral)
293
+ end
294
+
295
+ class SOAPNCName < XSD::XSDNCName
296
+ include SOAPBasetype
297
+ extend SOAPModuleUtils
298
+ SOAPENCType = QName.new(EncodingNamespace, NCNameLiteral)
299
+ end
300
+
301
+ class SOAPID < XSD::XSDID
302
+ include SOAPBasetype
303
+ extend SOAPModuleUtils
304
+ SOAPENCType = QName.new(EncodingNamespace, IDLiteral)
305
+ end
306
+
307
+ class SOAPIDREF < XSD::XSDIDREF
308
+ include SOAPBasetype
309
+ extend SOAPModuleUtils
310
+ SOAPENCType = QName.new(EncodingNamespace, IDREFLiteral)
311
+ end
312
+
313
+ class SOAPIDREFS < XSD::XSDIDREFS
314
+ include SOAPBasetype
315
+ extend SOAPModuleUtils
316
+ SOAPENCType = QName.new(EncodingNamespace, IDREFSLiteral)
317
+ end
318
+
319
+ class SOAPENTITY < XSD::XSDENTITY
320
+ include SOAPBasetype
321
+ extend SOAPModuleUtils
322
+ SOAPENCType = QName.new(EncodingNamespace, ENTITYLiteral)
323
+ end
324
+
325
+ class SOAPENTITIES < XSD::XSDENTITIES
326
+ include SOAPBasetype
327
+ extend SOAPModuleUtils
328
+ SOAPENCType = QName.new(EncodingNamespace, ENTITIESLiteral)
329
+ end
330
+
331
+ class SOAPBoolean < XSD::XSDBoolean
332
+ include SOAPBasetype
333
+ extend SOAPModuleUtils
334
+ SOAPENCType = QName.new(EncodingNamespace, BooleanLiteral)
335
+ end
336
+
337
+ class SOAPDecimal < XSD::XSDDecimal
338
+ include SOAPBasetype
339
+ extend SOAPModuleUtils
340
+ SOAPENCType = QName.new(EncodingNamespace, DecimalLiteral)
341
+ end
342
+
343
+ class SOAPFloat < XSD::XSDFloat
344
+ include SOAPBasetype
345
+ extend SOAPModuleUtils
346
+ SOAPENCType = QName.new(EncodingNamespace, FloatLiteral)
347
+ end
348
+
349
+ class SOAPDouble < XSD::XSDDouble
350
+ include SOAPBasetype
351
+ extend SOAPModuleUtils
352
+ SOAPENCType = QName.new(EncodingNamespace, DoubleLiteral)
353
+ end
354
+
355
+ class SOAPDuration < XSD::XSDDuration
356
+ include SOAPBasetype
357
+ extend SOAPModuleUtils
358
+ SOAPENCType = QName.new(EncodingNamespace, DurationLiteral)
359
+ end
360
+
361
+ class SOAPDateTime < XSD::XSDDateTime
362
+ include SOAPBasetype
363
+ extend SOAPModuleUtils
364
+ SOAPENCType = QName.new(EncodingNamespace, DateTimeLiteral)
365
+ end
366
+
367
+ class SOAPTime < XSD::XSDTime
368
+ include SOAPBasetype
369
+ extend SOAPModuleUtils
370
+ SOAPENCType = QName.new(EncodingNamespace, TimeLiteral)
371
+ end
372
+
373
+ class SOAPDate < XSD::XSDDate
374
+ include SOAPBasetype
375
+ extend SOAPModuleUtils
376
+ SOAPENCType = QName.new(EncodingNamespace, DateLiteral)
377
+ end
378
+
379
+ class SOAPGYearMonth < XSD::XSDGYearMonth
380
+ include SOAPBasetype
381
+ extend SOAPModuleUtils
382
+ SOAPENCType = QName.new(EncodingNamespace, GYearMonthLiteral)
383
+ end
384
+
385
+ class SOAPGYear < XSD::XSDGYear
386
+ include SOAPBasetype
387
+ extend SOAPModuleUtils
388
+ SOAPENCType = QName.new(EncodingNamespace, GYearLiteral)
389
+ end
390
+
391
+ class SOAPGMonthDay < XSD::XSDGMonthDay
392
+ include SOAPBasetype
393
+ extend SOAPModuleUtils
394
+ SOAPENCType = QName.new(EncodingNamespace, GMonthDayLiteral)
395
+ end
396
+
397
+ class SOAPGDay < XSD::XSDGDay
398
+ include SOAPBasetype
399
+ extend SOAPModuleUtils
400
+ SOAPENCType = QName.new(EncodingNamespace, GDayLiteral)
401
+ end
402
+
403
+ class SOAPGMonth < XSD::XSDGMonth
404
+ include SOAPBasetype
405
+ extend SOAPModuleUtils
406
+ SOAPENCType = QName.new(EncodingNamespace, GMonthLiteral)
407
+ end
408
+
409
+ class SOAPHexBinary < XSD::XSDHexBinary
410
+ include SOAPBasetype
411
+ extend SOAPModuleUtils
412
+ SOAPENCType = QName.new(EncodingNamespace, HexBinaryLiteral)
413
+ end
414
+
415
+ class SOAPBase64 < XSD::XSDBase64Binary
416
+ include SOAPBasetype
417
+ extend SOAPModuleUtils
418
+ Type = SOAPENCType = QName.new(EncodingNamespace, Base64Literal)
419
+
420
+ public
421
+
422
+ def initialize(value = nil)
423
+ super(value)
424
+ @type = Type
425
+ end
426
+
427
+ def as_xsd
428
+ @type = XSD::XSDBase64Binary::Type
429
+ end
430
+ end
431
+
432
+ class SOAPAnyURI < XSD::XSDAnyURI
433
+ include SOAPBasetype
434
+ extend SOAPModuleUtils
435
+ SOAPENCType = QName.new(EncodingNamespace, AnyURILiteral)
436
+ end
437
+
438
+ class SOAPQName < XSD::XSDQName
439
+ include SOAPBasetype
440
+ extend SOAPModuleUtils
441
+ SOAPENCType = QName.new(EncodingNamespace, QNameLiteral)
442
+ end
443
+
444
+
445
+ class SOAPInteger < XSD::XSDInteger
446
+ include SOAPBasetype
447
+ extend SOAPModuleUtils
448
+ SOAPENCType = QName.new(EncodingNamespace, IntegerLiteral)
449
+ end
450
+
451
+ class SOAPNonPositiveInteger < XSD::XSDNonPositiveInteger
452
+ include SOAPBasetype
453
+ extend SOAPModuleUtils
454
+ SOAPENCType = QName.new(EncodingNamespace, NonPositiveIntegerLiteral)
455
+ end
456
+
457
+ class SOAPNegativeInteger < XSD::XSDNegativeInteger
458
+ include SOAPBasetype
459
+ extend SOAPModuleUtils
460
+ SOAPENCType = QName.new(EncodingNamespace, NegativeIntegerLiteral)
461
+ end
462
+
463
+ class SOAPLong < XSD::XSDLong
464
+ include SOAPBasetype
465
+ extend SOAPModuleUtils
466
+ SOAPENCType = QName.new(EncodingNamespace, LongLiteral)
467
+ end
468
+
469
+ class SOAPInt < XSD::XSDInt
470
+ include SOAPBasetype
471
+ extend SOAPModuleUtils
472
+ SOAPENCType = QName.new(EncodingNamespace, IntLiteral)
473
+ end
474
+
475
+ class SOAPShort < XSD::XSDShort
476
+ include SOAPBasetype
477
+ extend SOAPModuleUtils
478
+ SOAPENCType = QName.new(EncodingNamespace, ShortLiteral)
479
+ end
480
+
481
+ class SOAPByte < XSD::XSDByte
482
+ include SOAPBasetype
483
+ extend SOAPModuleUtils
484
+ SOAPENCType = QName.new(EncodingNamespace, ByteLiteral)
485
+ end
486
+
487
+ class SOAPNonNegativeInteger < XSD::XSDNonNegativeInteger
488
+ include SOAPBasetype
489
+ extend SOAPModuleUtils
490
+ SOAPENCType = QName.new(EncodingNamespace, NonNegativeIntegerLiteral)
491
+ end
492
+
493
+ class SOAPUnsignedLong < XSD::XSDUnsignedLong
494
+ include SOAPBasetype
495
+ extend SOAPModuleUtils
496
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedLongLiteral)
497
+ end
498
+
499
+ class SOAPUnsignedInt < XSD::XSDUnsignedInt
500
+ include SOAPBasetype
501
+ extend SOAPModuleUtils
502
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedIntLiteral)
503
+ end
504
+
505
+ class SOAPUnsignedShort < XSD::XSDUnsignedShort
506
+ include SOAPBasetype
507
+ extend SOAPModuleUtils
508
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedShortLiteral)
509
+ end
510
+
511
+ class SOAPUnsignedByte < XSD::XSDUnsignedByte
512
+ include SOAPBasetype
513
+ extend SOAPModuleUtils
514
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedByteLiteral)
515
+ end
516
+
517
+ class SOAPPositiveInteger < XSD::XSDPositiveInteger
518
+ include SOAPBasetype
519
+ extend SOAPModuleUtils
520
+ SOAPENCType = QName.new(EncodingNamespace, PositiveIntegerLiteral)
521
+ end
522
+
523
+
524
+ ###
525
+ ## Compound datatypes.
526
+ #
527
+ class SOAPStruct < XSD::NSDBase
528
+ include Enumerable
529
+ include SOAPCompoundtype
530
+ include SOAPNameAccessible
531
+
532
+ public
533
+
534
+ def initialize(type = nil)
535
+ super()
536
+ @type = type || XSD::QName::EMPTY
537
+ @array = []
538
+ @data = []
539
+ end
540
+
541
+ def to_s
542
+ str = ''
543
+ self.each do |key, data|
544
+ str << "#{key}: #{data}\n"
545
+ end
546
+ str
547
+ end
548
+
549
+ def add(name, value)
550
+ value = SOAPNil.new if value.nil?
551
+ @array.push(name)
552
+ value.elename = value.elename.dup_name(name)
553
+ @data.push(value)
554
+ value.parent = self if value.respond_to?(:parent=)
555
+ value
556
+ end
557
+
558
+ def [](idx)
559
+ if idx.is_a?(Range)
560
+ @data[idx]
561
+ elsif idx.is_a?(Integer)
562
+ if (idx > @array.size)
563
+ raise ArrayIndexOutOfBoundsError.new('In ' << @type.name)
564
+ end
565
+ @data[idx]
566
+ else
567
+ if @array.include?(idx)
568
+ @data[@array.index(idx)]
569
+ else
570
+ nil
571
+ end
572
+ end
573
+ end
574
+
575
+ def []=(idx, data)
576
+ if @array.include?(idx)
577
+ data.parent = self if data.respond_to?(:parent=)
578
+ @data[@array.index(idx)] = data
579
+ else
580
+ add(idx, data)
581
+ end
582
+ end
583
+
584
+ def key?(name)
585
+ @array.include?(name)
586
+ end
587
+
588
+ def members
589
+ @array
590
+ end
591
+
592
+ def have_member
593
+ !@array.empty?
594
+ end
595
+
596
+ def to_obj
597
+ hash = {}
598
+ proptype = {}
599
+ each do |k, v|
600
+ value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s
601
+ case proptype[k]
602
+ when :single
603
+ hash[k] = [hash[k], value]
604
+ proptype[k] = :multi
605
+ when :multi
606
+ hash[k] << value
607
+ else
608
+ hash[k] = value
609
+ proptype[k] = :single
610
+ end
611
+ end
612
+ hash
613
+ end
614
+
615
+ def each
616
+ idx = 0
617
+ while idx < @array.length
618
+ yield(@array[idx], @data[idx])
619
+ idx += 1
620
+ end
621
+ end
622
+
623
+ def replace
624
+ members.each do |member|
625
+ self[member] = yield(self[member])
626
+ end
627
+ end
628
+
629
+ def self.decode(elename, type)
630
+ s = SOAPStruct.new(type)
631
+ s.elename = elename
632
+ s
633
+ end
634
+ end
635
+
636
+
637
+ # SOAPElement is not typed so it is not derived from NSDBase.
638
+ class SOAPElement
639
+ include Enumerable
640
+ include SOAPCompoundtype
641
+ include SOAPNameAccessible
642
+
643
+ attr_accessor :type
644
+ # Text interface.
645
+ attr_accessor :text
646
+ alias data text
647
+
648
+ def initialize(elename, text = nil)
649
+ super()
650
+ if elename.nil?
651
+ elename = XSD::QName::EMPTY
652
+ else
653
+ elename = Mapping.to_qname(elename)
654
+ end
655
+ @encodingstyle = LiteralNamespace
656
+ @elename = elename
657
+ @type = nil
658
+
659
+ @array = []
660
+ @data = []
661
+ @text = text
662
+ end
663
+
664
+ def inspect
665
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename) +
666
+ (@text ? " #{@text.inspect}" : '') +
667
+ @data.collect { |ele| "\n#{ele.inspect}" }.join.gsub(/^/, ' ')
668
+ end
669
+
670
+ def set(value)
671
+ @text = value
672
+ end
673
+
674
+ # Element interfaces.
675
+ def add(value)
676
+ name = value.elename.name
677
+ @array.push(name)
678
+ @data.push(value)
679
+ value.parent = self if value.respond_to?(:parent=)
680
+ value
681
+ end
682
+
683
+ def [](idx)
684
+ if @array.include?(idx)
685
+ @data[@array.index(idx)]
686
+ else
687
+ nil
688
+ end
689
+ end
690
+
691
+ def []=(idx, data)
692
+ if @array.include?(idx)
693
+ data.parent = self if data.respond_to?(:parent=)
694
+ @data[@array.index(idx)] = data
695
+ else
696
+ add(data)
697
+ end
698
+ end
699
+
700
+ def key?(name)
701
+ @array.include?(name)
702
+ end
703
+
704
+ def members
705
+ @array
706
+ end
707
+
708
+ def have_member
709
+ !@array.empty?
710
+ end
711
+
712
+ def to_obj
713
+ if !have_member
714
+ @text
715
+ else
716
+ hash = {}
717
+ proptype = {}
718
+ each do |k, v|
719
+ value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s
720
+ case proptype[k]
721
+ when :single
722
+ hash[k] = [hash[k], value]
723
+ proptype[k] = :multi
724
+ when :multi
725
+ hash[k] << value
726
+ else
727
+ hash[k] = value
728
+ proptype[k] = :single
729
+ end
730
+ end
731
+ hash
732
+ end
733
+ end
734
+
735
+ def each
736
+ idx = 0
737
+ while idx < @array.length
738
+ yield(@array[idx], @data[idx])
739
+ idx += 1
740
+ end
741
+ end
742
+
743
+ def self.decode(elename)
744
+ o = SOAPElement.new(elename)
745
+ o
746
+ end
747
+
748
+ def self.from_objs(objs)
749
+ objs.collect { |value|
750
+ if value.is_a?(SOAPElement)
751
+ value
752
+ else
753
+ k, v = value
754
+ ele = from_obj(v)
755
+ ele.elename = XSD::QName.new(nil, k)
756
+ ele
757
+ end
758
+ }
759
+ end
760
+
761
+ # when obj is a Hash or an Array:
762
+ # when key starts with "xmlattr_":
763
+ # value is added as an XML attribute with the key name however the
764
+ # "xmlattr_" is dropped from the name.
765
+ # when key starts with "xmlele_":
766
+ # value is added as an XML element with the key name however the
767
+ # "xmlele_" is dropped from the name.
768
+ # if else:
769
+ # value is added as an XML element with the key name.
770
+ def self.from_obj(obj, namespace = nil)
771
+ return obj if obj.is_a?(SOAPElement)
772
+ o = SOAPElement.new(nil)
773
+ case obj
774
+ when nil
775
+ o.text = nil
776
+ when Hash, Array
777
+ obj.each do |name, value|
778
+ addname, is_attr = parse_name(name, namespace)
779
+ if value.is_a?(Array)
780
+ value.each do |subvalue|
781
+ if is_attr
782
+ o.extraattr[addname] = subvalue
783
+ else
784
+ child = from_obj(subvalue, namespace)
785
+ child.elename = addname
786
+ o.add(child)
787
+ end
788
+ end
789
+ else
790
+ if is_attr
791
+ o.extraattr[addname] = value
792
+ else
793
+ child = from_obj(value, namespace)
794
+ child.elename = addname
795
+ o.add(child)
796
+ end
797
+ end
798
+ end
799
+ else
800
+ o.text = obj.to_s
801
+ end
802
+ o
803
+ end
804
+
805
+ def self.parse_name(obj, namespace = nil)
806
+ qname = to_qname(obj, namespace)
807
+ if /\Axmlele_/ =~ qname.name
808
+ qname = XSD::QName.new(qname.namespace, qname.name.sub(/\Axmlele_/, ''))
809
+ return qname, false
810
+ elsif /\Axmlattr_/ =~ qname.name
811
+ qname = XSD::QName.new(qname.namespace, qname.name.sub(/\Axmlattr_/, ''))
812
+ return qname, true
813
+ else
814
+ return qname, false
815
+ end
816
+ end
817
+
818
+ def self.to_qname(obj, namespace = nil)
819
+ if obj.is_a?(XSD::QName)
820
+ obj
821
+ elsif /\A(.+):([^:]+)\z/ =~ obj.to_s
822
+ XSD::QName.new($1, $2)
823
+ else
824
+ XSD::QName.new(namespace, obj.to_s)
825
+ end
826
+ end
827
+ end
828
+
829
+
830
+ class SOAPRawData < SOAPElement
831
+ def initialize(obj)
832
+ super(XSD::QName::EMPTY)
833
+ @obj = obj
834
+ end
835
+
836
+ def to_xmlpart
837
+ @obj.to_xmlpart
838
+ end
839
+ end
840
+
841
+
842
+ class SOAPREXMLElementWrap
843
+ def initialize(ele)
844
+ @ele = ele
845
+ end
846
+
847
+ def to_xmlpart
848
+ @ele.to_s
849
+ end
850
+ end
851
+
852
+
853
+ class SOAPArray < XSD::NSDBase
854
+ include SOAPCompoundtype
855
+ include Enumerable
856
+
857
+ public
858
+
859
+ attr_accessor :sparse
860
+
861
+ attr_reader :offset, :rank
862
+ attr_accessor :size, :size_fixed
863
+ attr_reader :arytype
864
+
865
+ def initialize(type = nil, rank = 1, arytype = nil)
866
+ super()
867
+ @type = type || ValueArrayName
868
+ @rank = rank
869
+ @data = Array.new
870
+ @sparse = false
871
+ @offset = Array.new(rank, 0)
872
+ @size = Array.new(rank, 0)
873
+ @size_fixed = false
874
+ @position = nil
875
+ @arytype = arytype
876
+ end
877
+
878
+ def offset=(var)
879
+ @offset = var
880
+ @sparse = true
881
+ end
882
+
883
+ def add(value)
884
+ self[*(@offset)] = value
885
+ end
886
+
887
+ def have_member
888
+ !@data.empty?
889
+ end
890
+
891
+ def [](*idxary)
892
+ if idxary.size != @rank
893
+ raise ArgumentError.new("given #{idxary.size} params does not match rank: #{@rank}")
894
+ end
895
+ retrieve(idxary)
896
+ end
897
+
898
+ def []=(*idxary)
899
+ value = idxary.slice!(-1)
900
+ if idxary.size != @rank
901
+ raise ArgumentError.new("given #{idxary.size} params(#{idxary}) does not match rank: #{@rank}")
902
+ end
903
+ idx = 0
904
+ while idx < idxary.size
905
+ if idxary[idx] + 1 > @size[idx]
906
+ @size[idx] = idxary[idx] + 1
907
+ end
908
+ idx += 1
909
+ end
910
+ data = retrieve(idxary[0, idxary.size - 1])
911
+ data[idxary.last] = value
912
+ if value.is_a?(SOAPType)
913
+ value.elename = ITEM_NAME
914
+ # Sync type
915
+ unless @type.name
916
+ @type = XSD::QName.new(value.type.namespace,
917
+ SOAPArray.create_arytype(value.type.name, @rank))
918
+ end
919
+ value.type ||= @type
920
+ end
921
+ @offset = idxary
922
+ value.parent = self if value.respond_to?(:parent=)
923
+ offsetnext
924
+ end
925
+
926
+ def each
927
+ @data.each do |data|
928
+ yield(data)
929
+ end
930
+ end
931
+
932
+ def to_a
933
+ @data.dup
934
+ end
935
+
936
+ def replace
937
+ @data = deep_map(@data) do |ele|
938
+ yield(ele)
939
+ end
940
+ end
941
+
942
+ def deep_map(ary, &block)
943
+ ary.collect do |ele|
944
+ if ele.is_a?(Array)
945
+ deep_map(ele, &block)
946
+ else
947
+ new_obj = block.call(ele)
948
+ new_obj.elename = ITEM_NAME
949
+ new_obj
950
+ end
951
+ end
952
+ end
953
+
954
+ def include?(var)
955
+ traverse_data(@data) do |v, *rank|
956
+ if v.is_a?(SOAPBasetype) && v.data == var
957
+ return true
958
+ end
959
+ end
960
+ false
961
+ end
962
+
963
+ def traverse
964
+ traverse_data(@data) do |v, *rank|
965
+ unless @sparse
966
+ yield(v)
967
+ else
968
+ yield(v, *rank) if v && !v.is_a?(SOAPNil)
969
+ end
970
+ end
971
+ end
972
+
973
+ def soap2array(ary)
974
+ traverse_data(@data) do |v, *position|
975
+ iteary = ary
976
+ rank = 1
977
+ while rank < position.size
978
+ idx = position[rank - 1]
979
+ if iteary[idx].nil?
980
+ iteary = iteary[idx] = Array.new
981
+ else
982
+ iteary = iteary[idx]
983
+ end
984
+ rank += 1
985
+ end
986
+ if block_given?
987
+ iteary[position.last] = yield(v)
988
+ else
989
+ iteary[position.last] = v
990
+ end
991
+ end
992
+ end
993
+
994
+ def position
995
+ @position
996
+ end
997
+
998
+ private
999
+
1000
+ ITEM_NAME = XSD::QName.new(nil, 'item')
1001
+
1002
+ def retrieve(idxary)
1003
+ data = @data
1004
+ rank = 1
1005
+ while rank <= idxary.size
1006
+ idx = idxary[rank - 1]
1007
+ if data[idx].nil?
1008
+ data = data[idx] = Array.new
1009
+ else
1010
+ data = data[idx]
1011
+ end
1012
+ rank += 1
1013
+ end
1014
+ data
1015
+ end
1016
+
1017
+ def traverse_data(data, rank = 1)
1018
+ idx = 0
1019
+ while idx < ranksize(rank)
1020
+ if rank < @rank and data[idx]
1021
+ traverse_data(data[idx], rank + 1) do |*v|
1022
+ v[1, 0] = idx
1023
+ yield(*v)
1024
+ end
1025
+ else
1026
+ yield(data[idx], idx)
1027
+ end
1028
+ idx += 1
1029
+ end
1030
+ end
1031
+
1032
+ def ranksize(rank)
1033
+ @size[rank - 1]
1034
+ end
1035
+
1036
+ def offsetnext
1037
+ move = false
1038
+ idx = @offset.size - 1
1039
+ while !move && idx >= 0
1040
+ @offset[idx] += 1
1041
+ if @size_fixed
1042
+ if @offset[idx] < @size[idx]
1043
+ move = true
1044
+ else
1045
+ @offset[idx] = 0
1046
+ idx -= 1
1047
+ end
1048
+ else
1049
+ move = true
1050
+ end
1051
+ end
1052
+ end
1053
+
1054
+ def self.decode(elename, type, arytype)
1055
+ typestr, nofary = parse_type(arytype.name)
1056
+ rank = nofary.count(',') + 1
1057
+ plain_arytype = XSD::QName.new(arytype.namespace, typestr)
1058
+ o = SOAPArray.new(type, rank, plain_arytype)
1059
+ size = []
1060
+ nofary.split(',').each do |s|
1061
+ if s.empty?
1062
+ size.clear
1063
+ break
1064
+ else
1065
+ size << s.to_i
1066
+ end
1067
+ end
1068
+ unless size.empty?
1069
+ o.size = size
1070
+ o.size_fixed = true
1071
+ end
1072
+ o.elename = elename
1073
+ o
1074
+ end
1075
+
1076
+ def self.create_arytype(typename, rank)
1077
+ "#{typename}[" << ',' * (rank - 1) << ']'
1078
+ end
1079
+
1080
+ TypeParseRegexp = Regexp.new('^(.+)\[([\d,]*)\]$')
1081
+
1082
+ def self.parse_type(string)
1083
+ TypeParseRegexp =~ string
1084
+ return $1, $2
1085
+ end
1086
+ end
1087
+
1088
+
1089
+ require 'soap/mapping/typeMap'
1090
+
1091
+
1092
+ end
@@ -127,20 +127,20 @@ public
127
127
  end
128
128
  end
129
129
 
130
- # us_ascii = '[\x00-\x7F]'
130
+ # us_ascii = '[\x1-\x7F]'
131
131
  us_ascii = '[\x9\xa\xd\x20-\x7F]' # XML 1.0 restricted.
132
- USASCIIRegexp = Regexp.new("\\A#{us_ascii}*\\z", nil, 'NONE')
132
+ USASCIIRegexp = Regexp.new("\\A#{us_ascii}*\\z")
133
133
 
134
134
  twobytes_euc = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'
135
135
  threebytes_euc = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'
136
136
  character_euc = "(?:#{us_ascii}|#{twobytes_euc}|#{threebytes_euc})"
137
- EUCRegexp = Regexp.new("\\A#{character_euc}*\\z", nil, 'NONE')
137
+ EUCRegexp = Regexp.new("\\A#{character_euc}*\\z", nil, 'n')
138
138
 
139
139
  # onebyte_sjis = '[\x00-\x7F\xA1-\xDF]'
140
140
  onebyte_sjis = '[\x9\xa\xd\x20-\x7F\xA1-\xDF]' # XML 1.0 restricted.
141
141
  twobytes_sjis = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'
142
142
  character_sjis = "(?:#{onebyte_sjis}|#{twobytes_sjis})"
143
- SJISRegexp = Regexp.new("\\A#{character_sjis}*\\z", nil, 'NONE')
143
+ SJISRegexp = Regexp.new("\\A#{character_sjis}*\\z", nil, 'n')
144
144
 
145
145
  # 0xxxxxxx
146
146
  # 110yyyyy 10xxxxxx
@@ -151,7 +151,7 @@ public
151
151
  fourbytes_utf8 = '(?:[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF])'
152
152
  character_utf8 =
153
153
  "(?:#{us_ascii}|#{twobytes_utf8}|#{threebytes_utf8}|#{fourbytes_utf8})"
154
- UTF8Regexp = Regexp.new("\\A#{character_utf8}*\\z", nil, 'NONE')
154
+ UTF8Regexp = Regexp.new("\\A#{character_utf8}*\\z", nil, 'n')
155
155
 
156
156
  def Charset.is_us_ascii(str)
157
157
  USASCIIRegexp =~ str
@@ -0,0 +1,182 @@
1
+ # XSD4R - XML Schema Namespace library
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'xsd/datatypes'
10
+
11
+
12
+ module XSD
13
+
14
+
15
+ class NS
16
+ Namespace = 'http://www.w3.org/XML/1998/namespace'
17
+
18
+ KNOWN_TAG = {
19
+ XSD::Namespace => 'xsd',
20
+ XSD::InstanceNamespace => 'xsi',
21
+ }
22
+
23
+ class Assigner
24
+ attr_reader :known_tag
25
+
26
+ def initialize(known_tag)
27
+ @known_tag = known_tag.dup
28
+ @count = 0
29
+ end
30
+
31
+ def assign(ns)
32
+ if @known_tag.key?(ns)
33
+ return @known_tag[ns]
34
+ end
35
+ @count += 1
36
+ "n#{@count}"
37
+ end
38
+ end
39
+
40
+ attr_reader :default_namespace
41
+
42
+ class FormatError < Error; end
43
+
44
+ public
45
+
46
+ def initialize(tag2ns = nil)
47
+ @tag2ns = tag2ns || ns_default
48
+ @ns2tag = @tag2ns.invert
49
+ @assigner = nil
50
+ @default_namespace = nil
51
+ end
52
+
53
+ def known_tag
54
+ @assigner ||= Assigner.new(default_known_tag)
55
+ @assigner.known_tag
56
+ end
57
+
58
+ def assign(ns, tag = nil)
59
+ if tag == ''
60
+ if ns.empty?
61
+ @default_namespace = nil
62
+ else
63
+ @default_namespace = ns
64
+ end
65
+ tag
66
+ else
67
+ @assigner ||= Assigner.new(default_known_tag)
68
+ tag ||= @assigner.assign(ns)
69
+ @ns2tag[ns] = tag
70
+ @tag2ns[tag] = ns
71
+ tag
72
+ end
73
+ end
74
+
75
+ def assigned?(ns)
76
+ @default_namespace == ns or @ns2tag.key?(ns)
77
+ end
78
+
79
+ def assigned_as_tagged?(ns)
80
+ @ns2tag.key?(ns)
81
+ end
82
+
83
+ def assigned_tag?(tag)
84
+ @tag2ns.key?(tag)
85
+ end
86
+
87
+ def clone_ns
88
+ cloned = self.class.new(@tag2ns.dup)
89
+ cloned.assigner = @assigner
90
+ cloned.assign(@default_namespace, '') if @default_namespace
91
+ cloned
92
+ end
93
+
94
+ def name(qname)
95
+ if qname.namespace == @default_namespace
96
+ qname.name
97
+ elsif tag = @ns2tag[qname.namespace]
98
+ "#{tag}:#{qname.name}"
99
+ else
100
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
101
+ end
102
+ end
103
+
104
+ # no default namespace
105
+ def name_attr(qname)
106
+ if tag = @ns2tag[qname.namespace]
107
+ "#{tag}:#{qname.name}"
108
+ else
109
+ raise FormatError.new("namespace: #{qname.namespace} not defined yet")
110
+ end
111
+ end
112
+
113
+ def compare(ns, name, rhs)
114
+ if (ns == @default_namespace)
115
+ return true if (name == rhs)
116
+ end
117
+ @tag2ns.each do |assigned_tag, assigned_ns|
118
+ if assigned_ns == ns && "#{assigned_tag}:#{name}" == rhs
119
+ return true
120
+ end
121
+ end
122
+ false
123
+ end
124
+
125
+ # $1 and $2 are necessary.
126
+ ParseRegexp = Regexp.new('\A([^:]+)(?::(.+))?\z')
127
+
128
+ def parse(str, local = false)
129
+ if ParseRegexp =~ str
130
+ if (name = $2) and (ns = @tag2ns[$1])
131
+ return XSD::QName.new(ns, name)
132
+ end
133
+ end
134
+ XSD::QName.new(local ? nil : @default_namespace, str)
135
+ end
136
+
137
+ # For local attribute key parsing
138
+ # <foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
139
+ # =>
140
+ # {}bar, {urn:a}baz
141
+ def parse_local(elem)
142
+ ParseRegexp =~ elem
143
+ if $2
144
+ ns = @tag2ns[$1]
145
+ name = $2
146
+ if !ns
147
+ raise FormatError.new("unknown namespace qualifier: #{$1}")
148
+ end
149
+ elsif $1
150
+ ns = nil
151
+ name = $1
152
+ else
153
+ raise FormatError.new("illegal element format: #{elem}")
154
+ end
155
+ XSD::QName.new(ns, name)
156
+ end
157
+
158
+ def each_ns
159
+ @ns2tag.each do |ns, tag|
160
+ yield(ns, tag)
161
+ end
162
+ end
163
+
164
+ protected
165
+
166
+ def assigner=(assigner)
167
+ @assigner = assigner
168
+ end
169
+
170
+ private
171
+
172
+ def ns_default
173
+ {'xml' => Namespace}
174
+ end
175
+
176
+ def default_known_tag
177
+ KNOWN_TAG
178
+ end
179
+ end
180
+
181
+
182
+ end
@@ -19,7 +19,7 @@ module XMLParser
19
19
  module_function :create_parser
20
20
 
21
21
  # $1 is necessary.
22
- NSParseRegexp = Regexp.new('^xmlns:?(.*)$', nil, 'NONE')
22
+ NSParseRegexp = Regexp.new('^xmlns:?(.*)$')
23
23
 
24
24
  def filter_ns(ns, attrs)
25
25
  ns_updated = false
@@ -1,3 +1,3 @@
1
1
  module Yieldmanager
2
- VERSION = "0.9.5"
2
+ VERSION = "0.9.6"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yieldmanager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-05 00:00:00.000000000 Z
12
+ date: 2013-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -102,7 +102,7 @@ files:
102
102
  - .document
103
103
  - .gitignore
104
104
  - .rspec
105
- - .rvmrc
105
+ - .ruby-version
106
106
  - API_VERSION
107
107
  - AVAILABLE_SERVICES
108
108
  - Gemfile
@@ -112,10 +112,12 @@ files:
112
112
  - Rakefile
113
113
  - TODO
114
114
  - lib/patch_detector.rb
115
+ - lib/soap4r_19_patch/soap/baseData.rb
115
116
  - lib/soap4r_19_patch/soap/generator.rb
116
117
  - lib/soap4r_19_patch/soap/property.rb
117
118
  - lib/soap4r_19_patch/xsd/charset.rb
118
119
  - lib/soap4r_19_patch/xsd/iconvcharset.rb
120
+ - lib/soap4r_19_patch/xsd/ns.rb
119
121
  - lib/soap4r_19_patch/xsd/xmlparser.rb
120
122
  - lib/wsdl/patch.rb
121
123
  - lib/yieldmanager.rb
@@ -143,7 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
145
  version: '0'
144
146
  segments:
145
147
  - 0
146
- hash: 348970642592674757
148
+ hash: -1212190755149832978
147
149
  required_rubygems_version: !ruby/object:Gem::Requirement
148
150
  none: false
149
151
  requirements:
@@ -152,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
154
  version: '0'
153
155
  segments:
154
156
  - 0
155
- hash: 348970642592674757
157
+ hash: -1212190755149832978
156
158
  requirements: []
157
159
  rubyforge_project:
158
160
  rubygems_version: 1.8.25
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm 1.9.3