Class: Codebeacon::Tracer::TreeNode

Inherits:
Object
  • Object
show all
Defined in:
lib/codebeacon/tracer/src/models/tree_node.rb

Defined Under Namespace

Classes: TraceStatus

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file: nil, line: nil, object_id: nil, method: nil, tp_class: nil, tp_defined_class: nil, tp_class_name: nil, self_type: nil, depth: 0, caller: "", gem_entry: false, parent: nil, block: false, locals: [], return_value: nil, node_source: nil, script: false, called_method: nil) ⇒ TreeNode

Returns a new instance of TreeNode.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 36

def initialize(file: nil, line: nil, object_id: nil, method: nil, tp_class: nil, tp_defined_class: nil, tp_class_name: nil, self_type: nil, depth: 0, caller: "", gem_entry: false, parent: nil, block: false, locals: [], return_value: nil, node_source: nil, script: false, called_method: nil)
  @file = file
  @line = line
  @method = method
  @object_id = object_id
  @tp_class = tp_class
  @tp_defined_class = tp_defined_class
  @tp_class_name = tp_class_name
  @self_type = self_type
  @children = []
  @depth = depth
  @gem_entry = gem_entry
  @caller = caller
  @parent = parent
  @block = block
  @locals = locals
  @return_value = return_value
  @linevars = Hash.new { |h, k| h[k] = {} }
  @node_source = node_source
  @trace_status = TraceStatus.new(nil)
  @script = script
  @backtrace_count = 0
  @backtrace_location = nil
  @script_binding = nil
  @script_self = nil
  @called_method = called_method
end

Instance Attribute Details

#backtrace_countObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def backtrace_count
  @backtrace_count
end

#backtrace_locationObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def backtrace_location
  @backtrace_location
end

#blockObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def block
  @block
end

#called_methodObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def called_method
  @called_method
end

#callerObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def caller
  @caller
end

#childrenObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def children
  @children
end

#depthObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def depth
  @depth
end

#fileObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def file
  @file
end

#gem_entryObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def gem_entry
  @gem_entry
end

#lineObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def line
  @line
end

#linevarsObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def linevars
  @linevars
end

#localsObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def locals
  @locals
end

#methodObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def method
  @method
end

#node_sourceObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def node_source
  @node_source
end

#object_idObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def object_id
  @object_id
end

#parentObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def parent
  @parent
end

#return_valueObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def return_value
  @return_value
end

#scriptObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def script
  @script
end

#script_bindingObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def script_binding
  @script_binding
end

#script_selfObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def script_self
  @script_self
end

#self_typeObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def self_type
  @self_type
end

#tp_classObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def tp_class
  @tp_class
end

#tp_class_nameObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def tp_class_name
  @tp_class_name
end

#tp_defined_classObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def tp_defined_class
  @tp_defined_class
end

#trace_statusObject

def initialize(file: nil, line: nil, method: nil, depth: 0, caller: “”, gem_entry: false, parent: nil, block: false, locals: [], ast: nil, return_value: “”)

@file = file
@line = line
@method = method
@depth = depth
@caller = caller
@gem_entry = gem_entry
@parent = parent
@block = block
@locals = locals
@ast = ast
@return_value = return_value
@linevars = {}
@children = []

end



34
35
36
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 34

def trace_status
  @trace_status
end

Instance Method Details

#add_line(lineno, variables) ⇒ Object



64
65
66
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 64

def add_line(lineno, variables)
  @linevars[lineno] = @linevars[lineno].merge(variables)
end

#depth_truncated?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 109

def depth_truncated?
  @depth > Codebeacon::Tracer.config.max_depth && @children.count > 0
end

#inspectObject



72
73
74
75
76
77
78
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 72

def inspect
  ivar_inspect = instance_variables.reject { |ivar| [:@children].include?(ivar) }.map do |ivar|
    "#{ivar.to_s}=#{instance_variable_get(ivar).inspect}"
  end
  ivar_inspect << "@children=#<#{@children.map(&:to_s)}>"
  "#<#{self.class.name}:0x#{self.object_id.to_s} #{ivar_inspect.join(', ')}>"
end

#inspect_tree(attrs = [], depth = 0) ⇒ Object



80
81
82
83
84
85
86
87
88
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 80

def inspect_tree(attrs = [], depth = 0)
  str = file.split("/").last + ":#{script ? "script" : method}"
  if !attrs.empty?
    attr_values = attrs.map { |k, v| "#{k}=#{v.inspect}" }.join(', ')
    str += " " + attrs
  end
  str += children.map { |c| "\n" + " " * (depth + 1) * 2 + c.inspect_tree(attrs, depth + 1) }.join()
  return str
end

#set_args(lineno, variables) ⇒ Object



68
69
70
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 68

def set_args(lineno, variables)
  @linevars[lineno] = @linevars[lineno].merge(variables)
end

#to_hObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/codebeacon/tracer/src/models/tree_node.rb', line 90

def to_h
  children = depth > Codebeacon::Tracer.config.max_depth ? nil : @children.map(&:to_h)
  is_truncated = depth > Codebeacon::Tracer.config.max_depth ? true : false
  {
    file: @file,
    line: @line,
    method: @method,
    class: @tp_class,
    tp_defined_class: @tp_defined_class,
    tp_class_name: @tp_class_name,
    class_name: @class_name,
    self_type: @self_type,
    gemEntry: @gem_entry,
    caller: @caller,
    isDepthTruncated: is_truncated,
    children: children
  }
end