Class: SOAP::SOAPArray
Constant Summary
Constants included
from SOAP
AttrActor, AttrActorName, AttrArrayType, AttrArrayTypeName, AttrEncodingStyle, AttrEncodingStyleName, AttrMustUnderstand, AttrMustUnderstandName, AttrOffset, AttrOffsetName, AttrPosition, AttrPositionName, AttrRoot, AttrRootName, Base64Literal, Charset, EleBody, EleBodyName, EleEnvelope, EleEnvelopeName, EleFault, EleFaultActor, EleFaultActorName, EleFaultCode, EleFaultCodeName, EleFaultDetail, EleFaultDetailName, EleFaultName, EleFaultString, EleFaultStringName, EleHeader, EleHeaderName, EncodingNamespace, EnvelopeNamespace, LiteralNamespace, MediaType, NS, NextActor, PropertyName, RPCRouter, RPCServerException, RPCUtils, SOAPNamespaceTag, SOAPProxy, TypeMap, VERSION, ValueArray, ValueArrayName, XSDNamespaceTag, XSINamespaceTag
Instance Attribute Summary collapse
#qualified
Attributes included from SOAPType
#definedtype, #elename, #encodingstyle, #extraattr, #id, #parent, #precedents, #root
Attributes inherited from XSD::NSDBase
#type
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Enumerable
#inject
Methods included from SOAPType
#inspect, #rootnode
inherited, #init, types
Constructor Details
#initialize(type = nil, rank = 1, arytype = nil) ⇒ SOAPArray
Returns a new instance of SOAPArray.
756
757
758
759
760
761
762
763
764
765
766
767
|
# File 'lib/soap/baseData.rb', line 756
def initialize(type = nil, rank = 1, arytype = nil)
super()
@type = type || ValueArrayName
@rank = rank
@data = Array.new
@sparse = false
@offset = Array.new(rank, 0)
@size = Array.new(rank, 0)
@size_fixed = false
@position = nil
@arytype = arytype
end
|
Instance Attribute Details
Returns the value of attribute arytype.
754
755
756
|
# File 'lib/soap/baseData.rb', line 754
def arytype
@arytype
end
|
Returns the value of attribute offset.
752
753
754
|
# File 'lib/soap/baseData.rb', line 752
def offset
@offset
end
|
Returns the value of attribute rank.
752
753
754
|
# File 'lib/soap/baseData.rb', line 752
def rank
@rank
end
|
Returns the value of attribute size.
753
754
755
|
# File 'lib/soap/baseData.rb', line 753
def size
@size
end
|
#size_fixed ⇒ Object
Returns the value of attribute size_fixed.
753
754
755
|
# File 'lib/soap/baseData.rb', line 753
def size_fixed
@size_fixed
end
|
Returns the value of attribute sparse.
750
751
752
|
# File 'lib/soap/baseData.rb', line 750
def sparse
@sparse
end
|
Class Method Details
.decode(elename, type, arytype) ⇒ Object
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
|
# File 'lib/soap/baseData.rb', line 952
def self.decode(elename, type, arytype)
typestr, nofary = parse_type(arytype.name)
rank = nofary.count(',') + 1
plain_arytype = XSD::QName.new(arytype.namespace, typestr)
o = SOAPArray.new(type, rank, plain_arytype)
size = []
nofary.split(',').each do |s|
if s.empty?
size.clear
break
else
size << s.to_i
end
end
unless size.empty?
o.size = size
o.size_fixed = true
end
o.elename = elename
o
end
|
Instance Method Details
#[](*idxary) ⇒ Object
778
779
780
781
782
783
784
|
# File 'lib/soap/baseData.rb', line 778
def [](*idxary)
if idxary.size != @rank
raise ArgumentError.new("given #{idxary.size} params does not match rank: #{@rank}")
end
retrieve(idxary)
end
|
#[]=(*idxary) ⇒ Object
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
|
# File 'lib/soap/baseData.rb', line 786
def []=(*idxary)
value = idxary.slice!(-1)
if idxary.size != @rank
raise ArgumentError.new("given #{idxary.size} params(#{idxary})" +
" does not match rank: #{@rank}")
end
idx = 0
while idx < idxary.size
if idxary[idx] + 1 > @size[idx]
@size[idx] = idxary[idx] + 1
end
idx += 1
end
data = retrieve(idxary[0, idxary.size - 1])
data[idxary.last] = value
if value.is_a?(SOAPType)
value.elename = ITEM_NAME
unless @type.name
@type = XSD::QName.new(value.type.namespace,
SOAPArray.create_arytype(value.type.name, @rank))
end
value.type ||= @type
end
@offset = idxary
value.parent = self if value.respond_to?(:parent=)
offsetnext
end
|
#add(value) ⇒ Object
774
775
776
|
# File 'lib/soap/baseData.rb', line 774
def add(value)
self[*(@offset)] = value
end
|
#deep_map(ary, &block) ⇒ Object
836
837
838
839
840
841
842
843
844
845
846
|
# File 'lib/soap/baseData.rb', line 836
def deep_map(ary, &block)
ary.collect do |ele|
if ele.is_a?(Array)
deep_map(ele, &block)
else
new_obj = block.call(ele)
new_obj.elename = ITEM_NAME
new_obj
end
end
end
|
820
821
822
823
824
|
# File 'lib/soap/baseData.rb', line 820
def each
@data.each do |data|
yield(data)
end
end
|
#include?(var) ⇒ Boolean
848
849
850
851
852
853
854
855
|
# File 'lib/soap/baseData.rb', line 848
def include?(var)
traverse_data(@data) do |v, *rank|
if v.is_a?(SOAPBasetype) && v.data == var
return true
end
end
false
end
|
888
889
890
|
# File 'lib/soap/baseData.rb', line 888
def position
@position
end
|
830
831
832
833
834
|
# File 'lib/soap/baseData.rb', line 830
def replace
@data = deep_map(@data) do |ele|
yield(ele)
end
end
|
#soap2array(ary) ⇒ Object
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
|
# File 'lib/soap/baseData.rb', line 867
def soap2array(ary)
traverse_data(@data) do |v, *position|
iteary = ary
rank = 1
while rank < position.size
idx = position[rank - 1]
if iteary[idx].nil?
iteary = iteary[idx] = Array.new
else
iteary = iteary[idx]
end
rank += 1
end
if block_given?
iteary[position.last] = yield(v)
else
iteary[position.last] = v
end
end
end
|
826
827
828
|
# File 'lib/soap/baseData.rb', line 826
def to_a
@data.dup
end
|
857
858
859
860
861
862
863
864
865
|
# File 'lib/soap/baseData.rb', line 857
def traverse
traverse_data(@data) do |v, *rank|
unless @sparse
yield(v)
else
yield(v, *rank) if v && !v.is_a?(SOAPNil)
end
end
end
|