class Scaffolder::Tool::Validate

Public Class Methods

description() click to toggle source
# File lib/scaffolder/tool/validate.rb, line 7
def self.description
  "Validate scaffold for overlapping inserts"
end
inserts_overlap?(a,b) click to toggle source
# File lib/scaffolder/tool/validate.rb, line 37
def self.inserts_overlap?(a,b)
  ! (a.position.to_a & b.position.to_a).empty?
end
sequence_errors(sequence) click to toggle source
# File lib/scaffolder/tool/validate.rb, line 41
def self.sequence_errors(sequence)
  sequence.inserts.inject(Array.new) do |errors,a|
    sequence.inserts.each do |b|
      next if a.equal?(b)
      errors << [a,b].sort if inserts_overlap?(a,b)
    end
    errors
  end.uniq
end

Public Instance Methods

errors() click to toggle source
# File lib/scaffolder/tool/validate.rb, line 32
def errors
  sequences = scaffold.select{|i| i.entry_type == :sequence}
  sequences.reject{|i| self.class.sequence_errors(i).empty? }
end
execute() click to toggle source
# File lib/scaffolder/tool/validate.rb, line 11
def execute
  bad_sequences = errors
  return if bad_sequences.empty?

  output = bad_sequences.inject(Array.new) do |array, sequence|
    self.class.sequence_errors(sequence).each do |overlaps|
      array << {'sequence-insert-overlap' => {
        'source' => sequence.source,
        'inserts' => overlaps.map do |overlap|
          {'open'  => overlap.open,
          'close'  => overlap.close,
          'source' => overlap.source}
        end
      }}
    end
    array
  end

  YAML.dump(output)
end