class CodeScanner

Attributes

scan_array[R]

Public Class Methods

array_range() click to toggle source
# File lib/models/utils/codescanner.rb, line 48
def self.array_range
  find_begin_range
  return false unless find_end_range
  @scan_array[@begin_scan+1..@end_scan-1].join
end
find_begin_range() click to toggle source
# File lib/models/utils/codescanner.rb, line 22
def self.find_begin_range
  @scan_array.each_with_index do |line, index|
    if line.include?('<snip>') || line.include?('<$>')
      find_title(index)
      @line = index+1
      strip_snip_tag(index)
      return @begin_scan = index
    end
  end
  return false
end
find_end_range() click to toggle source
# File lib/models/utils/codescanner.rb, line 34
def self.find_end_range
  @scan_array.each_with_index do |line, index|
    if line.include?('<snip>') || line.include?('<$>') #mismatch before closing tag
      return false
    end
    if line.include?('</snip>') || line.include?('</$>')
      strip_snip_tag(index)
      index
      return @end_scan = index
    end
  end
  return false
end
find_title(index) click to toggle source
# File lib/models/utils/codescanner.rb, line 61
def self.find_title(index)
  matches = @scan_array[index].match(/(<snip>|<\$>)(.+)/)
  if matches
    @title = matches[2].strip.chomp('-->')
  end
  @title
end
run(scan_array, filename) click to toggle source
# File lib/models/utils/codescanner.rb, line 9
def self.run(scan_array, filename)
  @scan_array = scan_array
  while @scan_array.join.include?('<snip>') || @scan_array.join.include?('<$>')
    code = array_range
    if code
      Snippet.new(code: code, title: @title, line: @line, filename: filename)
    else
      return {filename: filename, line: @line} #in case of mismatch
    end
  end
  return nil
end
strip_snip_tag(index) click to toggle source
# File lib/models/utils/codescanner.rb, line 54
def self.strip_snip_tag(index)
  @scan_array[index].sub!(/<snip>/,'<*snip*>')
  @scan_array[index].sub!(/<\/snip>/,'</*snip*>')
  @scan_array[index].sub!(/<\$>/,'<*$*>')
  @scan_array[index].sub!(/<\/\$>/,'</*$*>')
end