Module: Servus::Support::Lockdown

Included in:
Base
Defined in:
lib/servus/support/lockdown.rb

Overview

Enforces that services are invoked through Base.call rather than by instantiating a service and calling its instance ‘#call` directly. The class-level `.call` runs argument validation, logging, benchmarking, guard handling, result validation, and event emission; calling the instance method directly would silently skip all of that.

When included in Base, this module:

  • Privatizes ‘.new` on the base class (and, by inheritance, on every descendant) so `MyService.new` from outside the class raises `NoMethodError`.

  • Installs a ‘method_added` hook on every descendant that privatizes any instance-level `#call` at definition time.

Controlled by Config#lockdown_enabled (default ‘true`). Set it to `false` to allow direct instantiation and public instance `#call` — useful if you have existing code that relies on those entry points, or if you prefer to opt out of this enforcement entirely.

Examples:

Opting out

Servus.configure do |config|
  config.lockdown_enabled = false
end

See Also:

Defined Under Namespace

Modules: ClassMethods, Inherited, PrivateCall

Class Method Summary collapse

Class Method Details

.included(base) ⇒ void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Wires the lockdown hooks into the including class.

Extends the base with ClassMethods (for Servus::Support::Lockdown::ClassMethods#apply_lockdown!), prepends Inherited so subclasses receive the ‘method_added` hook, and applies the current config value to `.new`’s visibility.

Parameters:

  • base (Class)

    the class including this module (expected to be Base)



39
40
41
42
43
# File 'lib/servus/support/lockdown.rb', line 39

def self.included(base)
  base.extend(ClassMethods)
  base.singleton_class.prepend(Inherited)
  base.apply_lockdown!
end