Sha256: 617b4af644a176e763d7134fca9df6258c47a24a4652669837bca41053125881
Contents?: true
Size: 1.09 KB
Versions: 1
Compression:
Stored size: 1.09 KB
Contents
# frozen_string_literal: true module Micro module Observers class Manager EMPTY_HASH = {}.freeze def self.for(subject) new(subject) end def initialize(subject, list = nil) @subject = subject @list = (list.kind_of?(Array) ? list : []).flatten.tap(&:compact!) end def attach(observer, options = EMPTY_HASH) if options[:allow_duplication] || @list.none? { |obs, _data| obs == observer } @list << [observer, options[:data]] end self end def detach(observer) @list.delete_if { |obs, _data| obs == observer } self end def call(action: :call) @list.each do |observer, data| next unless observer.respond_to?(action) handler = observer.method(action) case handler.arity when 2 then handler.call(@subject, data) when 1 then handler.call(@subject) else raise NotImplementedError end end self end alias notify call private_constant :EMPTY_HASH end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
u-observers-0.2.0 | lib/micro/observers/manager.rb |