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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf4bf7bbf94dbe27393a82dc61c8660b24bc62f55564e4448ed4c696b5809141
4
- data.tar.gz: ac1225567c974ff857aad213e0f700330176d7fd2ee90f6336cc3aa739ba2790
3
+ metadata.gz: c63adedbf6028a0a6c3e15620d5ea736ba53961d318b22ab44d6bc5d75b853b3
4
+ data.tar.gz: 7956e7c903e68097c74d5eb41a706b8948ed0b98dea333748b3caec15786e890
5
5
  SHA512:
6
- metadata.gz: 0add64213a67957924c8af4259633fe3f0aa53b4f5d6ba69939292e2fd3d94f2dddb3d29e71b170ea053e57b07a0c3a208762ff9206a19fa9a664bfafa431b31
7
- data.tar.gz: fb618e3d9cfab04ea382537631c1abffafbc153a24acd5c6124bf3ed1495572497a8432b68018bfa68f9ee93c966746196dc7adc6b5b2835afb3d1a9001765d9
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::Keys[@key] || raise(Observers::Keys::MissingKeyError)
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::Keys[@key] || raise(Observers::Keys::MissingKeyError)
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
- # Don't create a singular ever-growing stream tree.
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
- LowDependency.provide('low.event.pool') do
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
@@ -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
- BUFFER_SIZE = 100.freeze
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
- @pool[stream_id] || @pool.add(stream_id, EventTree.new)
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 stream_id
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
@@ -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
- attr_reader :root_event, :sequence
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
@@ -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
- shift if size >= @max_size && !key?(key)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Low
4
- EVENT_VERSION = '0.4.0'
4
+ EVENT_VERSION = '0.5.0'
5
5
  end
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.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: low_dependency
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: low_type
27
+ name: observers
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "~>"
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '1.0'
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: '1.0'
39
+ version: '0'
40
40
  - !ruby/object:Gem::Dependency
41
- name: observers
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: protocol-http
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