Class: SOAP::SOAPReference

Inherits:
XSD::NSDBase
  • Object
show all
Extended by:
SOAPModuleUtils
Includes:
SOAPBasetype
Defined in:
lib/soap4r_19_patch/soap/baseData.rb

Overview

Convenience datatypes.

Constant Summary

Constants included from SOAP

SOAPGenerator

Instance Attribute Summary collapse

Attributes included from SOAPBasetype

#qualified

Attributes included from SOAPType

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

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SOAPModuleUtils

decode, to_data

Methods included from SOAPType

#inspect, #rootnode

Constructor Details

#initialize(obj = nil) ⇒ SOAPReference

Override the definition in SOAPBasetype.



131
132
133
134
135
136
137
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 131

def initialize(obj = nil)
  super()
  @type = XSD::QName::EMPTY
  @refid = nil
  @obj = nil
  __setobj__(obj) if obj
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(msg_id, *params) ⇒ Object

Why don’t I use delegate.rb? -> delegate requires target object type at initialize time. Why don’t I use forwardable.rb? -> forwardable requires a list of forwarding methods.

ToDo: Maybe I should use forwardable.rb and give it a methods list like delegate.rb…



160
161
162
163
164
165
166
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 160

def method_missing(msg_id, *params)
  if @obj
    @obj.send(msg_id, *params)
  else
    nil
  end
end

Instance Attribute Details

#refidObject

Returns the value of attribute refid.



128
129
130
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 128

def refid
  @refid
end

Class Method Details

.create_refid(obj) ⇒ Object



180
181
182
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 180

def self.create_refid(obj)
  'id' + obj.__id__.to_s
end

.decode(elename, refidstr) ⇒ Object



184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 184

def self.decode(elename, refidstr)
  if /\A#(.*)\z/ =~ refidstr
    refid = $1
  elsif /\Acid:(.*)\z/ =~ refidstr
    refid = $1
  else
    raise ArgumentError.new("illegal refid #{refidstr}")
  end
  d = super(elename)
  d.refid = refid
  d
end

Instance Method Details

#__getobj__Object



139
140
141
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 139

def __getobj__
  @obj
end

#__setobj__(obj) ⇒ Object



143
144
145
146
147
148
149
150
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 143

def __setobj__(obj)
  @obj = obj
  @refid = @obj.id || SOAPReference.create_refid(@obj)
  @obj.id = @refid unless @obj.id
  @obj.precedents << self
  # Copies NSDBase information
  @obj.type = @type unless @obj.type
end

#dataObject

for referenced base type such as a long value from Axis. base2obj requires a node to respond to :data



170
171
172
173
174
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 170

def data
  if @obj.respond_to?(:data)
    @obj.data
  end
end

#refidstrObject



176
177
178
# File 'lib/soap4r_19_patch/soap/baseData.rb', line 176

def refidstr
  '#' + @refid
end