Class: Servus::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/servus/config.rb

Overview

Configuration settings for the Servus gem.

Manages global configuration options including schema file locations. Access the configuration via config or modify via configure.

Examples:

Customizing schema location

Servus.configure do |config|
  config.schema_root = Rails.root.join('lib/schemas')
end

See Also:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

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.

Initializes a new configuration with default values.



128
129
130
131
132
133
134
135
# File 'lib/servus/config.rb', line 128

def initialize
  set_default_directories
  @include_default_guards           = true
  @lockdown_enabled                 = true
  @require_service_arguments_schema = false
  @require_service_result_schema    = false
  @require_event_payload_schema     = false
end

Instance Attribute Details

#events_dirString

The directory where Event classes are located.

Defaults to Rails.root/app/events in Rails applications.

Returns:

  • (String)

    the events directory path



30
31
32
# File 'lib/servus/config.rb', line 30

def events_dir
  @events_dir
end

#guards_dirString

The directory where guard classes are located.

Defaults to Rails.root/app/guards in Rails applications.

Returns:

  • (String)

    the guards directory path



44
45
46
# File 'lib/servus/config.rb', line 44

def guards_dir
  @guards_dir
end

#include_default_guardsBoolean

Whether to include the default built-in guards (EnsurePresent, EnsurePositive).

Returns:

  • (Boolean)

    true to include default guards, false to exclude them



58
59
60
# File 'lib/servus/config.rb', line 58

def include_default_guards
  @include_default_guards
end

#lockdown_enabledBoolean

Whether external instantiation of services is blocked and instance #call methods are automatically privatized.

When enabled (default), callers must invoke services via the class method Base.call, which runs argument validation, logging, benchmarking, guards, result validation, and event emission. Calling MyService.new or instance.call directly raises NoMethodError.

Disable this if you have existing code that instantiates services directly or otherwise prefer to opt out of the enforcement.

Returns:

  • (Boolean)

    true to enforce lockdown (default), false to allow direct instantiation and public instance #call

See Also:



113
114
115
# File 'lib/servus/config.rb', line 113

def lockdown_enabled
  @lockdown_enabled
end

#require_event_payload_schemaBoolean

Whether to require all event classes to define a payload schema.

When enabled, raises Support::Errors::SchemaRequiredError when an event validates a payload without a payload schema defined.

Returns:

  • (Boolean)

    true to require payload schemas, false to allow schema-less events



83
84
85
# File 'lib/servus/config.rb', line 83

def require_event_payload_schema
  @require_event_payload_schema
end

#require_service_arguments_schemaBoolean

Whether to require all services to define an arguments schema.

When enabled, raises Support::Errors::SchemaRequiredError when a service is called without an arguments schema defined.

Returns:

  • (Boolean)

    true to require arguments schemas, false to allow schema-less services



66
67
68
# File 'lib/servus/config.rb', line 66

def require_service_arguments_schema
  @require_service_arguments_schema
end

#require_service_result_schemaBoolean

Whether to require all services to define a result schema.

When enabled, raises Support::Errors::SchemaRequiredError when a service returns a successful response without a result schema defined. Failure schemas remain optional regardless of this setting.

Returns:

  • (Boolean)

    true to require result schemas, false to allow schema-less services



75
76
77
# File 'lib/servus/config.rb', line 75

def require_service_result_schema
  @require_service_result_schema
end

#routersArray<Servus::Events::Router>

Returns:



95
96
97
# File 'lib/servus/config.rb', line 95

def routers
  @routers || [Servus::Events::ClassRouter.new]
end

#schemas_dirString

The directory where JSON schema files are located.

Defaults to Rails.root/app/schemas/services in Rails applications.

Returns:

  • (String)

    the schemas directory path



23
24
25
# File 'lib/servus/config.rb', line 23

def schemas_dir
  @schemas_dir
end

#services_dirString

The directory where services are located.

Defaults to Rails.root/app/services in Rails applications.

Returns:

  • (String)

    the services directory path



37
38
39
# File 'lib/servus/config.rb', line 37

def services_dir
  @services_dir
end

#tests_dirString

The directory where generated spec/test files are placed.

Defaults to "spec". Projects using Minitest or a custom test layout can override this (e.g., "test") so generators write files into the correct location.

Returns:

  • (String)

    the tests directory path



53
54
55
# File 'lib/servus/config.rb', line 53

def tests_dir
  @tests_dir
end

Instance Method Details

#schema_dir_for(service_namespace) ⇒ String

Returns the directory containing a service's schema files.

Examples:

config.schema_dir_for("process_payment")
# => "/full/path/app/schemas/process_payment"

Parameters:

  • service_namespace (String)

    underscored service namespace

Returns:

  • (String)

    directory path for the service's schemas



166
167
168
# File 'lib/servus/config.rb', line 166

def schema_dir_for(service_namespace)
  File.join(root_path, schemas_dir, service_namespace)
end

#schema_path_for(service_namespace, type) ⇒ String

Returns the full path to a service's schema file.

Examples:

config.schema_path_for("process_payment", "arguments")
# => "/full/path/app/schemas/process_payment/arguments.json"

Parameters:

  • service_namespace (String)

    underscored service namespace (e.g., "process_payment")

  • type (String)

    schema type ("arguments" or "result")

Returns:

  • (String)

    full path to the schema JSON file



154
155
156
# File 'lib/servus/config.rb', line 154

def schema_path_for(service_namespace, type)
  File.join(root_path, schemas_dir, service_namespace, "#{type}.json")
end

#set_default_directoriesObject



137
138
139
140
141
142
143
# File 'lib/servus/config.rb', line 137

def set_default_directories
  @guards_dir   = 'app/guards'
  @events_dir   = 'app/events'
  @schemas_dir  = 'app/schemas'
  @services_dir = 'app/services'
  @tests_dir    = 'spec'
end