class Rubycrap::Coverage

Attributes

coverage[R]
file[R]
filename[R]

Public Class Methods

new(file) click to toggle source
# File lib/rubycrap/coverage.rb, line 8
def initialize(file)
  @file = file
  @filename = file["filename"]
  @coverage = file["coverage"]
  @simplecov_information = []
end

Public Instance Methods

calculate_method_coverage(startline,lastline) click to toggle source
# File lib/rubycrap/coverage.rb, line 53
def calculate_method_coverage(startline,lastline)
  total_lines = lastline-startline
  Rubycrap::logger.debug("Startline #{startline} | Lastline #{lastline} | Total_lines #{total_lines}")
  coveragelinestotal = coverage
  coveragelines = coveragelinestotal.slice(startline-1,total_lines)
  Rubycrap::logger.debug("coveragelines: #{coveragelines}")
  covered_lines = 0
  not_covered_lines = 0
  coveragelines.each do |line|
    if coverage?(line)
      covered_lines += 1
    end
    if (line.to_s.eql? "0")
      not_covered_lines += 1
    end
  end
  valid_total_lines = covered_lines + not_covered_lines
  method_coverage = covered_lines.to_f / valid_total_lines.to_f
  Rubycrap::logger.debug("covered_lines: #{covered_lines}")
  Rubycrap::logger.debug("not_covered_lines: #{not_covered_lines}")
  Rubycrap::logger.debug("method_coverage: #{method_coverage}")
  method_coverage
end
parse_method_coverage() click to toggle source
# File lib/rubycrap/coverage.rb, line 22
def parse_method_coverage
   Parser::CurrentRuby.parse(File.open(filename, "r").read)
end
process_simplecov_file() click to toggle source
# File lib/rubycrap/coverage.rb, line 15
def process_simplecov_file
  Rubycrap::logger.debug(filename)
  ast = parse_method_coverage
  search_methods(ast)
  @simplecov_information
end
search_methods(ast) click to toggle source
# File lib/rubycrap/coverage.rb, line 26
def search_methods(ast)
    if (ast.nil?)
            return nil
    end
    if(!ast.respond_to?(:children))
            return nil
    end
    ast.children.each do |child|
    if(child.class.to_s == "Parser::AST::Node")
    Rubycrap::logger.debug("TYPE AST - #{child.type.to_s}")
    end 
     if(def_method?(child))
        methodname = child.children[0].to_s == "(self)" ? child.children[1].to_s : child.children[0].to_s
        startline = child.loc.line
        lastline = child.loc.last_line
        Rubycrap::logger.debug("\nmethodname: #{methodname}")
        method_coverage = calculate_method_coverage(startline,lastline)
        @simplecov_information << {:name => methodname, 
                                  :coverage => method_coverage , 
                                  :startline => startline, 
                                  :lastline => lastline}
      else
        search_methods(child)
      end
    end
end

Private Instance Methods

coverage?(line) click to toggle source
# File lib/rubycrap/coverage.rb, line 83
def coverage?(line)
  !(line.to_s.eql? "0" or line.to_s.eql? "")
end
def_method?(child) click to toggle source
# File lib/rubycrap/coverage.rb, line 78
def def_method?(child)
  child.class.to_s == "Parser::AST::Node" && 
    (child.type.to_s == "def" or child.type.to_s == "defs")
end