Class: SOAP::SOAPArray

Inherits:
XSD::NSDBase show all
Includes:
Enumerable, SOAPCompoundtype
Defined in:
lib/soap/baseData.rb

Constant Summary

Constants included from SOAP

AttrActor, AttrActorName, AttrArrayType, AttrArrayTypeName, AttrEncodingStyle, AttrEncodingStyleName, AttrHref, AttrHrefName, AttrId, AttrIdName, AttrMustUnderstand, AttrMustUnderstandName, AttrOffset, AttrOffsetName, AttrPosition, AttrPositionName, AttrRoot, AttrRootName, Base64Literal, EleBody, EleBodyName, EleEnvelope, EleEnvelopeName, EleFault, EleFaultActor, EleFaultActorName, EleFaultCode, EleFaultCodeName, EleFaultDetail, EleFaultDetailName, EleFaultName, EleFaultString, EleFaultStringName, EleHeader, EleHeaderName, EncodingNamespace, EnvelopeNamespace, LiteralNamespace, MediaType, NextActor, PropertyName, SOAPNamespaceTag, SOAPProxy, TypeMap, ValueArray, ValueArrayName, Version, XSDNamespaceTag, XSINamespaceTag

Instance Attribute Summary collapse

Attributes included from SOAPCompoundtype

#qualified

Attributes included from SOAPType

#definedtype, #elename, #encodingstyle, #extraattr, #force_typed, #id, #parent, #precedents, #root

Attributes inherited from XSD::NSDBase

#type

Instance Method Summary collapse

Methods included from SOAPType

#inspect, #rootnode

Methods inherited from XSD::NSDBase

inherited, #init, types

Constructor Details

#initialize(type = nil, rank = 1, arytype = nil) ⇒ SOAPArray

Returns a new instance of SOAPArray.



868
869
870
871
872
873
874
875
876
877
878
879
# File 'lib/soap/baseData.rb', line 868

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

#arytypeObject (readonly)

Returns the value of attribute arytype.



866
867
868
# File 'lib/soap/baseData.rb', line 866

def arytype
  @arytype
end

#offsetObject

Returns the value of attribute offset.



864
865
866
# File 'lib/soap/baseData.rb', line 864

def offset
  @offset
end

#rankObject (readonly)

Returns the value of attribute rank.



864
865
866
# File 'lib/soap/baseData.rb', line 864

def rank
  @rank
end

#sizeObject

Returns the value of attribute size.



865
866
867
# File 'lib/soap/baseData.rb', line 865

def size
  @size
end

#size_fixedObject

Returns the value of attribute size_fixed.



865
866
867
# File 'lib/soap/baseData.rb', line 865

def size_fixed
  @size_fixed
end

#sparseObject

Returns the value of attribute sparse.



862
863
864
# File 'lib/soap/baseData.rb', line 862

def sparse
  @sparse
end

Instance Method Details

#[](*idxary) ⇒ Object



894
895
896
897
898
899
# File 'lib/soap/baseData.rb', line 894

def [](*idxary)
  if idxary.size != @rank
    raise ArgumentError.new("given #{idxary.size} params does not match rank: #{@rank}")
  end
  retrieve(idxary)
end

#[]=(*idxary) ⇒ Object



901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
# File 'lib/soap/baseData.rb', line 901

def []=(*idxary)
  value = idxary.slice!(-1)
  @item_name = value.type.name.sub("Type","") # added by Hajer  - 2-Nov-2011
  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 #  commented by Hajer  - 2-Nov-2011
    value.elename = XSD::QName.new(nil, @item_name) # added by Hajer  - 2-Nov-2011
    # Sync type
    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



886
887
888
# File 'lib/soap/baseData.rb', line 886

def add(value)
  self[*(@offset)] = value
end

#deep_map(ary, &block) ⇒ Object



947
948
949
950
951
952
953
954
955
956
957
# File 'lib/soap/baseData.rb', line 947

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

#eachObject



931
932
933
934
935
# File 'lib/soap/baseData.rb', line 931

def each
  @data.each do |data|
    yield(data)
  end
end

#have_memberObject



890
891
892
# File 'lib/soap/baseData.rb', line 890

def have_member
  !@data.empty?
end

#include?(var) ⇒ Boolean

Returns:

  • (Boolean)


959
960
961
962
963
964
965
966
# File 'lib/soap/baseData.rb', line 959

def include?(var)
  traverse_data(@data) do |v, *rank|
    if v.is_a?(SOAPBasetype) && v.data == var
	return true
    end
  end
  false
end

#positionObject



999
1000
1001
# File 'lib/soap/baseData.rb', line 999

def position
  @position
end

#replaceObject



941
942
943
944
945
# File 'lib/soap/baseData.rb', line 941

def replace
  @data = deep_map(@data) do |ele|
    yield(ele)
  end
end

#soap2array(ary) ⇒ Object



978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
# File 'lib/soap/baseData.rb', line 978

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

#to_aObject



937
938
939
# File 'lib/soap/baseData.rb', line 937

def to_a
  @data.dup
end

#traverseObject



968
969
970
971
972
973
974
975
976
# File 'lib/soap/baseData.rb', line 968

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