Sha256: 01314e4f2228d87c6fe1b58d4c1e947f199054490c2da1321ee4508ef19fc69e

Contents?: true

Size: 1.05 KB

Versions: 4

Compression:

Stored size: 1.05 KB

Contents

require 'pact_broker/models/group'

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

module PactBroker

  module Functions

    class Groupify

      def self.call relationships
        recurse_groups([], relationships.dup).collect{ | group | Models::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

4 entries across 4 versions & 1 rubygems

Version Path
pact_broker-1.3.1 lib/pact_broker/functions/groupify.rb
pact_broker-1.3.0 lib/pact_broker/functions/groupify.rb
pact_broker-1.2.0 lib/pact_broker/functions/groupify.rb
pact_broker-1.1.0 lib/pact_broker/functions/groupify.rb