module Tapioca::BundlerExt::AutoRequireHook

def autorequire

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

def enabled?

def enabled?
  @enabled
end

def excluded?(name)

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

def override_require_false(exclude:, &blk)

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