Sha256: 20c2d208b425bc7824b2b9d72bbc266294ad65e3f303621e8d5d5ea0e55e747b
Contents?: true
Size: 841 Bytes
Versions: 5
Compression:
Stored size: 841 Bytes
Contents
# frozen_string_literal: true module PagesCore module PubSub class << self def publish(name, payload = {}) payload_struct = OpenStruct.new(payload) subscribers.select { |s| s.name == name } .each { |s| s.call(payload_struct) } end def subscribe(name, &block) subscriber = PagesCore::PubSub::Subscriber.new(name, block) subscribers << subscriber subscriber end def subscribers @subscribers ||= [] end def unsubscribe(subscriber) @subscribers = subscribers.reject { |s| s == subscriber } end end class Subscriber attr_reader :name, :callback delegate :call, to: :callback def initialize(name, callback) @name = name @callback = callback end end end end
Version data entries
5 entries across 5 versions & 1 rubygems