lib/live_query/core.ex

defmodule LiveQuery.Core do
  alias LiveQuery.Core.Supervisor
  alias LiveQuery.Core.Store
  alias LiveQuery.Core.System
  alias LiveQuery.Core.Proxy

  defdelegate start_link(opts), to: Supervisor

  def start_using({system, key}), do: start_using(system, key)
  def start_using(system, key), do: Proxy.start_using(system, key)

  def stop_using({system, key}), do: stop_using(system, key)
  def stop_using(system, key), do: Proxy.stop_using(system, key)

  def subscribe({system, key}), do: subscribe(system, key)
  def subscribe(system, key), do: System.subscribe(system, "store:#{inspect(key)}")

  def unsubscribe({system, key}), do: unsubscribe(system, key)
  def unsubscribe(system, key), do: System.unsubscribe(system, "store:#{inspect(key)}")

  def get_data({system, key}), do: get_data(system, key)
  def get_data(system, key), do: Store.read(system, key)

  def set_data({system, key}, data), do: Store.set(system, key, data)

  def is_topic_for_key({system, key}, topic), do: is_topic_for_key(system, key, topic)

  def is_topic_for_key(system, key, topic) do
    "#{inspect(system)}:store:#{inspect(key)}" === topic
  end
end