fast_cov 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba4073b332a0c7f0837d5cf954b9ad98353721e6350c24969541819a42a27c65
4
- data.tar.gz: c85de804a17e0f1bd7b21a370e61dbe0d59dc2bb5ce02d84f827c500d6816b5a
3
+ metadata.gz: 8d5eb20089cfe981168592cd5672e1919746a5186c61f151aff87eea7319eb1c
4
+ data.tar.gz: af45acb129fd680beaa1a906248ad1aedf03e10a5d40d02fbeaa0971e9112b44
5
5
  SHA512:
6
- metadata.gz: f080c26c0a0813a10555885ac162e7662519641501d5d499bebbb1315414ba3469770ac66d95576d6209cc7e9c8b4181fa43c6a729c3d4ccd2c282a1394a86f6
7
- data.tar.gz: 0ff5f9c3053015028416a2d5190785542abf1bfe0ce6fe2c0d8dae5ab16e555419f5a8b350980119ebf87065b1166b5f700f6131c582c4df9c36b5eb3a0b5f8e
6
+ metadata.gz: 97cdc30f83fb1970d97d6cddc04758463043a85ee81ccd5a22011e0b017a04d8b9b82be90931b42bdf5565ef163ac84cc1544ec43ecae2cc1727041770adfc52
7
+ data.tar.gz: baa28e4ae365439250404b285eb0577a167de1cb907a3c37b33f09d3a99bf53bf4e6ca0ac6fd2ff84360a048f2795de7ca709ffd11c1236b0846ae66a4f4a75a
@@ -15,6 +15,8 @@ module FastCov
15
15
  # - threads: true -> record from ALL threads (global tracking)
16
16
  # - threads: false -> only record from the thread that called start
17
17
  class AbstractTracker
18
+ attr_reader :coverage_map
19
+
18
20
  def initialize(coverage_map, **_options)
19
21
  @coverage_map = coverage_map
20
22
  @files = nil
@@ -22,7 +24,7 @@ module FastCov
22
24
  end
23
25
 
24
26
  def root
25
- @coverage_map.root
27
+ coverage_map.root
26
28
  end
27
29
 
28
30
  # Public API - called by FastCov framework
@@ -12,9 +12,7 @@ module FastCov
12
12
  # Register via: coverage_map.use(FastCov::FactoryBotTracker)
13
13
  class FactoryBotTracker < AbstractTracker
14
14
  def install
15
- unless defined?(::FactoryBot)
16
- raise LoadError, "FactoryBotTracker requires the factory_bot gem to be installed"
17
- end
15
+ gem "factory_bot"
18
16
 
19
17
  return if ::FactoryBot.factories.singleton_class.ancestors.include?(RegistryPatch)
20
18
 
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "abstract_tracker"
4
+
5
+ module FastCov
6
+ # Tracks FixtureKit fixture definition files when fixtures are used.
7
+ #
8
+ # Fixture definitions run once during cache generation (before(:context)),
9
+ # then every test replays cached SQL without executing Ruby. This tracker
10
+ # uses FixtureKit's callback hooks to:
11
+ #
12
+ # 1. Connect the fixture file to all source files touched during generation
13
+ # 2. Record the fixture definition file when a test mounts a fixture
14
+ #
15
+ # Requires fixture_kit >= 0.14.0 (Event-based callbacks).
16
+ #
17
+ # Register via: coverage_map.use(FastCov::FixtureKitTracker)
18
+ class FixtureKitTracker < AbstractTracker
19
+ def install
20
+ gem "fixture_kit", ">= 0.14.0"
21
+
22
+ tracker = self
23
+
24
+ FixtureKit.configure do |config|
25
+ # When a fixture is about to be generated, start the coverage map
26
+ # to track what files the fixture definition touches.
27
+ # This runs in before(:context), before the formatter starts coverage.
28
+ config.on_cache_save do |_fixture|
29
+ tracker.coverage_map.start
30
+ end
31
+
32
+ # After generation, stop coverage and connect the fixture file
33
+ # to everything it touched.
34
+ config.on_cache_saved do |fixture, _duration|
35
+ files = tracker.coverage_map.stop
36
+ files.each do |file|
37
+ tracker.coverage_map.connect(from: fixture.path, to: file)
38
+ end
39
+ end
40
+
41
+ # When a test mounts a fixture, record the fixture definition file
42
+ # and any parent fixture files in the chain.
43
+ config.on_cache_mount do |event|
44
+ tracker.class.record(event.path)
45
+ parent = event.fixture.parent
46
+ while parent
47
+ tracker.class.record(parent.definition.path)
48
+ parent = parent.parent
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FastCov
4
- VERSION = "0.3.1"
4
+ VERSION = "0.3.2"
5
5
  end
data/lib/fast_cov.rb CHANGED
@@ -11,5 +11,6 @@ module FastCov
11
11
  autoload :FileTracker, File.expand_path("fast_cov/trackers/file_tracker", __dir__)
12
12
  autoload :FactoryBotTracker, File.expand_path("fast_cov/trackers/factory_bot_tracker", __dir__)
13
13
  autoload :ConstGetTracker, File.expand_path("fast_cov/trackers/const_get_tracker", __dir__)
14
+ autoload :FixtureKitTracker, File.expand_path("fast_cov/trackers/fixture_kit_tracker", __dir__)
14
15
  autoload :StaticMap, File.expand_path("fast_cov/static_map", __dir__)
15
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_cov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ngan Pham
@@ -65,6 +65,34 @@ dependencies:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '6.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: fixture_kit
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.14.0
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 0.14.0
82
+ - !ruby/object:Gem::Dependency
83
+ name: sqlite3
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
68
96
  description: A high-performance C extension that tracks which Ruby source files are
69
97
  executed during test runs, enabling test impact analysis.
70
98
  executables: []
@@ -91,6 +119,7 @@ files:
91
119
  - lib/fast_cov/trackers/const_get_tracker.rb
92
120
  - lib/fast_cov/trackers/factory_bot_tracker.rb
93
121
  - lib/fast_cov/trackers/file_tracker.rb
122
+ - lib/fast_cov/trackers/fixture_kit_tracker.rb
94
123
  - lib/fast_cov/utils.rb
95
124
  - lib/fast_cov/version.rb
96
125
  homepage: https://github.com/Gusto/fast_cov