Class: Micro::Observers::Set
- Inherits:
-
Object
- Object
- Micro::Observers::Set
- Defined in:
- lib/micro/observers/set.rb
Class Method Summary collapse
Instance Method Summary collapse
- #attach(*args) ⇒ Object
- #call(*events, data: nil) ⇒ Object
- #call!(*events, data: nil) ⇒ Object
- #count ⇒ Object
- #detach(*args) ⇒ Object
- #included?(observer) ⇒ Boolean
-
#initialize(subject, subscribers: nil) ⇒ Set
constructor
A new instance of Set.
- #inspect ⇒ Object
- #none? ⇒ Boolean
- #notify(*events, data: nil) ⇒ Object
- #notify!(*events, data: nil) ⇒ Object
- #on(options = EMPTY_HASH) ⇒ Object
- #some? ⇒ Boolean
- #subject_changed(state) ⇒ Object
- #subject_changed! ⇒ Object
- #subject_changed? ⇒ Boolean
Constructor Details
Class Method Details
.for(subject) ⇒ Object
20 21 22 |
# File 'lib/micro/observers/set.rb', line 20 def self.for(subject) new(subject) end |
Instance Method Details
#attach(*args) ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/micro/observers/set.rb', line 64 def attach(*args) = args.last.is_a?(Hash) ? args.pop : EMPTY_HASH Utils::Arrays.flatten_and_compact(args).each do |observer| @subscribers << MapSubscriber[observer, ] unless included?(observer) end self end |
#call(*events, data: nil) ⇒ Object
106 107 108 109 110 |
# File 'lib/micro/observers/set.rb', line 106 def call(*events, data: nil) broadcast_if_subject_changed(Event::Names[events, default: CALL_EVENT], data) self end |
#call!(*events, data: nil) ⇒ Object
112 113 114 115 116 |
# File 'lib/micro/observers/set.rb', line 112 def call!(*events, data: nil) broadcast(Event::Names[events, default: CALL_EVENT], data) self end |
#count ⇒ Object
32 33 34 |
# File 'lib/micro/observers/set.rb', line 32 def count @subscribers.size end |
#detach(*args) ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/micro/observers/set.rb', line 74 def detach(*args) Utils::Arrays.flatten_and_compact(args).each do |observer| @subscribers.delete_if(&EqualTo[observer]) end self end |
#included?(observer) ⇒ Boolean
60 61 62 |
# File 'lib/micro/observers/set.rb', line 60 def included?(observer) @subscribers.any?(&EqualTo[observer]) end |
#inspect ⇒ Object
118 119 120 121 122 |
# File 'lib/micro/observers/set.rb', line 118 def inspect subs = @subscribers.empty? ? @subscribers : @subscribers.map(&GetObserver) '<#%s @subject=%s @subject_changed=%p @subscribers=%p>' % [self.class, @subject, @subject_changed, subs] end |
#none? ⇒ Boolean
36 37 38 |
# File 'lib/micro/observers/set.rb', line 36 def none? @subscribers.empty? end |
#notify(*events, data: nil) ⇒ Object
92 93 94 95 96 |
# File 'lib/micro/observers/set.rb', line 92 def notify(*events, data: nil) broadcast_if_subject_changed(Event::Names.fetch(events), data) self end |
#notify!(*events, data: nil) ⇒ Object
98 99 100 101 102 |
# File 'lib/micro/observers/set.rb', line 98 def notify!(*events, data: nil) broadcast(Event::Names.fetch(events), data) self end |
#on(options = EMPTY_HASH) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/micro/observers/set.rb', line 82 def on( = EMPTY_HASH) event, callable, with, context = [:event], [:call], [:with], [:context] return self unless event.is_a?(Symbol) && callable.respond_to?(:call) @subscribers << [:callable, event, [callable, with, context]] unless included?(callable) self end |
#some? ⇒ Boolean
40 41 42 |
# File 'lib/micro/observers/set.rb', line 40 def some? !none? end |
#subject_changed(state) ⇒ Object
50 51 52 53 54 |
# File 'lib/micro/observers/set.rb', line 50 def subject_changed(state) return @subject_changed = state if state == true || state == false raise ArgumentError, INVALID_BOOLEAN_MSG end |
#subject_changed! ⇒ Object
56 57 58 |
# File 'lib/micro/observers/set.rb', line 56 def subject_changed! subject_changed(true) end |
#subject_changed? ⇒ Boolean
44 45 46 |
# File 'lib/micro/observers/set.rb', line 44 def subject_changed? @subject_changed end |