rspec-turbo 0.1.2 → 0.1.4

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: '0893f6f1cf18da0567d9f0269278cf37cc6a7a5b0283e04e2a30f8bd23174bd7'
4
- data.tar.gz: 5df528ce22f1a37238dfe99ab71d85c4dbf890604c068dc3f9163dcf91d95546
3
+ metadata.gz: 915f14e1ce936aad9171d3f51648306816375e92d2cdf71183d98f6d868d7de6
4
+ data.tar.gz: 82daa10ee176a8a6a7227da969747b3e457185991e610947b5156def763af756
5
5
  SHA512:
6
- metadata.gz: 261b5c44987eeb63233ff0bbba97f9c05b7425dcb8d21d5a0d30f4a9a84ec941682c0ae9660be0daa391567923eaed49957596cae5acb7a39a12a35534a663dc
7
- data.tar.gz: 609c5ddf05b89abc63268b402df0bb12024cdbbb834c48377412e6c6e0c35f56a6a782fcd7cd3b3c1960da77d3040026d6dd8fdace3e6ddf69d813f98ac7d8b5
6
+ metadata.gz: 7cfacafd7fbb69cf930b0d49e14d5d4c05564d6fb5a5ab4ecd2be91ada9ba3e7bee8f768bf71547718bfd02ef900ca17a0b3d6724bdeae6b8b3a46689665299d
7
+ data.tar.gz: 5bf8dfacac64cbea244b5173ed5ebc948e9711e3457acd47270be2a3c85f4aeddea2128b9bfaeb22732816a8b4a445787ff47be3920338519e68e6d3c41106e1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.4] - 2026-09-29
4
+
5
+ ### Fixed
6
+ - Dry-run no longer falls back to equal-weight distribution when the app prints
7
+ to stdout during the run (e.g. SimpleCov's "Coverage report generated…"
8
+ summary, emitted even with `COVERAGE=0` by apps that start it
9
+ unconditionally). The JSON formatter now writes to its own file
10
+ (`--out tmp/rspec-turbo/dry_run.json`), so stdout noise can't corrupt it.
11
+
12
+ ## [0.1.3] - 2026-06-12
13
+
14
+ ### Fixed
15
+ - Live progress counter stuck at zero on some projects: the per-worker reporter
16
+ now registers the three terminal notifications (`:example_passed`,
17
+ `:example_failed`, `:example_pending`) instead of `:example_finished`, which
18
+ older rspec-core versions don't dispatch to formatters. Mirrors the built-in
19
+ progress formatter, so it counts everywhere.
20
+
3
21
  ## [0.1.2] - 2026-06-12
4
22
 
5
23
  ### Fixed
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "fileutils"
3
4
  require "json"
4
5
 
5
6
  module RSpecTurbo
@@ -41,13 +42,10 @@ module RSpecTurbo
41
42
  return empty_result if @files.empty?
42
43
 
43
44
  t0 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
44
- raw = capture_dry_run
45
+ capture_dry_run
45
46
  @dry_run_elapsed = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - t0).round
46
47
 
47
- json_start = raw.index("{")
48
- raise "No JSON in dry-run output" unless json_start
49
-
50
- parse_examples(JSON.parse(raw[json_start..]))
48
+ parse_examples(read_dry_run_json)
51
49
  rescue => e
52
50
  warn " ⚠ dry-run failed (#{e.message}) — using equal-weight distribution"
53
51
  log_dry_run_error
@@ -55,18 +53,30 @@ module RSpecTurbo
55
53
  empty_result
56
54
  end
57
55
 
56
+ # The JSON goes to its own file (`--out`), never stdout: apps that start
57
+ # SimpleCov unconditionally print their coverage summary to stdout right
58
+ # after the formatter, which would make the JSON unparseable.
58
59
  def capture_dry_run
60
+ FileUtils.mkdir_p(Config.log_dir)
61
+ FileUtils.rm_f(Config.dry_run_json)
62
+
59
63
  File.open(Config.dry_run_log, "w") do |err_file|
60
64
  IO.popen(
61
- # COVERAGE=0 keeps SimpleCov from contaminating the JSON on stdout.
62
65
  [{"RAILS_ENV" => "test", "COVERAGE" => "0", "TEST_ENV_NUMBER" => "1"},
63
- "bundle", "exec", "rspec", "--dry-run", "--format", "json",
66
+ "bundle", "exec", "rspec", "--dry-run", "--format", "json", "--out", Config.dry_run_json,
64
67
  *@rspec_options, *@files.map { |f| "spec/#{f}" }],
65
68
  err: err_file, &:read
66
69
  )
67
70
  end
68
71
  end
69
72
 
73
+ def read_dry_run_json
74
+ raw = File.exist?(Config.dry_run_json) ? File.read(Config.dry_run_json) : ""
75
+ raise "No JSON in dry-run output" if raw.strip.empty?
76
+
77
+ JSON.parse(raw)
78
+ end
79
+
70
80
  def parse_examples(parsed)
71
81
  counts = Hash.new(0)
72
82
  ids = Hash.new { |hash, key| hash[key] = [] }
@@ -58,6 +58,8 @@ module RSpecTurbo
58
58
 
59
59
  def dry_run_log = File.join(log_dir, "dry_run_stderr.log")
60
60
 
61
+ def dry_run_json = File.join(log_dir, "dry_run.json")
62
+
61
63
  def coverage_merge_log = File.join(log_dir, "coverage_merge.log")
62
64
  end
63
65
  end
@@ -12,7 +12,11 @@ module RSpecTurbo
12
12
  # be required by absolute path inside the spawned `rspec` process. The slowest
13
13
  # files report is produced separately by slow_profile.rb.
14
14
  class ProgressReporter < RSpec::Core::Formatters::BaseFormatter
15
- RSpec::Core::Formatters.register self, :example_finished
15
+ # Register the three terminal notifications (exactly one fires per example)
16
+ # instead of :example_finished, which older rspec-core versions don't
17
+ # dispatch to formatters — that left the counter stuck at zero on some
18
+ # projects. This mirrors the built-in progress formatter.
19
+ RSpec::Core::Formatters.register self, :example_passed, :example_failed, :example_pending
16
20
 
17
21
  def initialize(output)
18
22
  super
@@ -20,7 +24,21 @@ module RSpecTurbo
20
24
  @progress_file = ENV["RSPEC_TURBO_PROGRESS_FILE"]
21
25
  end
22
26
 
23
- def example_finished(_notification)
27
+ def example_passed(_notification)
28
+ record
29
+ end
30
+
31
+ def example_failed(_notification)
32
+ record
33
+ end
34
+
35
+ def example_pending(_notification)
36
+ record
37
+ end
38
+
39
+ private
40
+
41
+ def record
24
42
  @count += 1
25
43
  return unless @progress_file
26
44
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RSpecTurbo
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.4"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-turbo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - thadeu
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-06-12 00:00:00.000000000 Z
10
+ date: 2026-09-30 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rspec-core