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 classes 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
#callmethods are automatically privatized. -
#log_filter_parameters ⇒ Array
Keys whose values are filtered from Servus's service-call argument logging, shown as
[FILTERED]. -
#require_event_payload_schema ⇒ Boolean
Whether to require all event classes 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.
- #routers ⇒ Array<Servus::Events::Router>
-
#services_dir ⇒ String
The directory where services are located.
-
#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.
-
#parameter_filter ⇒ ActiveSupport::ParameterFilter
Parameter filter built from #log_filter_parameters, memoized until the list is reassigned.
- #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.
155 156 157 158 159 160 161 162 163 |
# File 'lib/servus/config.rb', line 155 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 @log_filter_parameters = [].freeze end |
Instance Attribute Details
#events_dir ⇒ String
The directory where Event classes are located.
Defaults to Rails.root/app/events in Rails applications.
24 25 26 |
# File 'lib/servus/config.rb', line 24 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.
38 39 40 |
# File 'lib/servus/config.rb', line 38 def guards_dir @guards_dir end |
#include_default_guards ⇒ Boolean
Whether to include the default built-in guards (EnsurePresent, EnsurePositive).
52 53 54 |
# File 'lib/servus/config.rb', line 52 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 |
#log_filter_parameters ⇒ Array
Keys whose values are filtered from Servus's service-call argument
logging, shown as [FILTERED]. Accepts the same notations as
ActiveSupport::ParameterFilter (partial-match strings/symbols,
regexps, procs).
Defaults to [] — no filtering. Set the keys you want masked in your
initializer; Rails users can simply reuse their app's request-log
filtering as the value:
config.log_filter_parameters = Rails.application.config.filter_parameters
121 122 123 |
# File 'lib/servus/config.rb', line 121 def log_filter_parameters @log_filter_parameters end |
#require_event_payload_schema ⇒ Boolean
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.
77 78 79 |
# File 'lib/servus/config.rb', line 77 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.
60 61 62 |
# File 'lib/servus/config.rb', line 60 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.
69 70 71 |
# File 'lib/servus/config.rb', line 69 def require_service_result_schema @require_service_result_schema end |
#routers ⇒ Array<Servus::Events::Router>
89 90 91 |
# File 'lib/servus/config.rb', line 89 def routers @routers || [Servus::Events::ClassRouter.new] end |
#services_dir ⇒ String
The directory where services are located.
Defaults to Rails.root/app/services in Rails applications.
31 32 33 |
# File 'lib/servus/config.rb', line 31 def services_dir @services_dir 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.
47 48 49 |
# File 'lib/servus/config.rb', line 47 def tests_dir @tests_dir end |
Instance Method Details
#parameter_filter ⇒ ActiveSupport::ParameterFilter
Parameter filter built from #log_filter_parameters, memoized until the list is reassigned.
138 139 140 |
# File 'lib/servus/config.rb', line 138 def parameter_filter @parameter_filter ||= ActiveSupport::ParameterFilter.new(log_filter_parameters) end |
#set_default_directories ⇒ Object
165 166 167 168 169 170 |
# File 'lib/servus/config.rb', line 165 def set_default_directories @guards_dir = 'app/guards' @events_dir = 'app/events' @services_dir = 'app/services' @tests_dir = 'spec' end |