Module: Tapioca::BundlerExt::AutoRequireHook

Extended by:
T::Sig
Defined in:
lib/tapioca/bundler_ext/auto_require_hook.rb

Overview

This is a module that gets prepended to ‘Bundler::Dependency` and makes sure even gems marked as `require: false` are required during `Bundler.require`. @requires_ancestor: ::Bundler::Dependency

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.enabled?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/tapioca/bundler_ext/auto_require_hook.rb', line 23

def enabled?
  @enabled
end

.excluded?(name) ⇒ Boolean

: (untyped name) -> bool

Returns:

  • (Boolean)


19
20
21
# File 'lib/tapioca/bundler_ext/auto_require_hook.rb', line 19

def excluded?(name)
  @exclude.include?(name)
end

.override_require_false(exclude:, &blk) ⇒ Object

: [Result] (exclude: Array) { -> Result } -> Result



28
29
30
31
32
33
34
# File 'lib/tapioca/bundler_ext/auto_require_hook.rb', line 28

def override_require_false(exclude:, &blk)
  @enabled = true
  @exclude = exclude
  blk.call
ensure
  @enabled = false
end

Instance Method Details

#autorequireObject

: -> untyped



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/tapioca/bundler_ext/auto_require_hook.rb', line 38

def autorequire
  value = super

  # If autorequire is not enabled, we don't want to force require gems
  return value unless AutoRequireHook.enabled?

  # If the gem is excluded, we don't want to force require it, in case
  # it has side-effects users don't want. For example, `fakefs` gem, if
  # loaded, takes over filesystem operations.
  return value if AutoRequireHook.excluded?(name)

  # If a gem is marked as `require: false`, then its `autorequire`
  # value will be `[]`. But, we want those gems to be loaded for our
  # purposes as well, so we return `nil` in those cases, instead, which
  # means `require: true`.
  return if value == []

  value
end