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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 544da5f2ff4ff9484ed246bbe6c0068d19d9077f7fc56fef34adde6c7a298e1a
4
- data.tar.gz: f56e2327c4b3a6fbdd29c8eac9dc6751d64b9da6b186c9cec093c3d8b97973b6
3
+ metadata.gz: 10937b9e7877dd7393837c70185fe245493a35234d66a899efee5fbebb539b75
4
+ data.tar.gz: 5fd7234b34b09f875dcf9b21ad819eb5072ffed902ddd08ca6c2e6a68e3ec1df
5
5
  SHA512:
6
- metadata.gz: e206556b64bc960040527ec8ad17d2e0a610ff9a63d8f46343e687e762cc6d44ab2a462ca9e5897144bb328636c86587f11517847466c25dd360d3866636d488
7
- data.tar.gz: 4965c3257c6a6c2a93b728a97821ffcd10613f2ab596d7c1073e39ff86dcdd66bda838241164f361fd9f4adc7edc5b9671914732e8c27c0c154bca7093452ca3
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
- @channel = @bunny.create_channel
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 :channel, :options
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
@@ -1,6 +1,6 @@
1
1
  module Startback
2
2
  class Operation
3
- class MultiOperation
3
+ class MultiOperation < Operation
4
4
 
5
5
  def initialize(ops = [])
6
6
  @ops = ops
@@ -29,6 +29,7 @@ module Startback
29
29
  # end
30
30
  #
31
31
  class Operation
32
+ extend Support::TransactionPolicy
32
33
  include Errors
33
34
  include Support::OperationRunner
34
35
  include Support::Hooks.new(:call)
@@ -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
@@ -19,3 +19,5 @@ require_relative 'support/logger'
19
19
  require_relative 'support/robustness'
20
20
  require_relative 'support/hooks'
21
21
  require_relative 'support/operation_runner'
22
+ require_relative 'support/transaction_policy'
23
+ require_relative 'support/transaction_manager'
@@ -1,8 +1,8 @@
1
1
  module Startback
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 8
5
- TINY = 2
4
+ MINOR = 10
5
+ TINY = 0
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
@@ -68,7 +68,7 @@ module Startback
68
68
  end
69
69
 
70
70
  context 'the around feature with a class' do
71
- class TransactionManager
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 TransactionManager.instance
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(TransactionManager.instance.called).to eql(true)
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.8.2
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-05-05 00:00:00.000000000 Z
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: '1.0'
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: '1.0'
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: '4.3'
233
+ version: 5.3.1
234
234
  - - "<"
235
235
  - !ruby/object:Gem::Version
236
- version: '5.0'
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: '4.3'
243
+ version: 5.3.1
244
244
  - - "<"
245
245
  - !ruby/object:Gem::Version
246
- version: '5.0'
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.15
475
+ rubygems_version: 3.2.32
473
476
  signing_key:
474
477
  specification_version: 4
475
478
  summary: Got Your Ruby Back