Class: Servus::Config
- Inherits:
-
Object
- Object
- Servus::Config
- Defined in:
- lib/servus/config.rb
Overview
Instance Attribute Summary collapse
-
#events_dir ⇒ String
The directory where event handlers are located.
-
#guards_dir ⇒ String
The directory where guard classes are located.
-
#include_default_guards ⇒ Boolean
Whether to include the default built-in guards (EnsurePresent, EnsurePositive).
-
#lockdown_enabled ⇒ Boolean
Whether external instantiation of services is blocked and instance ‘#call` methods are automatically privatized.
-
#require_event_payload_schema ⇒ Boolean
Whether to require all event handlers to define a payload schema.
-
#require_service_arguments_schema ⇒ Boolean
Whether to require all services to define an arguments schema.
-
#require_service_result_schema ⇒ Boolean
Whether to require all services to define a result schema.
-
#schemas_dir ⇒ String
The directory where JSON schema files are located.
-
#services_dir ⇒ String
The directory where services are located.
-
#strict_event_validation ⇒ Boolean
Whether to validate that all event handlers subscribe to events that are actually emitted by services.
-
#tests_dir ⇒ String
The directory where generated spec/test files are placed.
Instance Method Summary collapse
-
#initialize ⇒ Config
constructor
private
Initializes a new configuration with default values.
-
#schema_dir_for(service_namespace) ⇒ String
Returns the directory containing a service’s schema files.
-
#schema_path_for(service_namespace, type) ⇒ String
Returns the full path to a service’s schema file.
- #set_default_directories ⇒ Object
Constructor Details
#initialize ⇒ Config
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.
122 123 124 125 126 127 128 129 130 |
# File 'lib/servus/config.rb', line 122 def initialize set_default_directories @strict_event_validation = true @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_dir ⇒ String
The directory where event handlers are located.
Defaults to ‘Rails.root/app/events` in Rails applications.
30 31 32 |
# File 'lib/servus/config.rb', line 30 def events_dir @events_dir end |
#guards_dir ⇒ String
The directory where guard classes are located.
Defaults to ‘Rails.root/app/guards` in Rails applications.
52 53 54 |
# File 'lib/servus/config.rb', line 52 def guards_dir @guards_dir end |
#include_default_guards ⇒ Boolean
Whether to include the default built-in guards (EnsurePresent, EnsurePositive).
66 67 68 |
# File 'lib/servus/config.rb', line 66 def include_default_guards @include_default_guards end |
#lockdown_enabled ⇒ Boolean
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.
107 108 109 |
# File 'lib/servus/config.rb', line 107 def lockdown_enabled @lockdown_enabled end |
#require_event_payload_schema ⇒ Boolean
Whether to require all event handlers to define a payload schema.
When enabled, raises Support::Errors::SchemaRequiredError when an event handler validates a payload without a payload schema defined.
91 92 93 |
# File 'lib/servus/config.rb', line 91 def require_event_payload_schema @require_event_payload_schema end |
#require_service_arguments_schema ⇒ Boolean
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.
74 75 76 |
# File 'lib/servus/config.rb', line 74 def require_service_arguments_schema @require_service_arguments_schema end |
#require_service_result_schema ⇒ Boolean
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.
83 84 85 |
# File 'lib/servus/config.rb', line 83 def require_service_result_schema @require_service_result_schema end |
#schemas_dir ⇒ String
The directory where JSON schema files are located.
Defaults to ‘Rails.root/app/schemas/services` in Rails applications.
23 24 25 |
# File 'lib/servus/config.rb', line 23 def schemas_dir @schemas_dir end |
#services_dir ⇒ String
The directory where services are located.
Defaults to ‘Rails.root/app/services` in Rails applications.
37 38 39 |
# File 'lib/servus/config.rb', line 37 def services_dir @services_dir end |
#strict_event_validation ⇒ Boolean
Whether to validate that all event handlers subscribe to events that are actually emitted by services.
When enabled, raises an error on boot if handlers subscribe to non-existent events. Helps catch typos and orphaned handlers.
45 46 47 |
# File 'lib/servus/config.rb', line 45 def strict_event_validation @strict_event_validation end |
#tests_dir ⇒ String
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.
61 62 63 |
# File 'lib/servus/config.rb', line 61 def tests_dir @tests_dir end |
Instance Method Details
#schema_dir_for(service_namespace) ⇒ String
Returns the directory containing a service’s schema files.
161 162 163 |
# File 'lib/servus/config.rb', line 161 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.
149 150 151 |
# File 'lib/servus/config.rb', line 149 def schema_path_for(service_namespace, type) File.join(root_path, schemas_dir, service_namespace, "#{type}.json") end |
#set_default_directories ⇒ Object
132 133 134 135 136 137 138 |
# File 'lib/servus/config.rb', line 132 def set_default_directories @guards_dir = 'app/guards' @events_dir = 'app/events' @schemas_dir = 'app/schemas' @services_dir = 'app/services' @tests_dir = 'spec' end |