class PrivatePlease::Tracking::TracePointProcessor

Public Class Methods

new(config) click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 11
def initialize(config)
  @config                   = config

  @latest_tracepoints       = Utils::TwoLevelStack.new
  @encountered_method_calls = Storage::CalledMethodsMemoryStore.new
end

Public Instance Methods

process(tp) click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 18
def process(tp)
  return if untracked_code?(tp.path)
  remember_trace_point tp
  store_method_call_details if tp.event == :call
end
result() click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 24
def result
  Result.new(@encountered_method_calls)
end

Private Instance Methods

already_private?() click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 74
def already_private?
  tp_curr._self.private_methods.include?(tp_curr.method_id)
end
private_call?() click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 66
def private_call?
  return unless tp_prev  # fails sometime (ex: rspec-core) # UNTESTED
  curr_event, prev_event = tp_curr.event, tp_prev.event
  (curr_event == :call) &&
    [:line, :return, :c_return].include?(prev_event) &&
    tp_curr.same_object?(tp_prev)
end
remember_trace_point(tp) click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 31
def remember_trace_point(tp)
  tpd = TracePointDetails.from(tp)
  @latest_tracepoints.push tpd
  Debug.log_to_trace_file  tpd
end
store_method_call_details() click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 57
def store_method_call_details
  key = tp_curr.method_full_name
  if private_call?
    @encountered_method_calls.add_private_call(key) unless already_private?
  else
    @encountered_method_calls.add_public_call(key)
  end
end
tp_curr() click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 54
def tp_curr; @latest_tracepoints.curr end
tp_prev() click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 55
def tp_prev; @latest_tracepoints.prev end
untracked_code?(path) click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 42
def untracked_code?(path)
  path.start_with?(*untracked_source_dirs)
end
untracked_source_dirs() click to toggle source
# File lib/private_please/tracking/trace_point_processor.rb, line 46
def untracked_source_dirs
  @_untracked_source_dirs ||= begin
    Utils::RubyUtils.gems_paths +
    Array(Utils::RubyUtils.std_lib_home) +
    @config.additional_excluded_dirs
  end
end