Class: Coverfield::Source::Class

Inherits:
Object
  • Object
show all
Defined in:
lib/coverfield/source/class.rb

Overview

Represents a class within a source file

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(class_name, module_name, node, source_file) ⇒ Class

Constructor



8
9
10
11
12
13
14
15
16
17
# File 'lib/coverfield/source/class.rb', line 8

public def initialize(class_name, module_name, node, source_file)
  @name = class_name
  @module_name = module_name
  @node = node
  @methods = []
  @source_file = source_file
  @coverage = 0
  @hints = []
  find_methods
end

Instance Attribute Details

#coverageObject (readonly)

Returns the value of attribute coverage.



5
6
7
# File 'lib/coverfield/source/class.rb', line 5

def coverage
  @coverage
end

#hintsObject (readonly)

Returns the value of attribute hints.



5
6
7
# File 'lib/coverfield/source/class.rb', line 5

def hints
  @hints
end

#methodsObject (readonly)

Returns the value of attribute methods.



5
6
7
# File 'lib/coverfield/source/class.rb', line 5

def methods
  @methods
end

#module_nameObject (readonly)

Returns the value of attribute module_name.



5
6
7
# File 'lib/coverfield/source/class.rb', line 5

def module_name
  @module_name
end

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/coverfield/source/class.rb', line 5

def name
  @name
end

#nodeObject (readonly)

Returns the value of attribute node.



5
6
7
# File 'lib/coverfield/source/class.rb', line 5

def node
  @node
end

#source_fileObject (readonly)

Returns the value of attribute source_file.



5
6
7
# File 'lib/coverfield/source/class.rb', line 5

def source_file
  @source_file
end

Instance Method Details

#calculate_coverageObject

Calculates the coverage of that class based on the relevant methods and sets the @coverage and the @hints fields



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/coverfield/source/class.rb', line 43

public def calculate_coverage
  @coverage = 0
  @hints = []
  test_file = source_file.test_file

  methods.each do |method|
    # Is the method covered?
    if test_file.cover?(full_qualified_name, method.name)
      @coverage += 1
    else
      # Should it be covered?
      if method.nocov?
        @coverage += 1
      else
        # If it should be covered, but isn't, create a hint
        method_name = "#{name}.#{method.name}".red
        @hints << "Missing test for #{method_name}"
      end
    end
  end
end

#full_qualified_nameObject

Returns the full qualified name like Coverfield::Source::Class



21
22
23
24
25
# File 'lib/coverfield/source/class.rb', line 21

public def full_qualified_name
  name = @name
  name = "#{@module_name}::#{name}" unless @module_name.empty?
  name
end

#method_countObject

Returns the total amount of methods within the class



36
37
38
# File 'lib/coverfield/source/class.rb', line 36

public def method_count
  @methods.size
end

#relevant_method_countObject

Returns the amount of methods, which should be covered by tests



29
30
31
32
# File 'lib/coverfield/source/class.rb', line 29

public def relevant_method_count
  relevant_methods = @methods.select { |m| !m.nocov?}
  relevant_methods.size
end