Class: Railsmith::BaseService
- Inherits:
-
Object
- Object
- Railsmith::BaseService
- Includes:
- AssociationDsl, BulkActions, ContextPropagation, CrudActions, CrudErrorMapping, CrudModelResolution, CrudRecordHelpers, CrudTransactions, DupHelpers, EagerLoading, InputDsl, NestedWriter, Validation, Hooks::Dsl
- Defined in:
- lib/railsmith/base_service.rb,
lib/railsmith/base_service/input_dsl.rb,
lib/railsmith/base_service/validation.rb,
lib/railsmith/base_service/bulk_params.rb,
lib/railsmith/base_service/dup_helpers.rb,
lib/railsmith/base_service/bulk_actions.rb,
lib/railsmith/base_service/crud_actions.rb,
lib/railsmith/base_service/bulk_contract.rb,
lib/railsmith/base_service/eager_loading.rb,
lib/railsmith/base_service/nested_writer.rb,
lib/railsmith/base_service/type_coercion.rb,
lib/railsmith/base_service/bulk_execution.rb,
lib/railsmith/base_service/input_registry.rb,
lib/railsmith/base_service/input_resolver.rb,
lib/railsmith/base_service/association_dsl.rb,
lib/railsmith/base_service/input_definition.rb,
lib/railsmith/base_service/crud_transactions.rb,
lib/railsmith/base_service/crud_error_mapping.rb,
lib/railsmith/base_service/context_propagation.rb,
lib/railsmith/base_service/crud_record_helpers.rb,
lib/railsmith/base_service/association_registry.rb,
lib/railsmith/base_service/crud_model_resolution.rb,
lib/railsmith/base_service/association_definition.rb,
lib/railsmith/base_service/domain_context_propagation.rb,
lib/railsmith/base_service/nested_writer/nested_write.rb,
lib/railsmith/base_service/nested_writer/cascading_destroy.rb,
lib/railsmith/base_service/nested_writer/nested_write/write_nested.rb,
lib/railsmith/base_service/nested_writer/nested_write/async_enqueueing.rb,
lib/railsmith/base_service/nested_writer/nested_write/write_nested_item.rb
Overview
Base service entrypoint with lifecycle hook support.
Defined Under Namespace
Modules: AssociationDsl, BulkActions, BulkContract, BulkExecution, BulkParams, ContextPropagation, CrudActions, CrudErrorMapping, CrudModelResolution, CrudRecordHelpers, CrudTransactions, DomainContextPropagation, DupHelpers, EagerLoading, InputDsl, InputResolverHelpers, NestedWriter, TypeCoercion, Validation Classes: AssociationDefinition, AssociationRegistry, InputDefinition, InputRegistry, InputResolver
Constant Summary
Constants included from BulkParams
BulkParams::DEFAULT_BATCH_SIZE, BulkParams::DEFAULT_BULK_LIMIT, BulkParams::TRANSACTION_MODE_ALL_OR_NOTHING, BulkParams::TRANSACTION_MODE_BEST_EFFORT
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
Class Method Summary collapse
- .call(action:, params: {}, context: UNSET_CONTEXT) ⇒ Object
- .call!(action:, params: {}, context: UNSET_CONTEXT) ⇒ Object
-
.domain(domain_key = nil) ⇒ Object
Bounded-context key for this service (optional).
- .model(model_class = nil) ⇒ Object
-
.service_domain(domain_key = nil) ⇒ Object
deprecated
Deprecated.
Use BaseService.domain instead.
Instance Method Summary collapse
- #call(action:) ⇒ Object
-
#initialize(params:, context:) ⇒ BaseService
constructor
A new instance of BaseService.
Methods included from Hooks::Dsl
included, #run_lifecycle_hooks
Methods included from BulkActions
#bulk_create, #bulk_destroy, #bulk_update
Methods included from CrudActions
#create, #destroy, #find, #list, #update
Methods included from EagerLoading
Methods included from AssociationDsl
Methods included from InputDsl
Methods included from Validation
Methods included from ContextPropagation
Constructor Details
#initialize(params:, context:) ⇒ BaseService
Returns a new instance of BaseService.
96 97 98 99 |
# File 'lib/railsmith/base_service.rb', line 96 def initialize(params:, context:) @params = deep_dup(params || {}) @context = context.is_a?(Context) ? context : Context.build(context) end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
94 95 96 |
# File 'lib/railsmith/base_service.rb', line 94 def context @context end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
94 95 96 |
# File 'lib/railsmith/base_service.rb', line 94 def params @params end |
Class Method Details
.call(action:, params: {}, context: UNSET_CONTEXT) ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'lib/railsmith/base_service.rb', line 51 def call(action:, params: {}, context: UNSET_CONTEXT) resolved = if context.equal?(UNSET_CONTEXT) Context.current || Context.build(nil) else Context.build(context) end new(params:, context: resolved).call(action:) end |
.call!(action:, params: {}, context: UNSET_CONTEXT) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/railsmith/base_service.rb', line 61 def call!(action:, params: {}, context: UNSET_CONTEXT) result = call(action: action, params: params, context: context) raise Railsmith::Failure, result if result.failure? result end |
.domain(domain_key = nil) ⇒ Object
Bounded-context key for this service (optional). When set, mismatches against context[:current_domain] emit warn-only instrumentation unless the pair is listed in Railsmith.configuration.cross_domain_allowlist.
77 78 79 80 81 |
# File 'lib/railsmith/base_service.rb', line 77 def domain(domain_key = nil) return @service_domain if domain_key.nil? @service_domain = Context.normalize_current_domain(domain_key) end |
.model(model_class = nil) ⇒ Object
68 69 70 71 72 |
# File 'lib/railsmith/base_service.rb', line 68 def model(model_class = nil) return @model_class if model_class.nil? @model_class = model_class end |
.service_domain(domain_key = nil) ⇒ Object
Use domain instead.
84 85 86 87 88 89 90 91 |
# File 'lib/railsmith/base_service.rb', line 84 def service_domain(domain_key = nil) if domain_key.nil? warn "[DEPRECATION] `service_domain` reader is deprecated. Use `domain` instead." else warn "[DEPRECATION] `service_domain :#{domain_key}` is deprecated. Use `domain :#{domain_key}` instead." end domain(domain_key) end |
Instance Method Details
#call(action:) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/railsmith/base_service.rb', line 101 def call(action:) normalized_action = normalize_action(action) return invalid_action_result(action: normalized_action) unless valid_action?(normalized_action) if self.class.input_registry.any? input_result = resolve_inputs return input_result if input_result.failure? end result = execute_action(action: normalized_action) normalize_result(result) end |