low_event 0.4.0 → 0.5.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/events/event.rb +3 -8
- data/lib/events/hidden_event.rb +36 -0
- data/lib/low_event.rb +2 -2
- data/lib/pool/branch_event.rb +18 -0
- data/lib/pool/event_pool.rb +26 -6
- data/lib/pool/event_tree.rb +10 -3
- data/lib/support/pool_hash.rb +5 -1
- data/lib/version.rb +1 -1
- metadata +15 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c63adedbf6028a0a6c3e15620d5ea736ba53961d318b22ab44d6bc5d75b853b3
|
|
4
|
+
data.tar.gz: 7956e7c903e68097c74d5eb41a706b8948ed0b98dea333748b3caec15786e890
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9c801ef8056b37fea3559da0c9f2729b3c955bf08fd7b430691ea66504a98061d890754d6d1eff7be2173e4ee1a83913eec151902ca2bce4f64da11b6da8e3a4
|
|
7
|
+
data.tar.gz: 7c801efafc85f09105f91fc3961988304b6c3646f01a30d45cceed0236bf5e20750f91d03cae4958d209a90269f254800d21bbfe55170f3bfe03a419ea32334b
|
data/lib/events/event.rb
CHANGED
|
@@ -21,8 +21,6 @@ module Low
|
|
|
21
21
|
attr_reader :key, :action, :created_at
|
|
22
22
|
attr_accessor :children
|
|
23
23
|
|
|
24
|
-
ROOT_FIBER = Fiber.current
|
|
25
|
-
|
|
26
24
|
def initialize(key:, action: nil, children: [])
|
|
27
25
|
@key = key
|
|
28
26
|
@action = action
|
|
@@ -32,23 +30,20 @@ module Low
|
|
|
32
30
|
|
|
33
31
|
def trigger
|
|
34
32
|
event_tree = branch
|
|
35
|
-
key = Observers
|
|
33
|
+
key = Observers[@key]
|
|
36
34
|
key.trigger(event: self) { restore_level(event_tree:) }
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
def take
|
|
40
38
|
event_tree = branch
|
|
41
|
-
key = Observers
|
|
39
|
+
key = Observers[@key]
|
|
42
40
|
key.take(event: self) { restore_level(event_tree:) }
|
|
43
41
|
end
|
|
44
42
|
|
|
45
43
|
private
|
|
46
44
|
|
|
47
45
|
def branch
|
|
48
|
-
|
|
49
|
-
return nil if ROOT_FIBER == Fiber.current
|
|
50
|
-
|
|
51
|
-
event_tree = Low::Providers['low.event.pool'].current_event_tree
|
|
46
|
+
event_tree = Providers['low.event.pool'].current_event_tree(event: self)
|
|
52
47
|
event_tree.branch(event: self)
|
|
53
48
|
end
|
|
54
49
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'low_type'
|
|
4
|
+
|
|
5
|
+
module Low
|
|
6
|
+
module Events
|
|
7
|
+
# An event that happens on event tree branching and isn't added to the event tree/sequence.
|
|
8
|
+
class HiddenEvent
|
|
9
|
+
include LowType
|
|
10
|
+
|
|
11
|
+
attr_reader :key, :action, :created_at
|
|
12
|
+
|
|
13
|
+
def initialize(key:, action: nil)
|
|
14
|
+
@key = key
|
|
15
|
+
@action = action
|
|
16
|
+
@created_at = Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def trigger
|
|
20
|
+
event_tree = branch
|
|
21
|
+
key = Observers[@key]
|
|
22
|
+
key.trigger(event: self) { restore_level(event_tree:) }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class << self
|
|
26
|
+
def trigger(**kwargs)
|
|
27
|
+
new(**kwargs).trigger
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def inherited(child)
|
|
31
|
+
child.include LowType
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
data/lib/low_event.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'low_dependency'
|
|
4
3
|
require 'low_type'
|
|
5
4
|
require 'observers'
|
|
5
|
+
require 'providers'
|
|
6
6
|
|
|
7
7
|
require_relative 'events/event'
|
|
8
8
|
require_relative 'events/render_event'
|
|
@@ -12,7 +12,7 @@ require_relative 'events/status_event'
|
|
|
12
12
|
require_relative 'factories/response_factory' # TODO: Find out who's using this and require it there.
|
|
13
13
|
require_relative 'pool/event_pool'
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Providers.define('low.event.pool') do
|
|
16
16
|
Low::Events::EventPool.new
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../events/hidden_event'
|
|
4
|
+
|
|
5
|
+
module Low
|
|
6
|
+
module Events
|
|
7
|
+
class BranchEvent < HiddenEvent
|
|
8
|
+
attr_reader :event_tree, :event
|
|
9
|
+
|
|
10
|
+
def initialize(event_tree:, event:)
|
|
11
|
+
super(key: BranchEvent, action: :branch)
|
|
12
|
+
|
|
13
|
+
@event_tree = event_tree
|
|
14
|
+
@event = event
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/pool/event_pool.rb
CHANGED
|
@@ -1,29 +1,49 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'observers'
|
|
4
|
+
|
|
5
|
+
require_relative '../events/request_event'
|
|
3
6
|
require_relative 'event_tree'
|
|
4
7
|
require_relative '../support/pool_hash'
|
|
5
8
|
|
|
6
9
|
module Low
|
|
7
10
|
module Events
|
|
8
11
|
class EventPool
|
|
9
|
-
|
|
12
|
+
include Observers
|
|
13
|
+
|
|
14
|
+
BUFFER_SIZE = 100
|
|
10
15
|
|
|
11
16
|
def initialize
|
|
12
17
|
@pool = Support::PoolHash.new(BUFFER_SIZE)
|
|
18
|
+
@request_counts = Support::PoolHash.new(BUFFER_SIZE)
|
|
13
19
|
end
|
|
14
20
|
|
|
15
|
-
def current_event_tree
|
|
16
|
-
|
|
21
|
+
def current_event_tree(event:)
|
|
22
|
+
request_id = request_id(event:)
|
|
23
|
+
|
|
24
|
+
return @pool[request_id] if @pool[request_id]
|
|
25
|
+
|
|
26
|
+
event_tree = @pool.add(request_id, EventTree.new(request_id:))
|
|
27
|
+
trigger action: :new_event_tree, event: event_tree
|
|
28
|
+
|
|
29
|
+
event_tree
|
|
17
30
|
end
|
|
18
|
-
|
|
31
|
+
|
|
19
32
|
def event_trees
|
|
20
33
|
@pool
|
|
21
34
|
end
|
|
22
35
|
|
|
23
36
|
private
|
|
24
37
|
|
|
25
|
-
def
|
|
26
|
-
Fiber.current
|
|
38
|
+
def request_id(event:)
|
|
39
|
+
fiber_id = Fiber.current.object_id
|
|
40
|
+
increment_request_counts(fiber_id:) if event.is_a?(RequestEvent)
|
|
41
|
+
"#{fiber_id}-#{@request_counts[fiber_id]}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def increment_request_counts(fiber_id:)
|
|
45
|
+
@request_counts[fiber_id] ||= 0
|
|
46
|
+
@request_counts[fiber_id] += 1
|
|
27
47
|
end
|
|
28
48
|
end
|
|
29
49
|
end
|
data/lib/pool/event_tree.rb
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'observers'
|
|
4
|
+
require_relative 'branch_event'
|
|
5
|
+
|
|
3
6
|
module Low
|
|
4
7
|
module Events
|
|
5
8
|
class EventTree
|
|
6
|
-
|
|
9
|
+
include Observers
|
|
10
|
+
|
|
11
|
+
attr_reader :request_id, :root_event, :sequence
|
|
7
12
|
attr_accessor :current_event
|
|
8
13
|
|
|
9
|
-
def initialize
|
|
14
|
+
def initialize(request_id: nil)
|
|
15
|
+
@request_id = request_id
|
|
10
16
|
@root_event = nil
|
|
11
17
|
@current_event = nil
|
|
12
|
-
|
|
13
18
|
@sequence = []
|
|
14
19
|
end
|
|
15
20
|
|
|
@@ -22,6 +27,8 @@ module Low
|
|
|
22
27
|
else
|
|
23
28
|
@current_event.children << event
|
|
24
29
|
end
|
|
30
|
+
|
|
31
|
+
trigger action: :branch, event: BranchEvent.new(event_tree: self, event:)
|
|
25
32
|
end
|
|
26
33
|
end
|
|
27
34
|
end
|
data/lib/support/pool_hash.rb
CHANGED
|
@@ -11,7 +11,11 @@ module Low
|
|
|
11
11
|
|
|
12
12
|
def add(key, value)
|
|
13
13
|
# Prune the hash when a new item added.
|
|
14
|
-
|
|
14
|
+
if size >= @max_size && !key?(key)
|
|
15
|
+
# TODO: Notify event pool that item was removed.
|
|
16
|
+
_old_key, _old_value = shift
|
|
17
|
+
end
|
|
18
|
+
|
|
15
19
|
self[key] = value
|
|
16
20
|
end
|
|
17
21
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: low_event
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -10,35 +10,35 @@ cert_chain: []
|
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
|
-
name:
|
|
13
|
+
name: low_type
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '0'
|
|
18
|
+
version: '1.0'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '0'
|
|
25
|
+
version: '1.0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
|
-
name:
|
|
27
|
+
name: observers
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
|
-
- - "
|
|
30
|
+
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '0'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- - "
|
|
37
|
+
- - ">="
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
39
|
+
version: '0'
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
|
-
name:
|
|
41
|
+
name: protocol-http
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
44
|
- - ">="
|
|
@@ -52,7 +52,7 @@ dependencies:
|
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '0'
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
|
-
name:
|
|
55
|
+
name: providers
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - ">="
|
|
@@ -73,12 +73,14 @@ extensions: []
|
|
|
73
73
|
extra_rdoc_files: []
|
|
74
74
|
files:
|
|
75
75
|
- lib/events/event.rb
|
|
76
|
+
- lib/events/hidden_event.rb
|
|
76
77
|
- lib/events/render_event.rb
|
|
77
78
|
- lib/events/request_event.rb
|
|
78
79
|
- lib/events/response_event.rb
|
|
79
80
|
- lib/events/status_event.rb
|
|
80
81
|
- lib/factories/response_factory.rb
|
|
81
82
|
- lib/low_event.rb
|
|
83
|
+
- lib/pool/branch_event.rb
|
|
82
84
|
- lib/pool/event_pool.rb
|
|
83
85
|
- lib/pool/event_tree.rb
|
|
84
86
|
- lib/support/pool_hash.rb
|