fixtury 1.0.0.beta6 → 1.0.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: 549d52f7830e397113098a883ce5086c2170cd02b4afc4f17f4b1fc6369076cb
4
- data.tar.gz: 625a595982202950245e1804011aba787945d9a8c5cf1127f676c9112ae6b41e
3
+ metadata.gz: 2dad3194d36ce43bfc6331ae5f8ed37abbf7509496f8b6d6344313f9512f22f8
4
+ data.tar.gz: d0c0324b038362cda1f2f12ad100fef087edb931c2aeb417d6ea04e0292aa4fa
5
5
  SHA512:
6
- metadata.gz: 44906dd01d66b02ffeada31d11bcb40531aa4ee66f56b7f6bd3f21dc84291c26d5f32d7715e19467ca5611df0aba77716e1c62dcf8e9fcec60121550eb33b4ac
7
- data.tar.gz: 717d96c8e0a72891946c0e3a7faacc3646c100468481eae7d776856e9a1f40ac3ec768df2aa8dcf8d16c805f1435796249545ae576a053306a1547fcbd45c8a9
6
+ metadata.gz: c7a86120bf86a3cddc62c1d36294683fe2cd280d7aa8fa2e05af1d4b81f5c9fe99e7f5086b5028173c3d580c15b50665591f8377d153a098030ca317bfab839c
7
+ data.tar.gz: d8a18793cee0e6f4172e3d64826fd218c028e0b3ad1a9c33496877e5c5841cefd4741adf55bdf7ea119074822e0ea0f7c87134f565147ab71ffd82b09f2cf667
@@ -0,0 +1,24 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ open-pull-requests-limit: 20
6
+ schedule:
7
+ interval: "daily"
8
+ time: "09:00"
9
+ timezone: "America/New_York"
10
+ commit-message:
11
+ prefix: "[github-actions] "
12
+ - package-ecosystem: "bundler"
13
+ directory: "/"
14
+ schedule:
15
+ interval: "daily"
16
+ time: "08:30"
17
+ timezone: "America/New_York"
18
+ allow:
19
+ - dependency-type: "all"
20
+ versioning-strategy: increase
21
+ open-pull-requests-limit: 20
22
+ insecure-external-code-execution: deny
23
+ commit-message:
24
+ prefix: "[bundler] "
@@ -0,0 +1,23 @@
1
+ name: build
2
+ on:
3
+ pull_request:
4
+ push:
5
+ branches:
6
+ - main
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ ruby-version: [3.2.2]
14
+ experimental: [false]
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ show-progress: 'false'
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby-version }}
22
+ bundler-cache: true # runs `bundle install` and caches installed gems automatically
23
+ - run: bundle exec rake
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fixtury (1.0.0.beta6)
4
+ fixtury (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -23,7 +23,7 @@ GEM
23
23
  mutex_m
24
24
  tzinfo (~> 2.0)
25
25
  base64 (0.2.0)
26
- bigdecimal (3.1.6)
26
+ bigdecimal (3.1.7)
27
27
  byebug (11.1.3)
28
28
  concurrent-ruby (1.2.3)
29
29
  connection_pool (2.4.1)
@@ -35,13 +35,13 @@ GEM
35
35
  m (1.6.2)
36
36
  method_source (>= 0.6.7)
37
37
  rake (>= 0.9.2.2)
38
- method_source (1.0.0)
39
- mini_portile2 (2.8.5)
40
- minitest (5.22.2)
41
- mocha (2.1.0)
38
+ method_source (1.1.0)
39
+ mini_portile2 (2.8.6)
40
+ minitest (5.22.3)
41
+ mocha (2.2.0)
42
42
  ruby2_keywords (>= 0.0.5)
43
43
  mutex_m (0.2.0)
44
- rake (13.1.0)
44
+ rake (13.2.1)
45
45
  ruby2_keywords (0.0.5)
46
46
  sqlite3 (1.7.2)
47
47
  mini_portile2 (~> 2.8.0)
@@ -1,20 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "benchmark"
4
+
3
5
  module Fixtury
4
6
  # A container that manages the execution of a definition in the context of a store.
5
7
  class DefinitionExecutor
6
8
 
7
- attr_reader :value, :definition, :store
9
+ class Output
10
+
11
+ attr_accessor :value, :metadata
12
+
13
+ def initialize
14
+ @value = nil
15
+ @metadata = {}
16
+ end
17
+
18
+ end
19
+
20
+ attr_reader :output, :definition, :store
8
21
 
9
22
  def initialize(store: nil, definition:)
10
23
  @store = store
11
24
  @definition = definition
12
- @value = nil
25
+ @output = Output.new
13
26
  end
14
27
 
15
28
  def call
16
29
  run_definition
17
- value
30
+ output
18
31
  end
19
32
 
20
33
  private
@@ -25,13 +38,13 @@ module Fixtury
25
38
  def run_definition
26
39
  callable = definition.callable
27
40
 
28
- @value = if callable.arity.positive?
41
+ if callable.arity.positive?
29
42
  deps = build_dependency_store
30
- ::Fixtury.hooks.call(:execution, self) do
43
+ around_execution do
31
44
  instance_exec(deps, &callable)
32
45
  end
33
46
  else
34
- ::Fixtury.hooks.call(:execution, self) do
47
+ around_execution do
35
48
  instance_eval(&callable)
36
49
  end
37
50
  end
@@ -41,6 +54,16 @@ module Fixtury
41
54
  raise Errors::DefinitionExecutionError.new(definition.pathname, e)
42
55
  end
43
56
 
57
+ def around_execution(&block)
58
+ measure_timing do
59
+ @output.value = ::Fixtury.hooks.call(:execution, self, &block)
60
+ end
61
+ end
62
+
63
+ def measure_timing(&block)
64
+ @output.metadata[:duration] = Benchmark.realtime(&block)
65
+ end
66
+
44
67
  def build_dependency_store
45
68
  DependencyStore.new(definition: definition, store: store)
46
69
  end
@@ -144,7 +144,8 @@ module Fixtury
144
144
  def fixtury_database_connections
145
145
  return [] unless defined?(ActiveRecord::Base)
146
146
 
147
- ActiveRecord::Base.connection_handler.connection_pool_list(:writing).map(&:connection)
147
+ pools = ActiveRecord::Base.connection_handler.connection_pool_list(:writing)
148
+ pools.map { |pool| pool.respond_to?(:lease_connection) ? pool.lease_connection : pool.connection }
148
149
  end
149
150
 
150
151
  # Load all dependenct fixtures and begin a transaction for each database connection.
@@ -15,13 +15,14 @@ module Fixtury
15
15
  new(name, HOLDER_KEY)
16
16
  end
17
17
 
18
- attr_reader :name, :locator_key, :created_at, :options
18
+ attr_reader :name, :locator_key, :created_at, :metadata
19
+ alias options metadata # backwards compatibility
19
20
 
20
- def initialize(name, locator_key, **options)
21
+ def initialize(name, locator_key, **metadata)
21
22
  @name = name
22
23
  @locator_key = locator_key
23
24
  @created_at = Time.now.to_i
24
- @options = options
25
+ @metadata = metadata
25
26
  end
26
27
 
27
28
  def holder?
data/lib/fixtury/store.rb CHANGED
@@ -159,7 +159,8 @@ module Fixtury
159
159
 
160
160
  begin
161
161
  executor = ::Fixtury::DefinitionExecutor.new(store: self, definition: dfn)
162
- value = executor.call
162
+ output = executor.call
163
+ value = output.value
163
164
  rescue StandardError
164
165
  clear_reference(pathname)
165
166
  raise
@@ -167,8 +168,9 @@ module Fixtury
167
168
 
168
169
  log("store #{pathname}", level: LOG_LEVEL_DEBUG)
169
170
 
170
- locator_key = locator.dump(value, context: pathname)
171
+ locator_key = locator.dump(output.value, context: pathname)
171
172
  reference_opts = {}
173
+ reference_opts.merge!(output.metadata)
172
174
  reference_opts[:isolation_key] = isokey unless isokey == pathname
173
175
  references[pathname] = ::Fixtury::Reference.new(
174
176
  pathname,
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Fixtury
4
4
 
5
- VERSION = "1.0.0.beta6"
5
+ VERSION = "1.0.0"
6
6
 
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixtury
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta6
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Nelson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-13 00:00:00.000000000 Z
11
+ date: 2024-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -143,6 +143,8 @@ executables: []
143
143
  extensions: []
144
144
  extra_rdoc_files: []
145
145
  files:
146
+ - ".github/dependabot.yml"
147
+ - ".github/workflows/build.yml"
146
148
  - ".gitignore"
147
149
  - ".ruby-version"
148
150
  - ".travis.yml"
@@ -196,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
198
  - !ruby/object:Gem::Version
197
199
  version: '0'
198
200
  requirements: []
199
- rubygems_version: 3.5.6
201
+ rubygems_version: 3.5.15
200
202
  signing_key:
201
203
  specification_version: 4
202
204
  summary: Treat fixtures like factories and factories like fixtures