troelskn-handsoap 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -149,7 +149,7 @@ Put your service in a file under `app/models`. You should extend `Handsoap::Serv
149
149
 
150
150
  You need to provide the endpoint and the SOAP version (1.1 or 1.2). If in doubt, use version 2.
151
151
 
152
- A service usually has a namespace for describing the message-body ([RPC/Litteral style](http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#N1011F)). You should set this in the `on_create_document` handler.
152
+ A service usually has a namespace for describing the message-body ([RPC/Litteral style](http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/#N1011F)). You should set this in the `on_create_document` handler. Likewise, the response returned *from* the server will contain elements that typically are defined in a single namespace relevant to the service. You can register this in the handler `on_response_document`.
153
153
 
154
154
  A typical service looks like the following:
155
155
 
@@ -158,9 +158,15 @@ A typical service looks like the following:
158
158
 
159
159
  class Example::FooService < Handsoap::Service
160
160
  endpoint EXAMPLE_SERVICE_ENDPOINT
161
- on_create_document do |doc|
162
- doc.alias 'wsdl', "http://example.org/ws/spec"
161
+ def on_create_document(doc)
162
+ # register namespaces for the request
163
+ doc.alias 'tns', "http://example.org/ws/spec"
163
164
  end
165
+ def on_response_document(doc)
166
+ # register namespaces for the response
167
+ doc.add_namespace 'ns', 'http://example.org/ws/spec'
168
+ end
169
+
164
170
  # public methods
165
171
  # todo
166
172
 
@@ -198,10 +204,10 @@ You should use Ruby naming-conventions for methods names. If the method has side
198
204
  Repeat code inside the invoke-block, should be refactored out to *builders*, and the response should be parsed with a *parser*.
199
205
 
200
206
  def update_icon!(icon)
201
- response = invoke("wsdl:UpdateIcon") do |message|
207
+ response = invoke("tns:UpdateIcon") do |message|
202
208
  build_icon!(message, icon)
203
209
  end
204
- parse_icon(response.document.xpath('//icon').first)
210
+ parse_icon(response/"//icon").first)
205
211
  end
206
212
 
207
213
 
@@ -220,7 +226,7 @@ It's recommended that you stick to the following style/naming scheme:
220
226
 
221
227
  # xml -> icon
222
228
  def parse_icon(node)
223
- { :href => node['href'], :type => node['type'] }
229
+ { :href => (node/"@href").to_s, :type => (node/"@type").to_s }
224
230
  end
225
231
 
226
232
  or, if you prefer, you can use a class to represent entities:
@@ -235,8 +241,8 @@ or, if you prefer, you can use a class to represent entities:
235
241
 
236
242
  # xml -> icon
237
243
  def parse_icon(node)
238
- Icon.new :href => node['href'],
239
- :type => node['type']
244
+ Icon.new :href => (node/"@href").to_s,
245
+ :type => (node/"@type").to_s
240
246
  end
241
247
 
242
248
  License
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 4
3
- :patch: 3
3
+ :patch: 4
4
4
  :major: 0
@@ -39,13 +39,13 @@ module Handsoap
39
39
  raise "Missing option :namespace"
40
40
  end
41
41
  ns = { 'env' => options[:namespace] }
42
- fault_code = node.xpath('./env:Code/env:Value/text()', ns).to_s
43
- if fault_code == ""
44
- fault_code = node.xpath('./faultcode/text()', ns).to_s
42
+ fault_code = node.xpath('./env:Code/env:Value', ns).to_s
43
+ unless fault_code
44
+ fault_code = node.xpath('./faultcode', ns).to_s
45
45
  end
46
- reason = node.xpath('./env:Reason/env:Text[1]/text()', ns).to_s
47
- if reason == ""
48
- reason = node.xpath('./faultstring/text()', ns).to_s
46
+ reason = node.xpath('./env:Reason/env:Text[1]', ns).to_s
47
+ unless reason
48
+ reason = node.xpath('./faultstring', ns).to_s
49
49
  end
50
50
  details = node.xpath('./detail/*', ns)
51
51
  self.new(fault_code, reason, details)
@@ -410,7 +410,18 @@ module Handsoap
410
410
  ""
411
411
  end
412
412
 
413
- parts << {:head => head, :body => body.string}
413
+ body.rewind
414
+ parts << {:head => head, :body => body.read(body.size)}
415
+
416
+ # if body.kind_of? ::StringIO
417
+ # parts << {:head => head, :body => body.string}
418
+ # elsif body.kind_of? ::Tempfile
419
+ # body.rewind
420
+ # parts << {:head => head, :body => body.read(body.size)}
421
+ # else
422
+ # raise "body must be StringIO or Tempfile"
423
+ # end
424
+
414
425
  break if buf.size == 0
415
426
  break if content_length == -1
416
427
  end
@@ -28,6 +28,7 @@ module Handsoap
28
28
  require 'rexml/document'
29
29
  elsif driver == :nokogiri
30
30
  require 'nokogiri'
31
+ gem('nokogiri') # work around bug in rubygems for Ruby 1.9
31
32
  if Gem.loaded_specs['nokogiri'].version < Gem::Version.new('1.3.0')
32
33
  raise "Incompatible version of Nokogiri. Please upgrade gem."
33
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: troelskn-handsoap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Troels Knak-Nielsen
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-05 00:00:00 -07:00
12
+ date: 2009-08-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15