32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/interceptors/use_case_core.rb', line 32
def call(input = {}, **kwargs)
ctx = build_context(input, **kwargs)
instrument(event_name("start"), name: self.class.name, ctx: ctx)
result = pipeline.call(ctx) { |context| normalize_result(execute(context)) }
result = normalize_result(result)
instrument(event_name("finish"),
name: self.class.name,
ctx: ctx,
ok: result.ok?,
error: result.error&.message)
result
rescue AppError => e
instrument(event_name("error"),
name: self.class.name,
ctx: ctx,
code: e.code,
message: e.message)
Result.err(e, meta: base_meta)
rescue StandardError => e
instrument(event_name("error"),
name: self.class.name,
ctx: ctx,
code: "unhandled_exception",
message: e.message,
error_class: e.class.name)
err = AppError.new("Unhandled exception",
code: "unhandled_exception",
http_status: 500,
details: { cause: e.class.name })
Result.err(err, meta: base_meta.merge(error_class: e.class.name))
end
|