Sha256: a232e1bcd013211db44210503e904c818fb85da76b381301f04addc004d9b623

Contents?: true

Size: 785 Bytes

Versions: 24

Compression:

Stored size: 785 Bytes

Contents

# frozen_string_literal: true

module PagesCore
  module PubSub
    class << self
      def publish(name, payload = {})
        subscribers.select { |s| s.name == name }
                   .each { |s| s.call(payload) }
      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

24 entries across 24 versions & 1 rubygems

Version Path
pages_core-3.15.5 lib/pages_core/pub_sub.rb
pages_core-3.15.4 lib/pages_core/pub_sub.rb
pages_core-3.15.3 lib/pages_core/pub_sub.rb
pages_core-3.15.2 lib/pages_core/pub_sub.rb
pages_core-3.15.1 lib/pages_core/pub_sub.rb
pages_core-3.14.0 lib/pages_core/pub_sub.rb
pages_core-3.13.0 lib/pages_core/pub_sub.rb
pages_core-3.12.7 lib/pages_core/pub_sub.rb
pages_core-3.12.6 lib/pages_core/pub_sub.rb
pages_core-3.12.5 lib/pages_core/pub_sub.rb
pages_core-3.12.4 lib/pages_core/pub_sub.rb
pages_core-3.12.3 lib/pages_core/pub_sub.rb
pages_core-3.12.2 lib/pages_core/pub_sub.rb
pages_core-3.12.1 lib/pages_core/pub_sub.rb
pages_core-3.12.0 lib/pages_core/pub_sub.rb
pages_core-3.11.3 lib/pages_core/pub_sub.rb
pages_core-3.11.2 lib/pages_core/pub_sub.rb
pages_core-3.11.1 lib/pages_core/pub_sub.rb
pages_core-3.11.0 lib/pages_core/pub_sub.rb
pages_core-3.10.2 lib/pages_core/pub_sub.rb