Class: GunDog::TraceReport

Inherits:
Object
  • Object
show all
Defined in:
lib/gun_dog/trace_report.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, suppression_set: []) ⇒ TraceReport



36
37
38
39
# File 'lib/gun_dog/trace_report.rb', line 36

def initialize(klass, suppression_set: [])
  @klass = klass
  @suppression_set = suppression_set
end

Instance Attribute Details

#klassObject (readonly)

Returns the value of attribute klass.



5
6
7
# File 'lib/gun_dog/trace_report.rb', line 5

def klass
  @klass
end

#suppression_setObject (readonly)

Returns the value of attribute suppression_set.



5
6
7
# File 'lib/gun_dog/trace_report.rb', line 5

def suppression_set
  @suppression_set
end

Class Method Details

.from_json(json) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/gun_dog/trace_report.rb', line 12

def self.from_json(json)
  tr = new(nil)

  tr.instance_eval do
    @klass = Kernel.const_get(json['klass'])
    @stack = TraceStack.from_json(json.slice('klass','collaborating_classes'))
    @call_records = json['call_records'].map { |cr| CallRecord.from_json(cr) }
  end

  tr
end

.load(filename) ⇒ Object



7
8
9
10
# File 'lib/gun_dog/trace_report.rb', line 7

def self.load(filename)
  json = MultiJson.load(File.open(filename, 'r') { |f| f.read })
  from_json(json)
end

Instance Method Details

#all_callsObject



24
25
26
# File 'lib/gun_dog/trace_report.rb', line 24

def all_calls
  @all_calls ||= []
end

#as_jsonObject



64
65
66
67
68
69
70
71
# File 'lib/gun_dog/trace_report.rb', line 64

def as_json
  {
    "klass" => klass.to_s,
    "collaborating_classes" => collaborating_classes.map { |k| k.json_encoded },
    "call_records" => call_records.map(&:as_json)
  }

end

#call_recordsObject



32
33
34
# File 'lib/gun_dog/trace_report.rb', line 32

def call_records
  @call_records ||= []
end

#collaborating_classesObject



41
42
43
# File 'lib/gun_dog/trace_report.rb', line 41

def collaborating_classes
  stack.collaborating_classes - [GunDog, klass]
end

#exploreObject



28
29
30
# File 'lib/gun_dog/trace_report.rb', line 28

def explore
  GunDog::TraceExplorer.new(self)
end

#finalize_reportObject



49
50
51
52
53
# File 'lib/gun_dog/trace_report.rb', line 49

def finalize_report
  @call_records.freeze
  @stack.clear.freeze
  @finalized = true
end

#finalized?Boolean



55
56
57
# File 'lib/gun_dog/trace_report.rb', line 55

def finalized?
  !!@finalized
end

#method_listObject



78
79
80
# File 'lib/gun_dog/trace_report.rb', line 78

def method_list
  @call_records.map(&:method_location)
end

#save(filename) ⇒ Object



59
60
61
# File 'lib/gun_dog/trace_report.rb', line 59

def save(filename)
  File.open(filename, 'w') { |f| f.puts(to_json) }
end

#stackObject



45
46
47
# File 'lib/gun_dog/trace_report.rb', line 45

def stack
  @stack ||= TraceStack.new(klass)
end

#to_jsonObject



74
75
76
# File 'lib/gun_dog/trace_report.rb', line 74

def to_json
  MultiJson.dump(as_json)
end