test-prof 1.4.0.rc.4 → 1.4.1

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: 46c375967bb8f18cb7a27c0852c3bbc277ea6cae7c0d9ed51d8fe709b1ec67e9
4
- data.tar.gz: 133939cf5cd497246b36642d3552ac0883a3a558d32775be960a9f308e3e67a5
3
+ metadata.gz: 573636b6655a08f1cfa650a2cf0d0136bbbbc85b7e2b84cf76969698fb92b597
4
+ data.tar.gz: 55e1c58e1a1ed27fd56862c0be79737f3b2261d31bec306a1264b8c08e77c37a
5
5
  SHA512:
6
- metadata.gz: 830b4ed5c186ecec5a5396ad764f4d8c96700c8c0c3e55b2f0634b937906ec74d39e61ce1e270d9dd93a72b5618aaad87a6c0b316dc42874c3522631e1e8bbc6
7
- data.tar.gz: 8e81d280c8f86adf1df271758d7bbf91499d86f2493ecbc6435f23cef73adfc23ed1404f475b10ef749a84dd19d0e87eff42aa61f1040738aef04cdb270a2689
6
+ metadata.gz: f26c70dd8a5bc0379fc38f49834da4ae2b43bdd5d79f4290a5147a4b4c22255dc9eee1a8d0b4ecce2003625afd295656a6745b1111fce6c9e9dfd618b9c0fe91
7
+ data.tar.gz: b44cd50ef268582467f18956475d6d767cbea0aef3f78f5ddbdf966d1ba6a07749a9481390fce75be1a667cd9cc8d0e7673868357c7fd241a5cf1e5dea18a02b
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 1.4.1 (2024-08-23)
6
+
7
+ - Skips loading the ActiveRecord adapter for runs where RSpec --dry-run mode is enabled. ([@devinburnette][])
8
+
9
+ ## 1.4.0 (2024-08-12)
10
+
11
+ - AnyFixture: Disable fixtures cache within _clean fixture_ context. Automatically _refind_ records when using `#fixture`. ([@palkan][])
12
+
5
13
  - Add new TPS (tests per second) profiler. ([@palkan][])
6
14
 
7
15
  - FactoryDefault: add Fabrication support. ([@palkan][])
