Class: Micro::Observers::Set

Inherits:
Object
  • Object
show all
Defined in:
lib/micro/observers/set.rb

Constant Summary collapse

CallableOptions =
-> (arg, block) do
  arg.is_a?(Symbol) && block ? { event: arg, call: block } : arg
end

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(subject, subscribers: nil) ⇒ Set

Returns a new instance of Set.



11
12
13
14
15
# File 'lib/micro/observers/set.rb', line 11

def initialize(subject, subscribers: nil)
  @subject = subject
  @subject_changed = false
  @subscribers = Subscribers.new(subscribers)
end

Class Method Details

.for(subject) ⇒ Object



7
8
9
# File 'lib/micro/observers/set.rb', line 7

def self.for(subject)
  new(subject)
end

Instance Method Details

#attach(*args) ⇒ Object



42
# File 'lib/micro/observers/set.rb', line 42

def attach(*args); @subscribers.attach(args) and self; end

#call(*events, data: nil) ⇒ Object



69
70
71
# File 'lib/micro/observers/set.rb', line 69

def call(*events, data: nil)
  broadcast_if_subject_changed(Event::Names[events, default: CALL_EVENT], data)
end

#call!(*events, data: nil) ⇒ Object



73
74
75
# File 'lib/micro/observers/set.rb', line 73

def call!(*events, data: nil)
  broadcast(Event::Names[events, default: CALL_EVENT], data)
end

#countObject



17
# File 'lib/micro/observers/set.rb', line 17

def count; @subscribers.count; end

#detach(*args) ⇒ Object



43
# File 'lib/micro/observers/set.rb', line 43

def detach(*args); @subscribers.detach(args) and self; end

#include?(observer) ⇒ Boolean Also known as: included?

Returns:

  • (Boolean)


37
38
39
# File 'lib/micro/observers/set.rb', line 37

def include?(observer)
  @subscribers.include?(observer)
end

#inspectObject



77
78
79
80
81
# File 'lib/micro/observers/set.rb', line 77

def inspect
  subs = @subscribers.to_inspect

  '#<%s @subject=%s @subject_changed=%p @subscribers=%p>' % [self.class, @subject, @subject_changed, subs]
end

#none?Boolean

Returns:

  • (Boolean)


18
# File 'lib/micro/observers/set.rb', line 18

def none?; @subscribers.none?; end

#notify(*events, data: nil) ⇒ Object



59
60
61
# File 'lib/micro/observers/set.rb', line 59

def notify(*events, data: nil)
  broadcast_if_subject_changed(Event::Names.fetch(events), data)
end

#notify!(*events, data: nil) ⇒ Object



63
64
65
# File 'lib/micro/observers/set.rb', line 63

def notify!(*events, data: nil)
  broadcast(Event::Names.fetch(events), data)
end

#off(*args) ⇒ Object



57
# File 'lib/micro/observers/set.rb', line 57

def off(*args); @subscribers.off(args) and self; end

#on(arg = Utils::EMPTY_HASH, &block) ⇒ Object



49
50
51
# File 'lib/micro/observers/set.rb', line 49

def on(arg = Utils::EMPTY_HASH, &block)
  @subscribers.on(CallableOptions[arg, block]) and self
end

#once(arg = Utils::EMPTY_HASH, &block) ⇒ Object



53
54
55
# File 'lib/micro/observers/set.rb', line 53

def once(arg = Utils::EMPTY_HASH, &block)
  @subscribers.once(CallableOptions[arg, block]) and self
end

#some?Boolean

Returns:

  • (Boolean)


19
# File 'lib/micro/observers/set.rb', line 19

def some?; !none?; end

#subject_changed(state) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
# File 'lib/micro/observers/set.rb', line 27

def subject_changed(state)
  return @subject_changed = state if state == true || state == false

  raise ArgumentError, INVALID_BOOLEAN_MSG
end

#subject_changed!Object



33
34
35
# File 'lib/micro/observers/set.rb', line 33

def subject_changed!
  subject_changed(true)
end

#subject_changed?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/micro/observers/set.rb', line 21

def subject_changed?
  @subject_changed
end