Class: Hashira::Analysis::Graph

Inherits:
Object
  • Object
show all
Defined in:
lib/hashira/analysis/graph.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project, trees, census) ⇒ Graph

Returns a new instance of Graph.



4
5
6
7
8
9
# File 'lib/hashira/analysis/graph.rb', line 4

def initialize(project, trees, census)
  @census = census
  @map = Hashira::Analysis::EdgeMap.new(project, census)
  trees.each { |file, tree| @map.record(file, tree) }
  @cycles = Hashira::Analysis::Cycles.new(@map.dependencies, self)
end

Instance Attribute Details

#cyclesObject (readonly)

Returns the value of attribute cycles.



11
12
13
# File 'lib/hashira/analysis/graph.rb', line 11

def cycles
  @cycles
end

Instance Method Details

#edgesObject



23
24
25
# File 'lib/hashira/analysis/graph.rb', line 23

def edges
  dependencies.sort.flat_map { |from, tos| tos.sort.map { Hashira::Analysis::Edge.new(from:, to: it) } }
end

#evidence(from, to) ⇒ Object



34
# File 'lib/hashira/analysis/graph.rb', line 34

def evidence(from, to) = @map.evidence[[from, to]]

#foldsObject



17
# File 'lib/hashira/analysis/graph.rb', line 17

def folds = @census.folds

#incoming(package) ⇒ Object



21
# File 'lib/hashira/analysis/graph.rb', line 21

def incoming(package) = packages.select { dependencies[it].include?(package) }.sort

#metric(package) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/hashira/analysis/graph.rb', line 36

def metric(package)
  Hashira::Analysis::Metric.new(
    types: @census.types[package],
    afferent: incoming(package).size,
    efferent: dependencies[package].size
  )
end

#metricsObject



44
# File 'lib/hashira/analysis/graph.rb', line 44

def metrics = packages.to_h { [it, metric(it)] }

#outgoing(package) ⇒ Object



19
# File 'lib/hashira/analysis/graph.rb', line 19

def outgoing(package) = dependencies[package].to_a.sort

#packagesObject



13
# File 'lib/hashira/analysis/graph.rb', line 13

def packages = (@census.packages | @map.dependencies.keys)

#packagingObject



15
# File 'lib/hashira/analysis/graph.rb', line 15

def packaging = @census.packaging

#violationsObject



46
# File 'lib/hashira/analysis/graph.rb', line 46

def violations = Hashira::Analysis::SdpCheck.new(dependencies, metrics).violations

#weight(from, to) ⇒ Object



48
# File 'lib/hashira/analysis/graph.rb', line 48

def weight(from, to) = evidence(from, to).size

#weightedObject



27
28
29
30
31
32
# File 'lib/hashira/analysis/graph.rb', line 27

def weighted
  edges.map do |edge|
    from, to = edge.deconstruct
    [from, to, weight(from, to)]
  end
end