Sha256: 8b365d9e916cd06eb04515197e262ca4321d68d335a6594184c00c2c62785b6d

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

module ApplicationCable
  class Store
    attr_accessor :transmitter

    def initialize subject, channel, store_id = nil
      @channel = channel
      @subject = subject
      @store_id = store_id
    end

    def transmit data
      if @subject
        @channel.broadcast_to @subject, ({store_id: @store_id}).compact.merge(data)
      else
        @channel.transmit ({store_id: @store_id}).compact.merge(data)
      end
    end

    def set value
      transmit action: "set", value: value
    end

    def merge value
      transmit action: "merge", value: value
    end

    def upsert value, key = 'id'
      transmit action: "upsert", key: key, value: value
    end
  end

  class ScopedChannel
    def initialize channel, subject
      @channel = channel
      @subject = subject
    end

    def store(store_id)
      Store.new(@subject, @channel, store_id)
    end

  end
  class Channel < ActionCable::Channel::Base
    public :transmit

    def self.[](subject)
      ScopedChannel.new(self, subject)
    end

    def store(store_id)
      Store.new(nil, self, store_id)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
livestores-1.0.0 lib/livestores/channel.rb