test-prof 1.4.0.rc.4 → 1.4.0

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: 6636a3c69af7cd067079bd1e91ef72d38b650a372a13e6363c3de9e510a8970b
4
+ data.tar.gz: 2f1a503a8adcf4af85cad6b98ab4682394c5222b1f5290cc6aaeec97da77ef06
5
5
  SHA512:
6
- metadata.gz: 830b4ed5c186ecec5a5396ad764f4d8c96700c8c0c3e55b2f0634b937906ec74d39e61ce1e270d9dd93a72b5618aaad87a6c0b316dc42874c3522631e1e8bbc6
7
- data.tar.gz: 8e81d280c8f86adf1df271758d7bbf91499d86f2493ecbc6435f23cef73adfc23ed1404f475b10ef749a84dd19d0e87eff42aa61f1040738aef04cdb270a2689
6
+ metadata.gz: 68701c8c91b20f810ff93f3e3360d4f8f7b3210a2014f3a4463542b0e31b657ab3093da4eaf4b2bf9cee59d1e99ded9ef51d83e7a27855f05113f681219f7888
7
+ data.tar.gz: 438a4297ebff65d6f9d5aec752775a638f5c6255c63d439f278eda596825595c2b6d74cc609057c42712247a98eefb07c42dcd1133d4d1ae5162898a2af5068c
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 1.4.0 (2024-08-12)
6
+
7
+ - AnyFixture: Disable fixtures cache within _clean fixture_ context. Automatically _refind_ records when using `#fixture`. ([@palkan][])
8
+
5
9
  - Add new TPS (tests per second) profiler. ([@palkan][])
6
10
 
7
11
  - FactoryDefault: add Fabrication support. ([@palkan][])
@@ -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)
@@ -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
 
@@ -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.0"
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.0
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-12 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: