Class: Micro::Observers::Set

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(subject, subscribers: nil) ⇒ Set

Returns a new instance of Set.



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

def initialize(subject, subscribers: nil)
  @subject = subject

  @subject_changed = false

  @subscribers = MapSubscribers.call(subscribers)
end

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)
  options = args.last.is_a?(Hash) ? args.pop : EMPTY_HASH

  Utils::Arrays.flatten_and_compact(args).each do |observer|
    @subscribers << MapSubscriber[observer, options] 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

#countObject



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

Returns:

  • (Boolean)


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

def included?(observer)
  @subscribers.any?(&EqualTo[observer])
end

#inspectObject



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

Returns:

  • (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(options = EMPTY_HASH)
  event, callable, with, context = options[:event], options[:call], options[:with], options[: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

Returns:

  • (Boolean)


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

def some?
  !none?
end

#subject_changed(state) ⇒ Object

Raises:

  • (ArgumentError)


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

Returns:

  • (Boolean)


44
45
46
# File 'lib/micro/observers/set.rb', line 44

def subject_changed?
  @subject_changed
end