Class: SOAP::SOAPReference

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

Overview

Convenience datatypes.

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, Charset, EleBody, EleBodyName, EleEnvelope, EleEnvelopeName, EleFault, EleFaultActor, EleFaultActorName, EleFaultCode, EleFaultCodeName, EleFaultDetail, EleFaultDetailName, EleFaultName, EleFaultString, EleFaultStringName, EleHeader, EleHeaderName, EncodingNamespace, EnvelopeNamespace, LiteralNamespace, MediaType, NextActor, PropertyName, RPCRouter, RPCServerException, RPCUtils, SOAPGenerator, SOAPProxy, TypeMap, VERSION, ValueArray, ValueArrayName

Instance Attribute Summary collapse

Attributes included from SOAPBasetype

#qualified

Attributes included from SOAPType

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

Attributes inherited from XSD::NSDBase

#type

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SOAPModuleUtils

decode, to_data

Methods included from SOAPType

#inspect, #rootnode

Methods inherited from XSD::NSDBase

inherited, #init, types

Constructor Details

#initialize(obj = nil) ⇒ SOAPReference

Override the definition in SOAPBasetype.



131
132
133
134
135
136
137
# File 'lib/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/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/soap/baseData.rb', line 128

def refid
  @refid
end

Class Method Details

.create_refid(obj) ⇒ Object



180
181
182
# File 'lib/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/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/soap/baseData.rb', line 139

def __getobj__
  @obj
end

#__setobj__(obj) ⇒ Object



143
144
145
146
147
148
149
150
# File 'lib/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/soap/baseData.rb', line 170

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

#refidstrObject



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

def refidstr
  '#' + @refid
end