class ApplicationCable::Store

def initialize subject, channel, store_id = nil

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

def merge value

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

def method_missing method, **args

def method_missing method, **args
  transmit action: method, **args
end

def set value

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

def transmit data

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 upsert value, key = 'id'

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