startback 0.12.1 → 0.12.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '085ac55f8fc68a8b8806570359e68ae9cba48a0c0cef83645bfb9f7133fb38ce'
4
- data.tar.gz: 231685b5e7c8c53a3cb086bbdc8ef6728132a942a47b59e6ac5c1ca6560b2725
3
+ metadata.gz: 7f4770d1267ad944224e11f6c10ddaae3f2c3666860ef31c05ea3323282dda34
4
+ data.tar.gz: ec1a61367ab0947be2088dae981c6956359a26bc2517282a464e44e6449331b4
5
5
  SHA512:
6
- metadata.gz: 3c12830f86d5e0a067b801ebc752c894d7abec27c9745bb8eb307eee010a049275b49f3bfa1f55a1b7bf168c9fc3222b7039f6dc243f96c5268d369b625eabb3
7
- data.tar.gz: dedb51337c356d9208ea727155c978dd6e937c2d8016189c17c606820975e81d1ede4e004a22878e8060dd58cd84280a4119f1a1996dae5c26bbdfc660009029
6
+ metadata.gz: 19813029ac9f81b1aed96f69a8e6ddd45e509d87e5b3bd05859f0b9155c16c5a05035cf2a28ff7df2df28f467a368702fa83180c24a62caf498337c3dde6d7da
7
+ data.tar.gz: 57abc7390c595f5c024276ed07ccb3580312d2de76a6a622e0a3284afefb38244b000b26e9f005d4516de67f3afccdc4789988466ffbb220f106cce3514f83b4
@@ -112,6 +112,13 @@ module Startback
112
112
  to_h.to_json(*args, &bl)
113
113
  end
114
114
 
115
+ def fork(h = nil)
116
+ dup.tap{|duped|
117
+ self.class.h_factor!(duped, h) if h
118
+ yield(duped) if block_given?
119
+ }
120
+ end
121
+
115
122
  def dup
116
123
  super.tap{|c|
117
124
  c.send(:clean_factored!)
@@ -16,9 +16,12 @@ module Startback
16
16
 
17
17
  def initialize(engine)
18
18
  @engine = engine
19
+ @context = nil
19
20
  install_listeners
20
21
  end
21
22
  attr_reader :engine
23
+ attr_accessor :context
24
+ protected :context=
22
25
 
23
26
  protected
24
27
 
@@ -40,7 +43,7 @@ module Startback
40
43
  def async(exchange, queue)
41
44
  bus.async.listen(exchange, queue) do |event_data|
42
45
  event = engine.factor_event(event_data)
43
- dup.call(event)
46
+ with_context(event.context).call(event)
44
47
  end
45
48
  end
46
49
 
@@ -50,7 +53,7 @@ module Startback
50
53
  def sync(exchange, queue)
51
54
  bus.listen(exchange, queue) do |event_data|
52
55
  event = engine.factor_event(event_data)
53
- dup.call(event)
56
+ with_context(event.context).call(event)
54
57
  end
55
58
  end
56
59
 
@@ -68,6 +71,14 @@ module Startback
68
71
  raise NotImplementedError
69
72
  end
70
73
 
74
+ def with_context(context)
75
+ dup.tap{|a| a.send(:context=, context) }
76
+ end
77
+
78
+ def operation_world(op)
79
+ super(op).merge(context: ctx)
80
+ end
81
+
71
82
  end # class Agent
72
83
  end # class Event
73
84
  end # module Starback
@@ -86,7 +86,7 @@ module Startback
86
86
  end
87
87
 
88
88
  def factor_event(event_data)
89
- Event.json(event_data, context.dup)
89
+ Event.json(event_data, context)
90
90
  end
91
91
 
92
92
  class Runner
@@ -23,6 +23,7 @@ module Startback
23
23
  def self.json(src, context)
24
24
  parsed = JSON.parse(src)
25
25
  klass = Kernel.const_get(parsed['type'])
26
+ context = context.fork(parsed['context']) if context
26
27
  klass.new(parsed['type'], parsed['data'], context)
27
28
  end
28
29
 
@@ -2,7 +2,7 @@ module Startback
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 12
5
- TINY = 1
5
+ TINY = 2
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
data/spec/spec_helper.rb CHANGED
@@ -11,6 +11,26 @@ RSpec.configure do |c|
11
11
  c.include SpecHelpers
12
12
  end
13
13
 
14
+ class SubContext < Startback::Context
15
+ attr_accessor :foo
16
+ h_factory do |c,h|
17
+ c.foo = h["foo"]
18
+ end
19
+ h_dump do |h|
20
+ h.merge!("foo" => foo)
21
+ end
22
+ end
23
+
24
+ class SubContext
25
+ attr_accessor :bar
26
+ h_factory do |c,h|
27
+ c.bar = h["bar"]
28
+ end
29
+ h_dump do |h|
30
+ h.merge!("bar" => bar)
31
+ end
32
+ end
33
+
14
34
  class User
15
35
  class Changed < Startback::Event
16
36
  end
@@ -3,12 +3,8 @@ require 'spec_helper'
3
3
  module Startback
4
4
  describe Context, "dup" do
5
5
 
6
- class Subcontext < Context
7
- attr_accessor :foo
8
- end
9
-
10
6
  let(:context) {
11
- Subcontext.new.tap{|s| s.foo = "bar" }
7
+ SubContext.new.tap{|s| s.foo = "bar" }
12
8
  }
13
9
 
14
10
  class ContextRelatedAbstraction
@@ -27,7 +23,7 @@ module Startback
27
23
  expect(x).not_to be(context)
28
24
  }
