class Wasabi::Document
Wasabi::Document
¶ ↑
Represents a WSDL document.
Constants
- ELEMENT_FORM_DEFAULTS
Attributes
Sets the SOAP endpoint.
Sets the target namespace.
Public Class Methods
Accepts a WSDL document
to parse.
# File lib/wasabi/document.rb, line 26 def initialize(document = nil, adapter = nil) self.document = document self.adapter = adapter end
Validates if a given value
is a valid elementFormDefault value. Raises an ArgumentError
if the value is not valid.
# File lib/wasabi/document.rb, line 18 def self.validate_element_form_default!(value) return if ELEMENT_FORM_DEFAULTS.include?(value) raise ArgumentError, "Invalid value for elementFormDefault: #{value}\n" + "Must be one of: #{ELEMENT_FORM_DEFAULTS.inspect}" end
Public Instance Methods
Returns the value of elementFormDefault.
# File lib/wasabi/document.rb, line 54 def element_form_default @element_form_default ||= document ? parser.element_form_default : :unqualified end
Sets the elementFormDefault value.
# File lib/wasabi/document.rb, line 59 def element_form_default=(value) self.class.validate_element_form_default!(value) @element_form_default = value end
Returns the SOAP endpoint.
# File lib/wasabi/document.rb, line 38 def endpoint @endpoint ||= parser.endpoint end
Returns the target namespace.
# File lib/wasabi/document.rb, line 46 def namespace @namespace ||= parser.namespace end
Returns a list of input parameters for a given key
.
# File lib/wasabi/document.rb, line 98 def operation_input_parameters(key) parser.operations[key][:parameters] if operations[key] end
Returns a map of SOAP operations.
# File lib/wasabi/document.rb, line 80 def operations @operations ||= parser.operations end
Parses the WSDL document and returns the Wasabi::Parser
.
# File lib/wasabi/document.rb, line 152 def parser @parser ||= guard_parse && parse end
Returns the service name.
# File lib/wasabi/document.rb, line 85 def service_name @service_name ||= parser.service_name end
Returns the SOAP action for a given key
.
# File lib/wasabi/document.rb, line 70 def soap_action(key) operations[key][:action] if operations[key] end
Returns a list of parameter names for a given key
# File lib/wasabi/document.rb, line 92 def soap_action_parameters(key) params = operation_input_parameters(key) params.keys if params end
Returns a list of available SOAP actions.
# File lib/wasabi/document.rb, line 65 def soap_actions @soap_actions ||= parser.operations.keys end
Returns the SOAP input for a given key
.
# File lib/wasabi/document.rb, line 75 def soap_input(key) operations[key][:input] if operations[key] end
# File lib/wasabi/document.rb, line 120 def type_definitions @type_definitions ||= begin result = [] parser.types.each do |ns, types| types.each do |type, info| element_keys(info).each do |field| field_type = info[field][:type] tag, namespace = field_type.split(":").reverse result << [[type, field], tag] if user_defined(namespace) end end end if document result end end
# File lib/wasabi/document.rb, line 102 def type_namespaces @type_namespaces ||= begin namespaces = [] parser.types.each do |ns, types| types.each do |type, info| namespaces << [[type], info[:namespace]] element_keys(info).each do |field| namespaces << [[type, field], info[:namespace]] end end end if document namespaces end end
Returns whether the given namespace
was defined manually.
# File lib/wasabi/document.rb, line 140 def user_defined(namespace) uri = parser.namespaces[namespace] !(uri =~ %r{^http://schemas.xmlsoap.org} || uri =~ %r{^http://www.w3.org}) end
Returns the raw WSDL document. Can be used as a hook to extend the library.
# File lib/wasabi/document.rb, line 147 def xml @xml ||= Resolver.new(document, request, adapter).resolve end
Private Instance Methods
# File lib/wasabi/document.rb, line 171 def element_keys(info) info.keys - [:namespace, :order!, :base_type] end
Raises an error if the WSDL document is missing.
# File lib/wasabi/document.rb, line 159 def guard_parse return true if document raise ArgumentError, "Wasabi needs a WSDL document" end
Parses the WSDL document and returns Wasabi::Parser
.
# File lib/wasabi/document.rb, line 165 def parse parser = Parser.new Nokogiri::XML(xml) parser.parse parser end