Sha256: c5d93621debe140f985b57b7d6c5c1cf731f66314069d7f5b2503733d64ed218

Contents?: true

Size: 1.1 KB

Versions: 11

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

module DeepCover
  module Node::Mixin
    module HasTracker
      def self.included(base)
        base.extend ClassMethods
      end
      TRACKERS = {}

      def initialize(*)
        @tracker_offset = tracker_storage.allocate_trackers(self.class::TRACKERS.size).begin
        super
      end

      def tracker_storage
        covered_code.tracker_storage
      end

      def tracker_sources
        self.class::TRACKERS.map do |name, _|
          [:"#{name}_tracker", send(:"#{name}_tracker_source")]
        end.to_h
      end

      module ClassMethods
        def inherited(base)
          base.const_set :TRACKERS, self::TRACKERS.dup
          super
        end

        def has_tracker(name)
          i = self::TRACKERS[name] = self::TRACKERS.size
          class_eval <<-EVAL, __FILE__, __LINE__ + 1
            def #{name}_tracker_source
              tracker_storage.tracker_source(@tracker_offset + #{i})
            end
            def #{name}_tracker_hits
              tracker_storage[@tracker_offset + #{i}]
            end
          EVAL
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
deep-cover-core-0.6.4 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-core-0.6.3 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-core-0.6.3.pre lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.6.2 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.6.1 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.6.0 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.5.7 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.5.6 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.5.5 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.5.4 lib/deep_cover/node/mixin/has_tracker.rb
deep-cover-0.5.3 lib/deep_cover/node/mixin/has_tracker.rb