class Minireq::Core::Document

Public Class Methods

new() click to toggle source
# File lib/minireq/core/document.rb, line 27
def initialize
  @items = []
end

Public Instance Methods

check_errors(file_repo) click to toggle source
# File lib/minireq/core/document.rb, line 41
def check_errors(file_repo)
  errors = {}
  nonuniq_ids = check_nonuniq_ids(file_repo)
  wrong_links = check_wrong_links(file_repo)
  errors[:nonuniq_ids] = nonuniq_ids unless nonuniq_ids.empty?
  errors[:wrong_links] = wrong_links unless wrong_links.empty?
  errors
end
check_nonuniq_ids(file_repo) click to toggle source

Detect duplicates of requirements id in file repository @param requiements [Hash<FileName, Array<Requirements>]

# File lib/minireq/core/document.rb, line 52
def check_nonuniq_ids(file_repo)
  file_h = {}
  # transform [Hash<FileName, Array<Requirements>]
  #        to [Hash<FileName, Array<id>]
  # TODO rewrite through get_ids
  file_repo.each do |fn, ra|
    file_h[fn] = ra.inject([]){|a, r| a.concat(r.get_ids)}
  end

  # transform Hash<FileName, Array<id>
  #        to Hash<id, Array<FileName>>
  ids = {}
  errors = []
  file_h.each do |f, a|
     dup_single = a.select{|i| a.count(i) > 1 }.uniq
     dup_single.each{|i| errors << "[#{i}] in '#{f}'"}
     a.each do |i|
       ids[i] ||= []
       ids[i] << f
     end
  end

  ids.each_key do |i|
    ids[i].uniq!
    if ids[i].size > 1
      files = ids[i].map{|f| "'#{f}'"}.join(', ')
      errors << "[#{i}] in #{files}"
    end
  end
  errors
end
find(id) click to toggle source
# File lib/minireq/core/document.rb, line 99
def find(id)
  visit { |n| return n if n.id.eql?(id) }
  nil
end
get_ids() click to toggle source
# File lib/minireq/core/document.rb, line 104
def get_ids
  @items.inject([]){|a, r| a.concat(r.get_ids)}
end
hierarchize() click to toggle source

Put requirements in right hierarchy through parent

# File lib/minireq/core/document.rb, line 115
def hierarchize
  nodes_h = {}
  child_a = []
  # put all nodes to hash
  visit do |n|
    nodes_h[n.id] = n
    child_a << n unless n.attributes[:parent].nil?
  end

  child_a.each do |child|
    parent_id = child.attributes[:parent]
    parent_node = nodes_h[parent_id]
    if parent_node.nil?
      puts "Load error! Parent '#{parent_id}' not found."
      next
    end
    child.parent = parent_node
    parent_node.items << child
    @items.delete(child)
  end
end
load() click to toggle source

read all requirement files from work directory and place to @root

# File lib/minireq/core/document.rb, line 32
def load
  # [Hash<FileName, Array<Requirements>]
  file_repo = read_requirement_files
  @items = file_repo.values.inject([]) {|a, i| a.concat(i)}
  hierarchize
  visit{|r| r.sort_childs}
  return []
end
visit(&block) click to toggle source

visit all requirement hierarchy

# File lib/minireq/core/document.rb, line 109
def visit(&block)
  return unless block_given?
  @items.each { |r| r.visit(&block) }
end