29
25
  expect(seen).to be(got)
30
- expect(got).to be_a(Subcontext)
26
+ expect(got).to be_a(SubContext)
31
27
  expect(got).not_to be(context)
32
28
  expect(got.foo).to eql("bar")
33
29
  end
@@ -43,4 +39,4 @@ module Startback
43
39
  end
44
40
 
45
41
  end
46
- end
42
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ module Startback
4
+ describe Context, "fork" do
5
+
6
+ it 'is a simple dup without args' do
7
+ context = SubContext.new
8
+ context.foo = ['hello']
9
+
10
+ forked = context.fork
11
+ puts "Forked: #{forked.inspect}"
12
+ expect(fork).not_to be(context)
13
+ expect(forked.foo).to eql(['hello'])
14
+ expect(forked.foo).to be(context.foo)
15
+ end
16
+
17
+ it 'yields the context if a block is provided' do
18
+ context = SubContext.new
19
+
20
+ seen = false
21
+ context.fork({ 'foo' => 'hello' }) do |forked|
22
+ expect(fork).not_to be(context)
23
+ expect(forked.foo).to eql('hello')
24
+ seen = true
25
+ end
26
+ expect(seen).to eql(true)
27
+ end
28
+
29
+ it 'uses the factory on the hash provided' do
30
+ context = SubContext.new
31
+
32
+ forked = context.fork({ 'foo' => 'hello' })
33
+ expect(fork).not_to be(context)
34
+ expect(forked.foo).to eql('hello')
35
+ end
36
+
37
+ end
38
+ end
@@ -7,26 +7,6 @@ module Startback
7
7
  expect(Context.new.to_json).to eql("{}")
8
8
  end
9
9
 
10
- class SubContext < Context
11
- attr_accessor :foo
12
- h_factory do |c,h|
13
- c.foo = h["foo"]
14
- end
15
- h_dump do |h|
16
- h.merge!("foo" => foo)
17
- end
18
- end
19
-
20
- class SubContext
21
- attr_accessor :bar
22
- h_factory do |c,h|
23
- c.bar = h["bar"]
24
- end
25
- h_dump do |h|
26
- h.merge!("bar" => bar)
27
- end
28
- end
29
-
30
10
  it 'allows installing factories' do
31
11
  expect(Context.h_factories).to be_empty
32
12
  expect(SubContext.h_factories.size).to eql(2)
@@ -50,8 +50,11 @@ module Startback
50
50
  end
51
51
 
52
52
  it 'accepts an explicit context as second argument' do
53
- evt = Event.json(JSON_SRC, 12)
54
- expect(evt.context).to eql(12)
53
+ c = SubContext.new.tap{|x| x.foo = 'hello' }
54
+ evt = Event.json(JSON_SRC, c)
55
+ expect(evt.context).not_to be(c)
56
+ expect(evt.context).to be_a(SubContext)
57
+ expect(evt.context.foo).to eql('hello')
55
58
  end
56
59
  end
57
60
 
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.12.1
4
+ version: 0.12.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-19 00:00:00.000000000 Z
11
+ date: 2022-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -436,6 +436,7 @@ files:
436
436
  - spec/unit/caching/test_entity_cache.rb
437
437
  - spec/unit/context/test_abstraction_factory.rb
438
438
  - spec/unit/context/test_dup.rb
439
+ - spec/unit/context/test_fork.rb
439
440
  - spec/unit/context/test_h_factory.rb
440
441
  - spec/unit/context/test_middleware.rb
441
442
  - spec/unit/event/bus/memory/test_async.rb