/tools/Ruby/lib/ruby/1.8/soap/header/handlerset.rb

http://github.com/agross/netopenspace · Ruby · 70 lines · 46 code · 17 blank · 7 comment · 2 complexity · 027b7f00f741c56c07a496648284ba7f MD5 · raw file

  1. # SOAP4R - SOAP Header handler set
  2. # Copyright (C) 2003, 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
  3. # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
  4. # redistribute it and/or modify it under the same terms of Ruby's license;
  5. # either the dual license version in 2003, or any later version.
  6. require 'xsd/namedelements'
  7. module SOAP
  8. module Header
  9. class HandlerSet
  10. def initialize
  11. @store = XSD::NamedElements.new
  12. end
  13. def dup
  14. obj = HandlerSet.new
  15. obj.store = @store.dup
  16. obj
  17. end
  18. def add(handler)
  19. @store << handler
  20. end
  21. alias << add
  22. def delete(handler)
  23. @store.delete(handler)
  24. end
  25. def include?(handler)
  26. @store.include?(handler)
  27. end
  28. # returns: Array of SOAPHeaderItem
  29. def on_outbound
  30. @store.collect { |handler|
  31. handler.on_outbound_headeritem
  32. }.compact
  33. end
  34. # headers: SOAPHeaderItem enumerable object
  35. def on_inbound(headers)
  36. headers.each do |name, item|
  37. handler = @store.find { |handler|
  38. handler.elename == item.element.elename
  39. }
  40. if handler
  41. handler.on_inbound_headeritem(item)
  42. elsif item.mustunderstand
  43. raise UnhandledMustUnderstandHeaderError.new(item.element.elename.to_s)
  44. end
  45. end
  46. end
  47. protected
  48. def store=(store)
  49. @store = store
  50. end
  51. end
  52. end
  53. end