class SOAP::SOAPArray
Constants
- ITEM_NAME
- TypeParseRegexp
Attributes
arytype[R]
offset[R]
rank[R]
size[RW]
size_fixed[RW]
sparse[RW]
Public Class Methods
new(type = nil, rank = 1, arytype = nil)
click to toggle source
Calls superclass method
SOAP::SOAPCompoundtype::new
# 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
Private Class Methods
create_arytype(typename, rank)
click to toggle source
# File lib/soap/baseData.rb, line 1079 def self.create_arytype(typename, rank) "#{typename}[" << ',' * (rank - 1) << ']' end
decode(elename, type, arytype)
click to toggle source
# File lib/soap/baseData.rb, line 1057 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
parse_type(string)
click to toggle source
# File lib/soap/baseData.rb, line 1085 def self.parse_type(string) TypeParseRegexp =~ string return $1, $2 end
Public Instance Methods
[](*idxary)
click to toggle source
# 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)
click to toggle source
# File lib/soap/baseData.rb, line 901 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 # 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)
click to toggle source
# File lib/soap/baseData.rb, line 886 def add(value) self[*(@offset)] = value end
deep_map(ary, &block)
click to toggle source
# File lib/soap/baseData.rb, line 945 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
each() { |data| ... }
click to toggle source
# File lib/soap/baseData.rb, line 929 def each @data.each do |data| yield(data) end end
have_member()
click to toggle source
# File lib/soap/baseData.rb, line 890 def have_member !@data.empty? end
include?(var)
click to toggle source
# File lib/soap/baseData.rb, line 957 def include?(var) traverse_data(@data) do |v, *rank| if v.is_a?(SOAPBasetype) && v.data == var return true end end false end
offset=(var)
click to toggle source
# File lib/soap/baseData.rb, line 881 def offset=(var) @offset = var @sparse = true end
position()
click to toggle source
# File lib/soap/baseData.rb, line 997 def position @position end
replace() { |ele| ... }
click to toggle source
# File lib/soap/baseData.rb, line 939 def replace @data = deep_map(@data) do |ele| yield(ele) end end
soap2array(ary) { |v| ... }
click to toggle source
# File lib/soap/baseData.rb, line 976 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_a()
click to toggle source
# File lib/soap/baseData.rb, line 935 def to_a @data.dup end
traverse() { |v| ... }
click to toggle source
# File lib/soap/baseData.rb, line 966 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
Private Instance Methods
offsetnext()
click to toggle source
# File lib/soap/baseData.rb, line 1039 def offsetnext move = false idx = @offset.size - 1 while !move && idx >= 0 @offset[idx] += 1 if @size_fixed if @offset[idx] < @size[idx] move = true else @offset[idx] = 0 idx -= 1 end else move = true end end end
ranksize(rank)
click to toggle source
# File lib/soap/baseData.rb, line 1035 def ranksize(rank) @size[rank - 1] end
retrieve(idxary)
click to toggle source
# File lib/soap/baseData.rb, line 1005 def retrieve(idxary) data = @data rank = 1 while rank <= idxary.size idx = idxary[rank - 1] if data[idx].nil? data = data[idx] = Array.new else data = data[idx] end rank += 1 end data end
traverse_data(data, rank = 1) { |*v| ... }
click to toggle source
# File lib/soap/baseData.rb, line 1020 def traverse_data(data, rank = 1) idx = 0 while idx < ranksize(rank) if rank < @rank and data[idx] traverse_data(data[idx], rank + 1) do |*v| v[1, 0] = idx yield(*v) end else yield(data[idx], idx) end idx += 1 end end