Sha256: 217f9ffa55f5b83b55a580a1ffd3a2abb8ee2387d0013c668bbe1332c07c723e

Contents?: true

Size: 966 Bytes

Versions: 2

Compression:

Stored size: 966 Bytes

Contents

module Kludge
  class Parts
    include Enumerable

    def initialize
      @parts = []
    end

    def each
      @parts.each do |part|
        yield part
      end
    end

    def save
      graph.each do |root|
        root.save
      end
    end

    def valid?
      graph.map do |root|
        root.valid?
      end.all?
    end
    
    def names
      @parts.map(&:name)
    end

    def <<(part)
      @parts << part
    end

    def graph
      @graph ||= begin
        leaves.map { |leaf|
          assign_family(leaf)
        }.uniq
      end
    end

    def assign_family(node)
      parent = @parts.detect { |part| part.name == node.dependency }
      return node unless parent
      node.parent = parent
      parent.children << node
      assign_family(parent)
    end

    def leaves
      leaves = @parts.dup
      @parts.each do |part|
        leaves.delete_if { |leaf| leaf.name == part.dependency }
      end
      leaves
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
kludge-0.0.2 lib/kludge/parts.rb
kludge-0.0.1 lib/kludge/parts.rb