light-service-ext 0.1.9 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -2
- data/lib/light-service-ext/application_context.rb +7 -1
- data/lib/light-service-ext/record_actions.rb +25 -2
- data/lib/light-service-ext/version.rb +1 -1
- data/lib/light-service-ext/with_error_handler.rb +1 -1
- data/light-service-ext.gemspec +1 -1
- data/spec/light-service-ext/application_context_spec.rb +15 -0
- data/spec/light-service-ext/record_actions_spec.rb +34 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aad64b8f2360c7b9e4576bcfe6e167f10a87424392b9677ca620b973ba3dc8ef
|
4
|
+
data.tar.gz: 18a7ff6bde7fab9b58eb1e883fbb79cc346be9d98e9516135de3b5e6eabd570c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0f1d41f1530c3b8e9624f0c3ef360464b9a67d8c7e21893b4ecea3db8b09d19b967e7a0dbbc6d66cc1e90677186954c62ab1d734e026ca434b183d7ad3bbdc8
|
7
|
+
data.tar.gz: d81ae82181b451ad2330dc42ccbf33f11cab6b99a0afaa47ba77d4a8bf88bcb6903b486439be926ea408fc2dc06b8e27626843f45a69e6053c9afb4d3dd4f401
|
data/README.md
CHANGED
@@ -173,12 +173,14 @@ end
|
|
173
173
|
- `LightServiceExt::Status::INCOMPLETE`
|
174
174
|
- `:last_failed_context` ~ copy of context that failed e.g. with `errors` field present
|
175
175
|
- `internal_only` ~ includes the likes of raised error summary and should never be passed to endpoint responses
|
176
|
+
- `meta` ~ used to store any additional information that could be helpful especially for debugging purposes.
|
176
177
|
Example
|
177
178
|
|
178
179
|
````ruby
|
179
180
|
input = { order: order }
|
180
181
|
overrides = {} # optionally override `params`, `errors` and `allow_raise_on_failure`
|
181
|
-
|
182
|
+
meta = { current_user_id: 12345, request_id: some-unique-request-id, impersonator_id: 54321 }
|
183
|
+
LightServiceExt::ApplicationContext.make_with_defaults(input, overrides, meta: meta)
|
182
184
|
|
183
185
|
# => { input: { order: order },
|
184
186
|
# errors: { email: ['not found'] },
|
@@ -190,7 +192,8 @@ LightServiceExt::ApplicationContext.make_with_defaults(input, overrides)
|
|
190
192
|
# api_responses: [ { user_id: 1, status: 'ACTIVE' } ],
|
191
193
|
# last_failed_context: {input: { order: order }, params: {}, ...},
|
192
194
|
# allow_raise_on_failure: true,
|
193
|
-
# internal_only: { error_info: ErrorInfoInstance }
|
195
|
+
# internal_only: { error_info: ErrorInfoInstance },
|
196
|
+
# meta: { current_user_id: 12345, request_id: some-unique-request-id, impersonator_id: 54321 }
|
194
197
|
# }
|
195
198
|
````
|
196
199
|
|
@@ -25,7 +25,8 @@ module LightServiceExt
|
|
25
25
|
api_responses: [],
|
26
26
|
last_failed_context: nil,
|
27
27
|
allow_raise_on_failure: LightServiceExt.config.allow_raise_on_failure?,
|
28
|
-
internal_only: {}
|
28
|
+
internal_only: {},
|
29
|
+
meta: {}
|
29
30
|
}.freeze
|
30
31
|
end
|
31
32
|
end
|
@@ -63,6 +64,11 @@ module LightServiceExt
|
|
63
64
|
add_attrs_to_ctx(:internal_only, **attrs)
|
64
65
|
end
|
65
66
|
|
67
|
+
def add_meta(**attrs)
|
68
|
+
add_attrs_to_ctx(:meta, **attrs)
|
69
|
+
end
|
70
|
+
|
71
|
+
|
66
72
|
def record_raised_error(error)
|
67
73
|
@error_info = ErrorInfo.new(error)
|
68
74
|
error_type = @error_info.type
|
@@ -6,14 +6,37 @@ module LightServiceExt
|
|
6
6
|
|
7
7
|
def self.call(context)
|
8
8
|
with_error_handler(ctx: context) do
|
9
|
-
|
10
|
-
|
9
|
+
self.before_execute_block.call(context)
|
10
|
+
|
11
|
+
result = yield || context
|
12
|
+
|
13
|
+
self.after_execute_block.call(context)
|
14
|
+
self.after_success_block.call(context) if result.success?
|
15
|
+
self.after_failure_block.call(context) if result.failure?
|
11
16
|
|
17
|
+
return context if outcomes_complete?(ctx: context, result: result)
|
12
18
|
merge_api_responses!(ctx: context, result: result)
|
13
19
|
end
|
14
20
|
end
|
15
21
|
|
16
22
|
class << self
|
23
|
+
attr_writer :before_execute_block, :after_execute_block, :after_success_block, :after_failure_block
|
24
|
+
|
25
|
+
def before_execute_block
|
26
|
+
@before_execute_block ||= ->(_context) {}
|
27
|
+
end
|
28
|
+
|
29
|
+
def after_execute_block
|
30
|
+
@after_execute_block ||= ->(_context) {}
|
31
|
+
end
|
32
|
+
|
33
|
+
def after_success_block
|
34
|
+
@after_success_block ||= ->(_context) {}
|
35
|
+
end
|
36
|
+
|
37
|
+
def after_failure_block
|
38
|
+
@after_failure_block ||= ->(_context) {}
|
39
|
+
end
|
17
40
|
def merge_api_responses!(ctx:, result:)
|
18
41
|
invoked_action = result.invoked_action
|
19
42
|
return if invoked_action.nil?
|
data/light-service-ext.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.name = "light-service-ext"
|
17
17
|
gem.require_paths = ["lib"]
|
18
18
|
gem.version = LightServiceExt::VERSION
|
19
|
-
gem.required_ruby_version = ">=
|
19
|
+
gem.required_ruby_version = ">= 2.7"
|
20
20
|
|
21
21
|
gem.metadata["homepage_uri"] = gem.homepage
|
22
22
|
gem.metadata["source_code_uri"] = gem.homepage
|
@@ -325,6 +325,21 @@ module LightServiceExt
|
|
325
325
|
|
326
326
|
subject(:ctx_with_defaults) { described_class.make_with_defaults(input, overrides) }
|
327
327
|
|
328
|
+
describe '#add_meta' do
|
329
|
+
it 'adds meta to context' do
|
330
|
+
ctx_with_defaults.add_meta(key => value)
|
331
|
+
expect(ctx_with_defaults.meta).to eql(key => value)
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
context 'with meta as an override' do
|
336
|
+
let(:overrides) { { meta: { key: 'some-value' } } }
|
337
|
+
|
338
|
+
it 'adds meta to context' do
|
339
|
+
expect(ctx_with_defaults.meta).to eql(key => value)
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
328
343
|
context 'with non symbolized input keys' do
|
329
344
|
let(:input) { { "key" => 'some-value' } }
|
330
345
|
|
@@ -19,6 +19,40 @@ module LightServiceExt
|
|
19
19
|
|
20
20
|
subject(:called_ctx) { described_class.call(ctx, &proc) }
|
21
21
|
|
22
|
+
describe 'lifecycle callbacks' do
|
23
|
+
before do
|
24
|
+
allow(described_class.before_execute_block).to receive(:call)
|
25
|
+
allow(described_class.after_execute_block).to receive(:call)
|
26
|
+
allow(described_class.after_success_block).to receive(:call)
|
27
|
+
allow(described_class.after_failure_block).to receive(:call)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'calls appropriate lifecycle callbacks' do
|
31
|
+
called_ctx
|
32
|
+
|
33
|
+
expect(described_class.before_execute_block).to have_received(:call).with(kind_of(ApplicationContext))
|
34
|
+
expect(described_class.after_execute_block).to have_received(:call).with(kind_of(ApplicationContext))
|
35
|
+
expect(described_class.after_success_block).to have_received(:call).with(kind_of(ApplicationContext))
|
36
|
+
expect(described_class.after_failure_block).not_to have_received(:call)
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'with failure' do
|
40
|
+
before do
|
41
|
+
allow_any_instance_of(ApplicationContext).to receive(:success?) { false }
|
42
|
+
allow_any_instance_of(ApplicationContext).to receive(:failure?) { true }
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'calls appropriate lifecycle callbacks' do
|
46
|
+
called_ctx
|
47
|
+
|
48
|
+
expect(described_class.before_execute_block).to have_received(:call).with(kind_of(ApplicationContext))
|
49
|
+
expect(described_class.after_execute_block).to have_received(:call).with(kind_of(ApplicationContext))
|
50
|
+
expect(described_class.after_failure_block).to have_received(:call).with(kind_of(ApplicationContext))
|
51
|
+
expect(described_class.after_success_block).not_to have_received(:call)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
22
56
|
it 'returns expected context' do
|
23
57
|
expect(called_ctx.success?).to be_truthy
|
24
58
|
expect(called_ctx.successful_actions).to be_empty
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: light-service-ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Desmond O'Leary
|
@@ -229,7 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
229
229
|
requirements:
|
230
230
|
- - ">="
|
231
231
|
- !ruby/object:Gem::Version
|
232
|
-
version: '
|
232
|
+
version: '2.7'
|
233
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
234
234
|
requirements:
|
235
235
|
- - ">="
|