Sha256: ad962835b3734851ecb240ffba1a504900a8d818a397eefc06ff08633fe640cf

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

require 'uri'

class Sekken
  class WSDL
    class DocumentCollection
      include Enumerable

      def initialize
        @documents = []
      end

      def <<(document)
        @documents << document
      end

      def each(&block)
        @documents.each(&block)
      end

      def service_name
        @service_name ||= first.service_name
      end

      def messages
        @messages ||= collect_sections { |document| document.messages }
      end

      def port_types
        @port_types ||= collect_sections { |document| document.port_types }
      end

      def bindings
        @bindings ||= collect_sections { |document| document.bindings }
      end

      def services
        @services ||= collect_sections { |document| document.services }
      end

      # Public: Returns a port by service and port name.
      def service_port(service_name, port_name)
        service = services.fetch(service_name)
        service.ports.fetch(port_name)
      end

      private

      def collect_sections
        result = {}

        each do |document|
          sections = yield document
          result.merge! sections
        end

        result
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sekken-0.3.0 lib/sekken/wsdl/document_collection.rb
sekken-0.2.0 lib/sekken/wsdl/document_collection.rb
sekken-0.1.0 lib/sekken/wsdl/document_collection.rb