class Fukuzatsu::Summary
Constants
- BRANCHES
Attributes
container[R]
edges[RW]
entity[R]
exits[RW]
nodes[RW]
source_file[R]
summaries[RW]
Public Class Methods
from(content:, source_file:nil)
click to toggle source
# File lib/fukuzatsu/summary.rb, line 16 def self.from(content:, source_file:nil) parser = Analyst.for_source(content) containers = parser.top_level_entities.select{|e| e.respond_to? :all_methods} containers << containers.map(&:classes) containers.flatten!.reject!{ |container| container.all_methods.empty? } containers.map do |container| summary = Fukuzatsu::Summary.new( container: container, source: container.send(:source), entity: container, source_file: source_file ) summary.summaries = container.all_methods.map do |method| Fukuzatsu::Summary.new( container: container, source: method.send(:source), entity: method, source_file: source_file ) end summary end end
new(source:, entity:, container:, source_file:nil)
click to toggle source
# File lib/fukuzatsu/summary.rb, line 42 def initialize(source:, entity:, container:, source_file:nil) @source = source @entity = entity @container = container @source_file = source_file @summaries = [] @edges, @nodes, @exits = [0, 1, 1] end
Public Instance Methods
average_complexity()
click to toggle source
# File lib/fukuzatsu/summary.rb, line 71 def average_complexity return 0 if self.summaries.empty? self.summaries.map(&:complexity).reduce(&:+) / self.summaries.count.to_f end
complexity()
click to toggle source
# File lib/fukuzatsu/summary.rb, line 51 def complexity @complexity ||= begin traverse(self.entity.ast) self.edges - self.nodes + self.exits end end
container_name()
click to toggle source
# File lib/fukuzatsu/summary.rb, line 58 def container_name self.container.full_name end
entity_name()
click to toggle source
# File lib/fukuzatsu/summary.rb, line 66 def entity_name return "*" if is_class_or_module? self.entity.full_name.gsub(self.container.full_name, '') end
is_class_or_module?()
click to toggle source
# File lib/fukuzatsu/summary.rb, line 62 def is_class_or_module? self.container == self.entity end
raw_source()
click to toggle source
# File lib/fukuzatsu/summary.rb, line 76 def raw_source self.source_file && "\n#{File.open(self.source_file, "r").read}" || @source end
Private Instance Methods
extend_graph()
click to toggle source
# File lib/fukuzatsu/summary.rb, line 82 def extend_graph self.edges += 2 self.nodes += 2 self.exits += 1 end
traverse(node, accumulator=[])
click to toggle source
# File lib/fukuzatsu/summary.rb, line 88 def traverse(node, accumulator=[]) accumulator << node.type extend_graph if BRANCHES.include?(node.type) node.children.each do |child| if child.respond_to?(:children) || child.respond_to?(:type) accumulator << child.type traverse(child, accumulator) end end accumulator end