Class SOAP::SOAPElement
In: lib/soap/baseData.rb
Parent: Object

SOAPElement is not typed so it is not derived from NSDBase.

Methods

[]   []=   add   add_accessor   add_accessor   add_member   decode   each   from_obj   inspect   key?   members   new   safe_accessor_name   to_elename   to_obj  

Included Modules

Enumerable

External Aliases

text -> data

Attributes

elename  [RW] 
encodingstyle  [RW] 
extraattr  [RW] 
id  [RW] 
parent  [RW] 
position  [RW] 
precedents  [R] 
qualified  [RW] 
root  [RW] 
text  [RW]  Text interface.

Public Class methods

[Source]

     # File lib/soap/baseData.rb, line 610
610:   def self.decode(elename)
611:     o = SOAPElement.new(elename)
612:     o
613:   end

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

Public Instance methods

[Source]

     # 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

[Source]

     # 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.

[Source]

     # File lib/soap/baseData.rb, line 550
550:   def add(value)
551:     add_member(value.elename.name, value)
552:   end

[Source]

     # 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

[Source]

     # File lib/soap/baseData.rb, line 541
541:   def inspect
542:     sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename)
543:   end

[Source]

     # File lib/soap/baseData.rb, line 571
571:   def key?(name)
572:     @array.include?(name)
573:   end

[Source]

     # File lib/soap/baseData.rb, line 575
575:   def members
576:     @array
577:   end

[Source]

     # 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

Private Instance methods

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # File lib/soap/baseData.rb, line 689
689:   def safe_accessor_name(name)
690:     "var_" << name.gsub(/[^a-zA-Z0-9_]/, '')
691:   end

[Validate]