Files
subtle-storm/app/services/application_service.rb
T
2025-11-22 02:12:52 +02:00

53 lines
938 B
Ruby

# frozen_string_literal: true
class ApplicationService
include ActiveModel::Model
include ActiveModel::Attributes
define_model_callbacks :perform
define_model_callbacks :success, only: [:after]
define_model_callbacks :failure, only: [:after]
@prepend_methods = Module.new do
def perform(...)
status = run_callbacks :perform do
super(...)
end
if status
run_callbacks :success
else
run_callbacks :failure
end
status
end
end
def self.inherited(subclass)
super
subclass.prepend @prepend_methods
end
before_perform do
if invalid?
logger.debug 'Validation failed'
throw :abort
end
end
def perform
# Override this
end
private
def save(model)
model.save.tap { @errors = model.errors }
end
def logger
@logger ||= ActiveSupport::TaggedLogging.new(Rails.logger).tagged(self.class.name)
end
end