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
check_wrong_links(file_repo)
click to toggle source
# File lib/minireq/core/document.rb, line 84 def check_wrong_links(file_repo) errors = [] ids = [] file_h = {} file_repo.each do |fn, ra| ids.concat(ra.inject([]){|a, r| a.concat(r.get_ids)}) file_h[fn] = ra.inject([]){|a, r| a.concat(r.get_links)} end file_h.each do |f, la| la.each{|l| errors << "[[#{l}]] in #{f}" unless ids.include?(l)} 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