class DependencyBuilder

Attributes

to_s[R]

Public Class Methods

new(s) click to toggle source
# File lib/dependency_builder.rb, line 17
def initialize(s)

  a = LineTree.new(s).to_a
  items = a.flatten.uniq

  h = Hash[items.zip([[]] * items.length)]

  a.each do |x|

    head, *tail = x

    # check each child
    tail.flatten.each {|x2| h[x2]  += [head] }

  end

  # reject items without dependencies
  h2 = h.reject {|k,v| v.empty?}

  h2.keys.each do |item|

    key, _ = h2.find {|x| x[-1].grep(item).any? }

    next unless h2[key]
    index = h2[key].index item
    next unless index
    h2[key][index] = {item => h2[item]}
    h2.delete item
    
  end

  @to_s = treeize(h2)

end

Private Instance Methods

treeize(obj, indent=0) click to toggle source
# File lib/dependency_builder.rb, line 54
def treeize(obj, indent=0)

  case obj
  when Hash

    i = indent + 1
    obj.map {|k,v| '  ' * indent + k + "\n" + treeize(v, i.clone)}.join("\n")

  when Array

    obj.map {|x| treeize(x, indent)}.join("\n")

  else

    '  ' * indent + obj

  end
end