startback 0.8.2 → 0.10.0
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/lib/startback/audit/trailer.rb +4 -2
- data/lib/startback/bus/bunny/async.rb +8 -2
- data/lib/startback/operation/multi_operation.rb +1 -1
- data/lib/startback/operation.rb +1 -0
- data/lib/startback/support/transaction_manager.rb +25 -0
- data/lib/startback/support/transaction_policy.rb +33 -0
- data/lib/startback/support.rb +2 -0
- data/lib/startback/version.rb +2 -2
- data/spec/unit/support/operation_runner/test_around_run.rb +3 -4
- data/spec/unit/support/test_transaction_manager.rb +64 -0
- metadata +12 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10937b9e7877dd7393837c70185fe245493a35234d66a899efee5fbebb539b75
|
4
|
+
data.tar.gz: 5fd7234b34b09f875dcf9b21ad819eb5072ffed902ddd08ca6c2e6a68e3ec1df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37df032165dd22b0680f8eaf874bada4810707253e06677c6a80b5d21afc87062643143e5f2b50e0f3adbe48d9df00368bb5f7070068e8458565e0d0fb8f1112
|
7
|
+
data.tar.gz: 754c4703f78bca862a4a7b2f8d973609ec44fab70368fe6d6d371050c140592a5706720ef0208ac4002ce434d85ad8e4d095d07840cd7993e2cb698cd116da5d
|
@@ -74,13 +74,13 @@ module Startback
|
|
74
74
|
|
75
75
|
protected
|
76
76
|
|
77
|
-
def op_to_trail(op, time, ex = nil)
|
77
|
+
def op_to_trail(op, time = nil, ex = nil)
|
78
78
|
log_msg = {
|
79
79
|
op_took: time ? time.round(8) : nil,
|
80
80
|
op: op_name(op),
|
81
81
|
context: op_context(op),
|
82
82
|
op_data: op_data(op)
|
83
|
-
}
|
83
|
+
}.compact
|
84
84
|
log_msg[:error] = ex if ex
|
85
85
|
log_msg
|
86
86
|
end
|
@@ -104,6 +104,8 @@ module Startback
|
|
104
104
|
op.input
|
105
105
|
elsif op.respond_to?(:request, false)
|
106
106
|
op.request
|
107
|
+
elsif op.is_a?(Operation::MultiOperation)
|
108
|
+
op.ops.map{ |sub_op| op_to_trail(sub_op) }
|
107
109
|
end
|
108
110
|
sanitize(data)
|
109
111
|
end
|
@@ -35,6 +35,8 @@ module Startback
|
|
35
35
|
class Async
|
36
36
|
include Support::Robustness
|
37
37
|
|
38
|
+
CHANNEL_KEY = 'Startback::Bus::Bunny::Async::ChannelKey'
|
39
|
+
|
38
40
|
DEFAULT_OPTIONS = {
|
39
41
|
# (optional) The URL to use for connecting to RabbitMQ.
|
40
42
|
url: ENV['STARTBACK_BUS_BUNNY_ASYNC_URL'],
|
@@ -65,11 +67,15 @@ module Startback
|
|
65
67
|
try_max_times(10) do
|
66
68
|
@bunny = ::Bunny.new(conn)
|
67
69
|
@bunny.start
|
68
|
-
|
70
|
+
channel
|
69
71
|
log(:info, {op: "#{self.class.name}#connect", op_data: conn}, options[:context])
|
70
72
|
end
|
71
73
|
end
|
72
|
-
attr_reader :
|
74
|
+
attr_reader :options
|
75
|
+
|
76
|
+
def channel
|
77
|
+
Thread.current[CHANNEL_KEY] ||= @bunny.create_channel
|
78
|
+
end
|
73
79
|
|
74
80
|
def emit(event)
|
75
81
|
stop_errors(self, "emit", event.context) do
|
data/lib/startback/operation.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Startback
|
2
|
+
module Support
|
3
|
+
class TransactionManager
|
4
|
+
|
5
|
+
def initialize(db, method = :transaction)
|
6
|
+
@db = db
|
7
|
+
@method = method
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(runner, op, &then_block)
|
11
|
+
raise ArgumentError, "A block is required" unless then_block
|
12
|
+
|
13
|
+
before = (op.class.transaction_policy == :before_call)
|
14
|
+
if before
|
15
|
+
@db.send(@method) do
|
16
|
+
then_block.call
|
17
|
+
end
|
18
|
+
else
|
19
|
+
then_block.call
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end # class TransactionManager
|
24
|
+
end # module Support
|
25
|
+
end # module Startback
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Startback
|
2
|
+
module Support
|
3
|
+
module TransactionPolicy
|
4
|
+
|
5
|
+
# Returns the operation's transaction policy
|
6
|
+
def transaction_policy
|
7
|
+
@transaction_policy || :before_call
|
8
|
+
end
|
9
|
+
|
10
|
+
# Sets the transaction policy to use. Valid values are:
|
11
|
+
# - before_call : the transaction is started by the operation
|
12
|
+
# runner, right before calling the #call method on operation
|
13
|
+
# instance
|
14
|
+
# - within_call: the transaction is started by the operation
|
15
|
+
# itself, as part of its internal logic.
|
16
|
+
def transaction_policy=(policy)
|
17
|
+
unless [:before_call, :within_call].include?(policy)
|
18
|
+
raise ArgumentError, "Unknown policy `#{policy}`"
|
19
|
+
end
|
20
|
+
@transaction_policy = policy
|
21
|
+
end
|
22
|
+
|
23
|
+
def after_commit(&bl)
|
24
|
+
after_call do
|
25
|
+
db.after_commit do
|
26
|
+
instance_exec(&bl)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end # module TransactionPolicy
|
32
|
+
end # module Support
|
33
|
+
end # module Startback
|
data/lib/startback/support.rb
CHANGED
data/lib/startback/version.rb
CHANGED
@@ -68,7 +68,7 @@ module Startback
|
|
68
68
|
end
|
69
69
|
|
70
70
|
context 'the around feature with a class' do
|
71
|
-
class
|
71
|
+
class SomeTransactionManager
|
72
72
|
include Singleton
|
73
73
|
|
74
74
|
def initialize
|
@@ -87,7 +87,7 @@ module Startback
|
|
87
87
|
|
88
88
|
class RunnerTest3
|
89
89
|
include OperationRunner
|
90
|
-
around_run
|
90
|
+
around_run SomeTransactionManager.instance
|
91
91
|
|
92
92
|
def operation_world(op)
|
93
93
|
{ hello: "world" }
|
@@ -97,7 +97,7 @@ module Startback
|
|
97
97
|
it 'calls the proc with expected parameters' do
|
98
98
|
test = RunnerTest3.new
|
99
99
|
got = test.run(op)
|
100
|
-
expect(
|
100
|
+
expect(SomeTransactionManager.instance.called).to eql(true)
|
101
101
|
expect(got).to eql({
|
102
102
|
seen_hello: "world"
|
103
103
|
})
|
@@ -154,4 +154,3 @@ module Startback
|
|
154
154
|
end # module OperationRunner
|
155
155
|
end # module Support
|
156
156
|
end # module Startback
|
157
|
-
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Startback
|
3
|
+
module Support
|
4
|
+
describe TransactionManager do
|
5
|
+
subject do
|
6
|
+
TransactionManager.new(db).call(nil, op) do
|
7
|
+
op.call
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class FakeDatabase
|
12
|
+
def initialize
|
13
|
+
@called = false
|
14
|
+
end
|
15
|
+
attr_reader :called
|
16
|
+
|
17
|
+
def transaction
|
18
|
+
@called = true
|
19
|
+
yield
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:db) do
|
24
|
+
FakeDatabase.new
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when called with a default operation' do
|
28
|
+
class OperationNotManagingTransactions < Startback::Operation
|
29
|
+
def call
|
30
|
+
12
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
let(:op) do
|
35
|
+
OperationNotManagingTransactions.new
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'calls db.transaction' do
|
39
|
+
expect(subject).to eql(12)
|
40
|
+
expect(db.called).to eql(true)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when called with an operation that manages the transactions itself' do
|
45
|
+
class OperationManagingTransactions < Startback::Operation
|
46
|
+
self.transaction_policy = :within_call
|
47
|
+
|
48
|
+
def call
|
49
|
+
12
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
let(:op) do
|
54
|
+
OperationManagingTransactions.new
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'calls db.transaction' do
|
58
|
+
expect(subject).to eql(12)
|
59
|
+
expect(db.called).to eql(false)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: startback
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bernard Lambeau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -210,7 +210,7 @@ dependencies:
|
|
210
210
|
requirements:
|
211
211
|
- - ">="
|
212
212
|
- !ruby/object:Gem::Version
|
213
|
-
version:
|
213
|
+
version: 1.11.4
|
214
214
|
- - "<"
|
215
215
|
- !ruby/object:Gem::Version
|
216
216
|
version: '2.0'
|
@@ -220,7 +220,7 @@ dependencies:
|
|
220
220
|
requirements:
|
221
221
|
- - ">="
|
222
222
|
- !ruby/object:Gem::Version
|
223
|
-
version:
|
223
|
+
version: 1.11.4
|
224
224
|
- - "<"
|
225
225
|
- !ruby/object:Gem::Version
|
226
226
|
version: '2.0'
|
@@ -230,20 +230,20 @@ dependencies:
|
|
230
230
|
requirements:
|
231
231
|
- - ">="
|
232
232
|
- !ruby/object:Gem::Version
|
233
|
-
version:
|
233
|
+
version: 5.3.1
|
234
234
|
- - "<"
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version: '
|
236
|
+
version: '6.0'
|
237
237
|
type: :runtime
|
238
238
|
prerelease: false
|
239
239
|
version_requirements: !ruby/object:Gem::Requirement
|
240
240
|
requirements:
|
241
241
|
- - ">="
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version:
|
243
|
+
version: 5.3.1
|
244
244
|
- - "<"
|
245
245
|
- !ruby/object:Gem::Version
|
246
|
-
version: '
|
246
|
+
version: '6.0'
|
247
247
|
- !ruby/object:Gem::Dependency
|
248
248
|
name: jwt
|
249
249
|
requirement: !ruby/object:Gem::Requirement
|
@@ -410,6 +410,8 @@ files:
|
|
410
410
|
- lib/startback/support/logger.rb
|
411
411
|
- lib/startback/support/operation_runner.rb
|
412
412
|
- lib/startback/support/robustness.rb
|
413
|
+
- lib/startback/support/transaction_manager.rb
|
414
|
+
- lib/startback/support/transaction_policy.rb
|
413
415
|
- lib/startback/version.rb
|
414
416
|
- lib/startback/web/api.rb
|
415
417
|
- lib/startback/web/auto_caching.rb
|
@@ -437,6 +439,7 @@ files:
|
|
437
439
|
- spec/unit/support/operation_runner/test_around_run.rb
|
438
440
|
- spec/unit/support/operation_runner/test_before_after_call.rb
|
439
441
|
- spec/unit/support/test_robusteness.rb
|
442
|
+
- spec/unit/support/test_transaction_manager.rb
|
440
443
|
- spec/unit/test_event.rb
|
441
444
|
- spec/unit/test_operation.rb
|
442
445
|
- spec/unit/test_support.rb
|
@@ -469,7 +472,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
469
472
|
- !ruby/object:Gem::Version
|
470
473
|
version: '0'
|
471
474
|
requirements: []
|
472
|
-
rubygems_version: 3.2.
|
475
|
+
rubygems_version: 3.2.32
|
473
476
|
signing_key:
|
474
477
|
specification_version: 4
|
475
478
|
summary: Got Your Ruby Back
|