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) ⇒ TraceReport

Returns a new instance of TraceReport.



26
27
28
# File 'lib/gun_dog/trace_report.rb', line 26

def initialize(klass)
  @klass = klass
end

Instance Attribute Details

#klassObject (readonly)

Returns the value of attribute klass.



3
4
5
# File 'lib/gun_dog/trace_report.rb', line 3

def klass
  @klass
end

Class Method Details

.from_json(json) ⇒ Object



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

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



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

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

Instance Method Details

#as_jsonObject



53
54
55
56
57
58
59
# File 'lib/gun_dog/trace_report.rb', line 53

def as_json
  {
    "klass" => klass,
    "collaborating_classes" => collaborating_classes.to_a,
    "call_records" => call_records.map(&:as_json)
  }
end

#call_recordsObject



22
23
24
# File 'lib/gun_dog/trace_report.rb', line 22

def call_records
  @call_records ||= []
end

#collaborating_classesObject



30
31
32
# File 'lib/gun_dog/trace_report.rb', line 30

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

#finalize_reportObject



38
39
40
41
42
# File 'lib/gun_dog/trace_report.rb', line 38

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

#finalized?Boolean

Returns:

  • (Boolean)


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

def finalized?
  !!@finalized
end

#find_call_record(doc_name) ⇒ Object



65
66
67
68
# File 'lib/gun_dog/trace_report.rb', line 65

def find_call_record(doc_name)
  @find_cache ||= @call_records.group_by(&:method_location)
  @find_cache[doc_name]
end

#method_listObject



70
71
72
# File 'lib/gun_dog/trace_report.rb', line 70

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

#save(filename) ⇒ Object



48
49
50
# File 'lib/gun_dog/trace_report.rb', line 48

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

#stackObject



34
35
36
# File 'lib/gun_dog/trace_report.rb', line 34

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

#to_jsonObject



61
62
63
# File 'lib/gun_dog/trace_report.rb', line 61

def to_json
  MultiJson.dump(as_json)
end