demo_mode 3.0.0 → 3.2.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: 68c310d6d0797c6f17fb85f41ec11f72305619323bf7bf2174d6b6a44c2954f4
4
- data.tar.gz: fd5fe9b737d929072e50576ffedfe93d5e516414adb384a4e6d2b4cdc856868a
3
+ metadata.gz: 32fe807f48ace30d24a2172d0b73965272b6d93057dd2447cb4587d386ef93a2
4
+ data.tar.gz: 568795bf8f52234c1d4ead6882762bfa6ec631e6a3242eada9848a7e050c6a0b
5
5
  SHA512:
6
- metadata.gz: a235b3dd997af98b44b1947fc3a8832f33793ef0600a027a935cf8cfc0d6c40f9232b2fe969dc146845e319ae9c150001d33308568e6876b9667a4968f8279d1
7
- data.tar.gz: f848277ff5fa0a11e27e2c6f0d701069a17b818eceba5e0d86a7e9ce12c5592dfa0b7fe86da1248f07f07122824ccb84a2e3090cb6d0909fbb702f65824a0acf
6
+ metadata.gz: f5d183a6c1de1c237dfca4adf333e637223c6d89525249d36841888a432c5c6e8727d01debba0f790f86d5f732441848c8f6ba2e816f89e254666b65e661b72a
7
+ data.tar.gz: a29b4fef772ebb421e4f8236c911316bb5078c29a231e5241788b2c1053a2bef9fe760edf4cfc629b5de21897107564265d3e5a0106adeda39ed57ae22088da5
data/README.md CHANGED
@@ -472,7 +472,16 @@ begin_demo do
472
472
  end
473
473
  ```
474
474
 
475
- ### FactoryBot `sequence` extension
475
+ ### FactoryBot extensions
476
+
477
+ Factory bot ships two patches that may be manually loaded after loading FactoryBot:
478
+
479
+ ```ruby
480
+ require 'factory_bot'
481
+ require 'demo_mode/factory_bot_ext'
482
+ ```
483
+
484
+ #### `sequence`
476
485
 
477
486
  `DemoMode` comes with a patch designed to be a drop-in replacement for
478
487
  [factory_bot](https://github.com/thoughtbot/factory_bot)'s `sequence` feature,
@@ -487,11 +496,19 @@ records in the DB (rather than starting at "Something 1" each time). This
487
496
  feature is necessary wherever you rely on `UNIQUE` constraints in the database,
488
497
  or uniqueness validations on your models.
489
498
 
490
- This patch must be manually loaded after loading FactoryBot:
499
+ #### `around_each` hook
500
+
501
+ Use `FactoryBot.around_each` to wrap all factory execution, which can be used to
502
+ skip expensive callbacks/logging:
491
503
 
492
504
  ```ruby
493
- require 'factory_bot'
494
- require 'demo_mode/factory_bot_ext'
505
+ FactoryBot.around_each do |&blk|
506
+ was_enabled = MyLogger.enabled?
507
+ MyLogger.disable!
508
+ blk.call
509
+ ensure
510
+ MyLogger.enable! if was_enabled
511
+ end
495
512
  ```
496
513
 
497
514
  #### Considerations
@@ -26,6 +26,7 @@ module DemoMode
26
26
  def create
27
27
  @session = Session.new(create_params)
28
28
  @session.save_and_generate_account_later!(**options_params.to_unsafe_h.deep_symbolize_keys)
29
+ @session.reload
29
30
  session[:demo_session] = { 'id' => @session.id, 'last_request_at' => Time.zone.now }
30
31
  respond_to do |f|
31
32
  f.html { redirect_to @session, status: :see_other }
@@ -58,6 +59,7 @@ module DemoMode
58
59
  status: @session.status,
59
60
  username: @session.signinable_username,
60
61
  password: @session.signinable_password,
62
+ metadata: @session.signinable_metadata,
61
63
  }
62
64
  end
63
65
  end
@@ -22,6 +22,7 @@ module DemoMode
22
22
  delegate :begin_demo,
23
23
  :custom_sign_in?,
24
24
  :display_credentials?,
25
+ :metadata,
25
26
  to: :persona,
26
27
  allow_nil: true
27
28
 
@@ -29,6 +30,10 @@ module DemoMode
29
30
  signinable.public_send(DemoMode.signinable_username_method)
30
31
  end
31
32
 
33
+ def signinable_metadata
34
+ successful? ? metadata.call(self) : {}
35
+ end
36
+
32
37
  # Heads up: finding a persona is not guaranteed (e.g. past sessions)
33
38
  def persona
34
39
  DemoMode.personas.find { |p| p.name.to_s == persona_name.to_s }
@@ -10,3 +10,25 @@ module FactoryBot
10
10
  alias sequence clever_sequence
11
11
  end
12
12
  end
13
+
14
+ module DemoMode
15
+ module FactoryBotExt
16
+ def around_each(&block)
17
+ @around_each ||= ->(&blk) { blk.call }
18
+ if block_given?
19
+ previous = @around_each
20
+ @around_each = ->(&blk) { previous.call { block.call(&blk) } }
21
+ end
22
+ @around_each
23
+ end
24
+ end
25
+
26
+ module FactoryBotRunnerExt
27
+ def run(...)
28
+ ::FactoryBot.around_each.call { super }
29
+ end
30
+ end
31
+
32
+ ::FactoryBot.extend(FactoryBotExt)
33
+ ::FactoryBot::FactoryRunner.prepend(FactoryBotRunnerExt)
34
+ end
@@ -38,6 +38,14 @@ module DemoMode
38
38
  end
39
39
  end
40
40
 
41
+ def metadata(&block)
42
+ if block
43
+ @metadata = block
44
+ else
45
+ @metadata ||= ->(_) { {} }
46
+ end
47
+ end
48
+
41
49
  def sign_in_as(&signinable_generator)
42
50
  variant(:default) do
43
51
  sign_in_as(&signinable_generator)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DemoMode
4
- VERSION = '3.0.0'
4
+ VERSION = '3.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: demo_mode
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Griffith
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-02-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: actionpack
@@ -351,7 +350,6 @@ licenses:
351
350
  metadata:
352
351
  rubygems_mfa_required: 'true'
353
352
  changelog_uri: https://github.com/Betterment/demo_mode/blob/main/CHANGELOG.md
354
- post_install_message:
355
353
  rdoc_options: []
356
354
  require_paths:
357
355
  - lib
@@ -366,8 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
366
364
  - !ruby/object:Gem::Version
367
365
  version: '0'
368
366
  requirements: []
369
- rubygems_version: 3.5.23
370
- signing_key:
367
+ rubygems_version: 3.6.8
371
368
  specification_version: 4
372
369
  summary: A configurable demo mode for your Rails app.
373
370
  test_files: []