class ApplicationService
Attributes
bm[R]
cmd[R]
result[R]
usecase[R]
Public Class Methods
call(cmd)
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 7 def call(cmd) @cmd = cmd @bm = Benchmark.measure do raise Errors::InvalidCommand if cmd.invalid? @usecase = usecase_class.new(cmd) raise Errors::NotAuthorizedError unless usecase.allowed? @result = ServiceResult.new { usecase.call } rollback if result.error.present? usecase.broadcast if result.ok? end log_command result rescue StandardError => e ServiceResult.new { raise e } end
rollback()
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 28 def rollback usecase.rollback_micros usecase.rollback end
Private Class Methods
failure_log()
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 60 def failure_log { usecase: "#{service_name}::#{usecase_name}", status: 'faild', body: { cmd: cmd.as_json, error: result.error.to_s, benchmark: bm.as_json } }.as_json end
log_command()
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 35 def log_command FileUtils.mkdir_p 'log/services' service_logger = ActiveSupport::Logger.new( Rails.root.join('log', 'services', "#{service_name.underscore}.log").to_s, 'daily' ) service_logger.formatter = proc do |_severity, datetime, _progname, msg| "[#{msg['usecase']}] [#{msg['status']}] [#{datetime.to_s(:db)} ##{Process.pid}] -- #{msg['body']}\n" end log_body = result.ok? ? success_log : failure_log service_logger.info(log_body) end
service_name()
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 76 def service_name cmd.class.name.split('::').first end
success_log()
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 48 def success_log { usecase: "#{service_name}::#{usecase_name}", status: 'success', body: { cmd: cmd.as_json, result: result.value!.as_json, benchmark: bm.as_json } }.as_json end
usecase_class()
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 72 def usecase_class cmd.class.name.gsub('Commands', 'Usecases').constantize end
usecase_name()
click to toggle source
# File lib/generators/service/install/templates/services/application_service.rb, line 80 def usecase_name cmd.class.name.split('::').last end