@@ -430,3 +438,4 @@ See [changelog](https://github.com/test-prof/test-prof/blob/v0.8.0/CHANGELOG.md)
430
438
  [@lioneldebauge]: https://github.com/lioneldebauge
431
439
  [@lHydra]: https://github.com/lHydra
432
440
  [@john-h-k]: https://github.com/john-h-k
441
+ [@devinburnette]: https://github.com/devinburnette
@@ -1,5 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ if defined?(::ActiveRecord::Base)
4
+ require "test_prof/ext/active_record_refind"
5
+ using TestProf::Ext::ActiveRecordRefind
6
+ end
7
+
3
8
  module TestProf
4
9
  module AnyFixture
5
10
  # Adds "global" `fixture`, `before_fixtures_reset` and `after_fixtures_reset` methods (through refinement)
@@ -9,7 +14,20 @@ module TestProf
9
14
  # - Rails added `Kernel.prepend` in 6.1: https://github.com/rails/rails/commit/3124007bd674dcdc9c3b5c6b2964dfb7a1a0733c
10
15
  refine ::Object do
11
16
  def fixture(id, &block)
12
- ::TestProf::AnyFixture.register(:"#{id}", &block)
17
+ id = :"#{id}"
18
+ record = ::TestProf::AnyFixture.cached(id)
19
+
20
+ return ::TestProf::AnyFixture.register(id, &block) unless record
21
+
22
+ return record.refind if record.is_a?(::ActiveRecord::Base)
23
+
24
+ if record.respond_to?(:to_ary)
25
+ return record.map do |rec|
26
+ rec.is_a?(::ActiveRecord::Base) ? rec.refind : rec
27
+ end
28
+ end
29
+
30
+ record
13
31
  end
14
32
 
15
33
  def before_fixtures_reset(&block)
@@ -108,14 +108,18 @@ module TestProf
108
108
  cached(id) do
109
109
  raise "No fixture named #{id} has been registered" unless block_given?
110
110
 
111
+ next yield if @disabled
112
+
111
113
  ActiveSupport::Notifications.subscribed(method(:subscriber), "sql.active_record") do
112
114
  yield
113
115
  end
114
116
  end
115
117
  end
116
118
 
117
- def cached(id)
118
- cache.fetch(id) { yield }
119
+ def cached(id, &block)
120
+ return (block_given? ? yield : nil) if @disabled
121
+
122
+ cache.fetch(id, &block)
119
123
  end
120
124
 
121
125
  # Create and register new SQL dump.
@@ -174,6 +178,14 @@ module TestProf
174
178
  callbacks.clear
175
179
  end
176
180
 
181
+ def disable!
182
+ @disabled = true
183
+ end
184
+
185
+ def enable!
186
+ @disabled = false
187
+ end
188
+
177
189
  def before_fixtures_reset(&block)
178
190
  callbacks[:before_fixtures_reset] << block
179
191
  end
@@ -266,5 +278,7 @@ module TestProf
266
278
  connection.disable_referential_integrity { yield }
267
279
  end
268
280
  end
281
+
282
+ enable!
269
283
  end
270
284
  end
@@ -1,20 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module TestProf
4
- module BeforeAll
5
- # Disable Isolator within before_all blocks
6
- module Isolator
7
- def begin_transaction(*)
8
- ::Isolator.transactions_threshold += 1
9
- super
10
- end
3
+ TestProf::BeforeAll.configure do |config|
4
+ config.before(:begin) do
5
+ ::Isolator.incr_thresholds!
6
+ end
11
7
 
12
- def rollback_transaction(*)
13
- super
14
- ::Isolator.transactions_threshold -= 1
15
- end
16
- end
8
+ config.after(:rollback) do
9
+ ::Isolator.decr_thresholds!
17
10
  end
18
11
  end
19
-
20
- TestProf::BeforeAll.singleton_class.prepend(TestProf::BeforeAll::Isolator)
@@ -14,8 +14,26 @@ module TestProf
14
14
  end
15
15
  end
16
16
 
17
+ # Used in dry-run mode
18
+ class NoopAdapter
19
+ class << self
20
+ def begin_transaction(...)
21
+ end
22
+
23
+ def rollback_transaction(...)
24
+ end
25
+
26
+ def setup_fixtures(...)
27
+ end
28
+ end
29
+ end
30
+
17
31
  class << self
18
- attr_accessor :adapter
32
+ attr_writer :adapter
33
+
34
+ def adapter
35
+ @adapter ||= default_adapter
36
+ end
19
37
 
20
38
  def begin_transaction(scope = nil, metadata = [])
21
39
  raise AdapterMissing if adapter.nil?
@@ -47,6 +65,17 @@ module TestProf
47
65
  def configure
48
66
  yield config
49
67
  end
68
+
69
+ private
70
+
71
+ def default_adapter
72
+ return NoopAdapter if TestProf.dry_run?
73
+
74
+ if defined?(::ActiveRecord::Base)
75
+ require "test_prof/before_all/adapters/active_record"
76
+ Adapters::ActiveRecord
77
+ end
78
+ end
50
79
  end
51
80
 
52
81
  class HookEntry # :nodoc:
@@ -138,12 +167,6 @@ module TestProf
138
167
  end
139
168
  end
140
169
 
141
- if defined?(::ActiveRecord::Base)
142
- require "test_prof/before_all/adapters/active_record"
143
-
144
- TestProf::BeforeAll.adapter = TestProf::BeforeAll::Adapters::ActiveRecord
145
- end
146
-
147
170
  if defined?(::Isolator)
148
171
  require "test_prof/before_all/isolator"
149
172
  end
@@ -64,7 +64,7 @@ module RuboCop
64
64
  return super unless its?(example.send_node)
65
65
 
66
66
  # First parameter to `its` is not metadata.
67
- example.send_node.arguments[1..-1]
67
+ example.send_node.arguments[1..]
68
68
  end
69
69
 
70
70
  def its?(node)
@@ -123,7 +123,7 @@ module RuboCop
123
123
  def on_block(node)
124
124
  example_group_with_several_examples(node) do |all_examples|
125
125
  example_clusters(all_examples).each do |_, examples|
126
- examples[1..-1].each do |example|
126
+ examples[1..].each do |example|
127
127
  add_offense(example,
128
128
  location: :expression,
129
129
  message: message_for(example, examples[0]))
@@ -141,7 +141,7 @@ module RuboCop
141
141
  range = range_for_replace(examples)
142
142
  replacement = aggregated_example(examples, metadata)
143
143
  corrector.replace(range, replacement)
144
- examples[1..-1].map { |example| drop_example(corrector, example) }
144
+ examples[1..].map { |example| drop_example(corrector, example) }
145
145
  end
146
146
  end
147
147
  end
@@ -75,6 +75,10 @@ module TestProf
75
75
  defined?(::Spring::Application) && (disabled.nil? || disabled.empty? || disabled == "0")
76
76
  end
77
77
 
78
+ def dry_run?
79
+ rspec? && ::RSpec.configuration.dry_run?
80
+ end
81
+
78
82
  # Returns the current process time
79
83
  def now
80
84
  Process.clock_gettime_for_test_prof(Process::CLOCK_MONOTONIC)
@@ -12,7 +12,7 @@ module TestProf
12
12
  head = ((limit - 3) / 2)
13
13
  tail = head + 3 - limit
14
14
 
15
- "#{self[0..(head - 1)]}...#{self[tail..-1]}"
15
+ "#{self[0..(head - 1)]}...#{self[tail..]}"
16
16
  end
17
17
  end
18
18
  end
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "test_prof/any_fixture"
4
+ require "test_prof/any_fixture/dsl"
5
+ require "test_prof/ext/active_record_refind"
6
+
4
7
  require "test_prof/recipes/rspec/before_all"
5
8
 
6
9
  RSpec.shared_context "any_fixture:clean" do
@@ -8,6 +11,11 @@ RSpec.shared_context "any_fixture:clean" do
8
11
 
9
12
  before_all do
10
13
  TestProf::AnyFixture.clean
14
+ TestProf::AnyFixture.disable!
15
+ end
16
+
17
+ after(:all) do
18
+ TestProf::AnyFixture.enable!
11
19
  end
12
20
  end
13
21
 
@@ -143,7 +143,7 @@ module TestProf
143
143
  elsif expr.first == :@const
144
144
  expr[1]
145
145
  elsif expr.first == :const_path_ref
146
- expr[1..-1].map(&method(:parse_const)).join("::")
146
+ expr[1..].map(&method(:parse_const)).join("::")
147
147
  end
148
148
  end
149
149
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestProf
4
- VERSION = "1.4.0.rc.4"
4
+ VERSION = "1.4.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-prof
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0.rc.4
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-26 00:00:00.000000000 Z
11
+ date: 2024-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -252,9 +252,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
252
252
  version: 2.7.0
253
253
  required_rubygems_version: !ruby/object:Gem::Requirement
254
254
  requirements:
255
- - - ">"
255
+ - - ">="
256
256
  - !ruby/object:Gem::Version
257
- version: 1.3.1
257
+ version: '0'
258
258
  requirements: []
259
259
  rubygems_version: 3.4.19
260
260
  signing_key: