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, 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 SOAPBasetype

#qualified

Attributes included from SOAPType

#definedtype, #elename, #encodingstyle, #extraattr, #force_typed, #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.


134
135
136
137
138
139
140
# File 'lib/soap/baseData.rb', line 134

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…


163
164
165
166
167
168
169
# File 'lib/soap/baseData.rb', line 163

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


131
132
133
# File 'lib/soap/baseData.rb', line 131

def refid
  @refid
end

Class Method Details

.create_refid(obj) ⇒ Object


183
184
185
# File 'lib/soap/baseData.rb', line 183

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

.decode(elename, refidstr) ⇒ Object


187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/soap/baseData.rb', line 187

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


142
143
144
# File 'lib/soap/baseData.rb', line 142

def __getobj__
  @obj
end

#__setobj__(obj) ⇒ Object


146
147
148
149
150
151
152
153
# File 'lib/soap/baseData.rb', line 146

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


173
174
175
176
177
# File 'lib/soap/baseData.rb', line 173

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

#refidstrObject


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

def refidstr
  '#' + @refid
end