observers 0.1.0 → 0.2.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: 82c40c0a93bc5ffefe86c3c27685e18fd699a7188c8ffc10899386974e48ac3c
4
- data.tar.gz: 70992908f64214fc993e2bad241c7bb81cccbf6b07d4a895e79a8bf173299b05
3
+ metadata.gz: b1c16092762a682c96f1cc007988ec2406d3b2dd6ce91c1b793b2fbf4f95d628
4
+ data.tar.gz: 18045745a7cc775e61dd9afc1f46a80074565be6986a37ead5b30d49105a6e77
5
5
  SHA512:
6
- metadata.gz: d75da6da3eb93b6e8e3e8fdd9e343560d96bfec7828fe38822945d0927edddd72e80a93e15bb8421629aa2f0d64e6f0012dd242de27204ecf9bc8783ece184b3
7
- data.tar.gz: 58df26a6e12b767cbd9ffc46f3eda991a04ab85791c714e61fabd92b98e6e4ec64d537d17f57358cf2974516dbf15375f9320eba4dd87a6fa3fc97c5197fa7da
6
+ metadata.gz: 8c3eb3b00120bfcd498345c0f1ef44322212eacaa6856d794fb9e74044b7a26fa4a6502067cec87aaeff241b4835f5f5e0c048a80d59fe61e3dda277b84c03af
7
+ data.tar.gz: 843137754e96d5187b23f36fa72e2aa423cba6b9e0af82a99d3b84ef046bc7c2feb76fd3acfe0b3607ea55a6ef250d23ee0f90a211266bd551d5b2045211156f
@@ -4,12 +4,14 @@ module Observers
4
4
  class Observer
5
5
  attr_reader :order
6
6
 
7
- def initialize(observer:, order:)
7
+ def initialize(observer:, action:, order:)
8
8
  @observer = observer
9
+ @action = action
9
10
  @order = order
10
11
  end
11
12
 
12
13
  def trigger(action:, event:)
14
+ action = @action if @action
13
15
  event ? @observer.send(action, **{ event: event }) : @observer.send(action)
14
16
  rescue ArgumentError
15
17
  type = @observer.instance_of?(Class) ? @observer : @observer.class
data/lib/observables.rb CHANGED
@@ -24,8 +24,8 @@ module Observers
24
24
  observable.add_observer(observer:)
25
25
  end
26
26
 
27
- def trigger(*args, key:)
28
- key, action, event = parse_args(*args, key:)
27
+ def trigger(actionable:, key:)
28
+ action, event = parse_actionable(actionable:)
29
29
 
30
30
  observables[key].observers.each do |observer|
31
31
  observer.trigger(action:, event:)
@@ -34,8 +34,8 @@ module Observers
34
34
  nil # The trigger method is boring and uneventful, it fires events and if it doesn't complain then all is okay.
35
35
  end
36
36
 
37
- def take(*args, key:)
38
- key, action, event = parse_args(*args, key:)
37
+ def take(actionable:, key:)
38
+ action, event = parse_actionable(actionable:)
39
39
 
40
40
  observables[key].observers.each do |observer|
41
41
  result = observer.trigger(action:, event:)
@@ -47,23 +47,16 @@ module Observers
47
47
 
48
48
  private
49
49
 
50
- def parse_args(*args, key:)
51
- action = nil
50
+ def parse_actionable(actionable:)
51
+ action = actionable
52
52
  event = nil
53
53
 
54
- case args.count
55
- when 1
56
- action = args.first
57
- when 2
58
- key, action = args
59
- end
60
-
61
- if action.respond_to?(:action)
62
- event = action
54
+ if actionable.class.ancestors.any? { |ancestor| ancestor.to_s == 'Low::Event' }
55
+ event = actionable
63
56
  action = event.action
64
57
  end
65
58
 
66
- [key, action, event]
59
+ [action, event]
67
60
  end
68
61
  end
69
62
  end
data/lib/observers.rb CHANGED
@@ -8,19 +8,19 @@ module Observers
8
8
  Observables.upsert(key:)
9
9
  end
10
10
 
11
- # TODO: Test order.
12
- def observe(key, order: Observables.observables.count)
13
- observer = Observer.new(observer: self, order:)
11
+ # TODO: Unit test order.
12
+ def observe(key, action = nil, order: Observables.observables.count)
13
+ observer = Observer.new(observer: self, action:, order:)
14
14
  Observables.observe(key:, observer:)
15
15
  end
16
16
 
17
- def trigger(*args)
18
- Observables.trigger(*args, key: self)
17
+ def trigger(actionable, key = nil)
18
+ Observables.trigger(actionable:, key: key || self)
19
19
  end
20
20
 
21
21
  # Returns the first observer with a non-nil return value.
22
22
  # One day it may use ractors and be concurrent, if we can freeze the args.
23
- def take(*args)
24
- Observables.take(*args, key: self)
23
+ def take(actionable, key = nil)
24
+ Observables.take(actionable:, key: key || self)
25
25
  end
26
26
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Observers
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: observers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi