Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

root/trunk/lib/soap/header/handlerset.rb

Revision 1833, 1.3 kB (checked in by nahi, 2 years ago)
  • let Header::Handler touch SOAPHeader on on_outbound. if a method on_outboud is defined as arity > 0, on_outboud is called with a SOAPHeader as a parameter. otherwise on_bound is called with no parameter as before. closes #354.
  • Property svn:eol-style set to native
  • Property svn:keywords set to author date id revision
Line 
1 # SOAP4R - SOAP Header handler set
2 # Copyright (C) 2000-2007  NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
4 # This program is copyrighted free software by NAKAMURA, Hiroshi.  You can
5 # redistribute it and/or modify it under the same terms of Ruby's license;
6 # either the dual license version in 2003, or any later version.
7
8
9 require 'xsd/namedelements'
10
11
12 module SOAP
13 module Header
14
15
16 class HandlerSet
17   def initialize
18     @store = XSD::NamedElements.new
19   end
20
21   def dup
22     obj = HandlerSet.new
23     obj.store = @store.dup
24     obj
25   end
26
27   def add(handler)
28     @store << handler
29   end
30   alias << add
31
32   def delete(handler)
33     @store.delete(handler)
34   end
35
36   def include?(handler)
37     @store.include?(handler)
38   end
39
40   # returns: Array of SOAPHeaderItem
41   def on_outbound(header)
42     @store.collect { |handler|
43       handler.on_outbound_headeritem(header)
44     }.compact
45   end
46
47   # header: SOAPHeaderItem enumerable object
48   def on_inbound(header)
49     header.each do |name, item|
50       handler = @store.find { |handler|
51         handler.elename == item.element.elename
52       }
53       if handler
54         handler.on_inbound_headeritem(header, item)
55       elsif item.mustunderstand
56         raise UnhandledMustUnderstandHeaderError.new(item.element.elename.to_s)
57       end
58     end
59   end
60
61 protected
62
63   def store=(store)
64     @store = store
65   end
66 end
67
68
69 end
70 end
Note: See TracBrowser for help on using the browser.