Sha256: 92cbd6eb6599fc50cc0e7de2807f76819cc4aa1907a7cf75aea350294f16abd0

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

module SourceRoute

  class TraceFilter
    attr_accessor :cond
    def initialize(condition)
      @cond = condition
    end

    # to improve performance, we didnt assign tp as instance variable
    def block_it?(tp)
      if @cond.track_params
        return true if negative_check(tp)
        if positives_check(tp)
          return !tp.binding.eval('local_variables').any? do |v|
            tp.binding.local_variable_get(v).object_id == @cond.track_params
          end
        end
      else
        return true if negative_check(tp)
        return false if positives_check(tp)
      end
      true # default is blocked the tp
    end

    def negative_check(tp)
      cond.negatives.any? do |method_key, value|
        tp.send(method_key).to_s =~ Regexp.new(value)
      end
    end

    def positives_check(tp)
      return true if cond.positives == {}
      cond.positives.any? do |method_key, value|
        if method_key.to_sym == :defined_class
          tp.send(method_key).name =~ Regexp.new(value)
        else
          tp.send(method_key).to_s =~ Regexp.new(value)
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
source_route-0.6.0 lib/source_route/trace_filter.rb