In: |
soap/baseData.rb
|
Parent: | XSD::NSDBase |
TypeParseRegexp | = | Regexp.new('^(.+)\[([\d,]*)\]$') |
arytype | [R] | |
offset | [R] | |
rank | [R] | |
size | [RW] | |
size_fixed | [RW] | |
sparse | [RW] |
Module function
# File soap/baseData.rb, line 740 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
# File soap/baseData.rb, line 553 def initialize(type = nil, rank = 1, arytype = nil) super(type || XSD::QName.new) @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
# File soap/baseData.rb, line 574 def [](*idxary) if idxary.size != @rank raise ArgumentError.new("Given #{ idxary.size } params does not match rank: #{ @rank }") end retrieve(idxary) end
# File soap/baseData.rb, line 582 def []=(*idxary) value = idxary.slice!(-1) if idxary.size != @rank raise ArgumentError.new("Given #{ idxary.size } params(#{ idxary }) does not match rank: #{ @rank }") end for i in 0..(idxary.size - 1) if idxary[i] + 1 > @size[i] @size[i] = idxary[i] + 1 end end data = retrieve(idxary[0, idxary.size - 1]) data[idxary.last] = value if value.is_a?(SOAPType) value.elename = value.elename.dup_name('item') # Sync type unless @type.name @type = XSD::QName.new(value.type.namespace, SOAPArray.create_arytype(value.type.name, @rank)) end unless value.type value.type = @type end end @offset = idxary offsetnext end
# File soap/baseData.rb, line 632 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 = new_obj.elename.dup_name('item') new_obj end end end
# File soap/baseData.rb, line 644 def include?(var) traverse_data(@data) do |v, *rank| if v.is_a?(SOAPBasetype) && v.data == var return true end end false end
# File soap/baseData.rb, line 663 def soap2array(ary) traverse_data(@data) do |v, *position| iteary = ary for rank in 1..(position.size - 1) idx = position[rank - 1] if iteary[idx].nil? iteary = iteary[idx] = Array.new else iteary = iteary[idx] end end if block_given? iteary[position.last] = yield(v) else iteary[position.last] = v end end end