| Class | SOAP::SOAPElement |
| In: |
lib/soap/baseData.rb
|
| Parent: | Object |
SOAPElement is not typed so it is not derived from NSDBase.
| text | -> | data |
| elename | [RW] | |
| encodingstyle | [RW] | |
| extraattr | [RW] | |
| id | [RW] | |
| parent | [RW] | |
| position | [RW] | |
| precedents | [R] | |
| qualified | [RW] | |
| root | [RW] | |
| text | [RW] | Text interface. |
# File lib/soap/baseData.rb, line 610
610: def self.decode(elename)
611: o = SOAPElement.new(elename)
612: o
613: end
# File lib/soap/baseData.rb, line 615
615: def self.from_obj(obj, namespace = nil)
616: o = SOAPElement.new(nil)
617: case obj
618: when nil
619: o.text = nil
620: when Hash
621: obj.each do |elename, value|
622: if value.is_a?(Array)
623: value.each do |subvalue|
624: child = from_obj(subvalue, namespace)
625: child.elename = to_elename(elename, namespace)
626: o.add(child)
627: end
628: else
629: child = from_obj(value, namespace)
630: child.elename = to_elename(elename, namespace)
631: o.add(child)
632: end
633: end
634: else
635: o.text = obj.to_s
636: end
637: o
638: end
# File lib/soap/baseData.rb, line 521
521: def initialize(elename, text = nil)
522: if !elename.is_a?(XSD::QName)
523: elename = XSD::QName.new(nil, elename)
524: end
525: @encodingstyle = LiteralNamespace
526: @elename = elename
527: @id = nil
528: @precedents = []
529: @root = false
530: @parent = nil
531: @position = nil
532: @extraattr = {}
533:
534: @qualified = nil
535:
536: @array = []
537: @data = []
538: @text = text
539: end
# File lib/soap/baseData.rb, line 640
640: def self.to_elename(obj, namespace = nil)
641: if obj.is_a?(XSD::QName)
642: obj
643: elsif /\A(.+):([^:]+)\z/ =~ obj.to_s
644: XSD::QName.new($1, $2)
645: else
646: XSD::QName.new(namespace, obj.to_s)
647: end
648: end
# File lib/soap/baseData.rb, line 554
554: def [](idx)
555: if @array.include?(idx)
556: @data[@array.index(idx)]
557: else
558: nil
559: end
560: end
# File lib/soap/baseData.rb, line 562
562: def []=(idx, data)
563: if @array.include?(idx)
564: data.parent = self if data.respond_to?(:parent=)
565: @data[@array.index(idx)] = data
566: else
567: add(data)
568: end
569: end
Element interfaces.
# File lib/soap/baseData.rb, line 550
550: def add(value)
551: add_member(value.elename.name, value)
552: end
# File lib/soap/baseData.rb, line 602
602: def each
603: idx = 0
604: while idx < @array.length
605: yield(@array[idx], @data[idx])
606: idx += 1
607: end
608: end
# File lib/soap/baseData.rb, line 541
541: def inspect
542: sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename)
543: end
# File lib/soap/baseData.rb, line 579
579: def to_obj
580: if members.empty?
581: @text
582: else
583: hash = {}
584: proptype = {}
585: each do |k, v|
586: value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s
587: case proptype[k]
588: when :single
589: hash[k] = [hash[k], value]
590: proptype[k] = :multi
591: when :multi
592: hash[k] << value
593: else
594: hash[k] = value
595: proptype[k] = :single
596: end
597: end
598: hash
599: end
600: end
# File lib/soap/baseData.rb, line 661
661: def add_accessor(name)
662: methodname = name
663: if self.respond_to?(methodname)
664: methodname = safe_accessor_name(methodname)
665: end
666: Mapping.define_singleton_method(self, methodname) do
667: @data[@array.index(name)]
668: end
669: Mapping.define_singleton_method(self, methodname + '=') do |value|
670: @data[@array.index(name)] = value
671: end
672: end
# File lib/soap/baseData.rb, line 674
674: def add_accessor(name)
675: methodname = safe_accessor_name(name)
676: instance_eval "def \#{methodname}\n@data[@array.index(\#{name.dump})]\nend\n\ndef \#{methodname}=(value)\n@data[@array.index(\#{name.dump})] = value\nend\n"
677: end
# File lib/soap/baseData.rb, line 652
652: def add_member(name, value)
653: add_accessor(name)
654: @array.push(name)
655: @data.push(value)
656: value.parent = self if value.respond_to?(:parent=)
657: value
658: end