Sha256: 35795aeacad2e7416dea7879650f7b703f27126976e055f5c422f53f6849fdf3

Contents?: true

Size: 1.06 KB

Versions: 7

Compression:

Stored size: 1.06 KB

Contents

require 'pact_broker/domain/group'

=begin
  Splits all relationships up into groups of non-connecting relationships.
=end

module PactBroker

  module Relationships

    class Groupify

      def self.call relationships
        recurse_groups([], relationships.dup).collect{ | group | Domain::Group.new(group) }
      end

      def self.recurse_groups groups, relationship_pool
        if relationship_pool.empty?
          groups
        else
          first, *rest = *relationship_pool
          group = recurse first, rest
          recurse_groups(groups + [group], relationship_pool - group)
        end
      end

      def self.recurse relationship, relationship_pool
        connected_relationships = relationship_pool.select{ | candidate| candidate.connected?(relationship) }
        if connected_relationships.empty?
          [relationship]
        else
          ([relationship] + connected_relationships.map{| connected_relationship| recurse(connected_relationship, relationship_pool - connected_relationships)}.flatten).uniq
        end
      end

    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pact_broker-1.9.0 lib/pact_broker/relationships/groupify.rb
pact_broker-1.9.0.rc1 lib/pact_broker/relationships/groupify.rb
pact_broker-1.8.1 lib/pact_broker/relationships/groupify.rb
pact_broker-1.8.0 lib/pact_broker/relationships/groupify.rb
pact_broker-1.7.0 lib/pact_broker/relationships/groupify.rb
pact_broker-1.6.0 lib/pact_broker/relationships/groupify.rb
pact_broker-1.5.0 lib/pact_broker/relationships/groupify.rb