test-prof 1.4.0.rc.4 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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: