low_event 0.5.0 → 0.7.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: c63adedbf6028a0a6c3e15620d5ea736ba53961d318b22ab44d6bc5d75b853b3
4
- data.tar.gz: 7956e7c903e68097c74d5eb41a706b8948ed0b98dea333748b3caec15786e890
3
+ metadata.gz: 795d5b01229eb54ebe8f4a6ed2b19567f6076d4fade5fe84f3d4fb52eca08a33
4
+ data.tar.gz: 3763c499defe0d8bf63dbcdbfa5913bcf670acfe9e34992c38d43a2fc49aec07
5
5
  SHA512:
6
- metadata.gz: 9c801ef8056b37fea3559da0c9f2729b3c955bf08fd7b430691ea66504a98061d890754d6d1eff7be2173e4ee1a83913eec151902ca2bce4f64da11b6da8e3a4
7
- data.tar.gz: 7c801efafc85f09105f91fc3961988304b6c3646f01a30d45cceed0236bf5e20750f91d03cae4958d209a90269f254800d21bbfe55170f3bfe03a419ea32334b
6
+ metadata.gz: 04e478f509ad364b1fb67c14674264905013024b37ac52f0e737e354981f424842879d67b06656ad68c03375f069fcfc84b2a782fe05d9704465bd649d0991aa
7
+ data.tar.gz: cff5e78df4c69a0cc862c11b80b1a115fcd1b7d1d7819f09ce3269da0f1bd7b48cae9f0a13bf305149e786befa2fce9b34989365a927c26bb3bc4a192cb69649
@@ -18,7 +18,7 @@ module Low
18
18
 
19
19
  def trigger
20
20
  event_tree = branch
21
- key = Observers[@key]
21
+ key = Observers::Keys[@key]
22
22
  key.trigger(event: self) { restore_level(event_tree:) }
23
23
  end
24
24
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'event'
3
+ require_relative '../interfaces/event'
4
4
 
5
5
  module Low
6
6
  module Events
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'protocol/http'
4
- require_relative 'event'
4
+ require_relative '../interfaces/event'
5
5
 
6
6
  module Low
7
7
  module Events
@@ -1,18 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'event'
3
+ require_relative '../interfaces/event'
4
4
 
5
5
  module Low
6
6
  module Events
7
7
  class StatusEvent < Event
8
8
  attr_reader :status, :request
9
9
 
10
- def initialize(status:, request:, action: :render)
11
- super(key: status, action:)
10
+ def initialize(status:, request:, key: nil, action: :render)
11
+ super(key: key || status, action:)
12
12
 
13
13
  @status = status
14
14
  @request = request
15
15
  end
16
+
17
+ # Status is a complex type that can be represented by both "Status" generically and "Status[:code]" specifically.
18
+ class << self
19
+ def trigger(status:, **kwargs)
20
+ new(status:, **kwargs).trigger || new(status:, key: Status, **kwargs).trigger
21
+ end
22
+ end
16
23
  end
17
24
  end
18
25
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Low
4
+ module Events
5
+ module Definable
6
+ def define(key = self)
7
+ yield observers(key)
8
+ end
9
+
10
+ class << self
11
+ def included(klass)
12
+ klass.extend Definable
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'low_type'
3
4
  require 'observers'
5
+ require_relative 'definable'
4
6
  require_relative '../support/value_object'
5
7
 
6
8
  module Low
@@ -11,16 +13,19 @@ module Low
11
13
  # The result of the previous event is made available to the next event. [UNRELEASED]
12
14
  #
13
15
  # Integrations:
14
- # - Observers for observer pattern via an event-centric API
16
+ # - Observers for observer pattern which we wrap in an event-centric API
15
17
  # - EventPool for a tree of events and their child events
16
18
  # - LowState for state machines to trigger multiple actions [UNLRELEASED]
17
19
  class Event
18
20
  include LowType
21
+ include Observers
22
+ include Events::Definable
19
23
  include Support::ValueObject
20
24
 
21
25
  attr_reader :key, :action, :created_at
22
26
  attr_accessor :children
23
27
 
28
+ # The subclass will provide the key, usually "self.class".
24
29
  def initialize(key:, action: nil, children: [])
25
30
  @key = key
26
31
  @action = action
@@ -30,16 +35,44 @@ module Low
30
35
 
31
36
  def trigger
32
37
  event_tree = branch
33
- key = Observers[@key]
38
+ key = Observers::Keys[@key]
34
39
  key.trigger(event: self) { restore_level(event_tree:) }
35
40
  end
36
41
 
37
42
  def take
38
43
  event_tree = branch
39
- key = Observers[@key]
44
+ key = Observers::Keys[@key]
40
45
  key.take(event: self) { restore_level(event_tree:) }
41
46
  end
42
47
 
48
+ class << self
49
+ def trigger(**kwargs) = new(**kwargs).trigger
50
+ def take(**kwargs) = new(**kwargs).take
51
+
52
+ def inherited(child)
53
+ child.include LowType
54
+
55
+ increase_count
56
+ add_event(child)
57
+ end
58
+
59
+ def count
60
+ @count ||= 0
61
+ end
62
+
63
+ def increase_count
64
+ @count = count + 1
65
+ end
66
+
67
+ def events
68
+ @events ||= []
69
+ end
70
+
71
+ def add_event(event)
72
+ events << event
73
+ end
74
+ end
75
+
43
76
  private
44
77
 
45
78
  def branch
@@ -50,19 +83,5 @@ module Low
50
83
  def restore_level(event_tree:)
51
84
  event_tree.current_event = self if event_tree.respond_to?(:current_event)
52
85
  end
53
-
54
- class << self
55
- def trigger(**kwargs)
56
- new(**kwargs).trigger
57
- end
58
-
59
- def take(**kwargs)
60
- new(**kwargs).take
61
- end
62
-
63
- def inherited(child)
64
- child.include LowType
65
- end
66
- end
67
86
  end
68
87
  end
data/lib/low_event.rb CHANGED
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'low_type'
4
- require 'observers'
5
3
  require 'providers'
6
4
 
7
- require_relative 'events/event'
8
5
  require_relative 'events/render_event'
9
6
  require_relative 'events/request_event'
10
7
  require_relative 'events/response_event'
11
8
  require_relative 'events/status_event'
12
9
  require_relative 'factories/response_factory' # TODO: Find out who's using this and require it there.
10
+ require_relative 'interfaces/event'
13
11
  require_relative 'pool/event_pool'
14
12
 
15
13
  Providers.define('low.event.pool') do
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.5.0'
4
+ EVENT_VERSION = '0.7.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.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi
@@ -72,13 +72,14 @@ executables: []
72
72
  extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
- - lib/events/event.rb
76
75
  - lib/events/hidden_event.rb
77
76
  - lib/events/render_event.rb
78
77
  - lib/events/request_event.rb
79
78
  - lib/events/response_event.rb
80
79
  - lib/events/status_event.rb
81
80
  - lib/factories/response_factory.rb
81
+ - lib/interfaces/definable.rb
82
+ - lib/interfaces/event.rb
82
83
  - lib/low_event.rb
83
84
  - lib/pool/branch_event.rb
84
85
  - lib/pool/event_pool.rb
@@ -105,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
106
  - !ruby/object:Gem::Version
106
107
  version: '0'
107
108
  requirements: []
108
- rubygems_version: 4.0.6
109
+ rubygems_version: 4.0.10
109
110
  specification_version: 4
110
111
  summary: Observable events
111
112
  test_files: []