Sha256: f245bb0c73cd2b722a88ddcbb977035f295e4dab83350a9221462a3bf9983418

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

module PrivatePlease ; module Tracking

  class LineChangeTracker
    class << self
      attr_accessor :prev_prev_self, :prev_self, :curr_self
      @@prev_self = @@curr_self = nil
    end

    MY_TRACE_FUN = lambda do |event, file, line, id, binding, klass|
      return unless 'line'==event
      LineChangeTracker.prev_prev_self = LineChangeTracker.prev_self
      LineChangeTracker.prev_self      = LineChangeTracker.curr_self
      LineChangeTracker.curr_self      = (eval 'self', binding)
      #puts "my : #{event} in #{file}/#{line} id:#{id} klass:#{klass} - self = #{(eval'self', binding).inspect}"
    end

    def self.outside_instance_method_call_detected?(zelf)
      caller_class != zelf.class
    end

    def self.outside_class_method_call_detected?(zelf_class)
      caller_class != zelf_class
    end

  private

    def self.caller_class
      call_initiator = LineChangeTracker.prev_self
      (caller_is_class_method = call_initiator.is_a?(Class)) ?
          call_initiator :
          call_initiator.class
    end
  end
end end

set_trace_func(PrivatePlease::Tracking::LineChangeTracker::MY_TRACE_FUN) #

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
private_please-0.0.3 lib/private_please/tracking/line_change_tracker.rb