Module: Parse::LiveQuery

Defined in:
lib/parse/live_query.rb,
lib/parse/live_query.rb,
lib/parse/live_query/event.rb,
lib/parse/live_query/client.rb,
lib/parse/live_query/logging.rb,
lib/parse/live_query/event_queue.rb,
lib/parse/live_query/subscription.rb,
lib/parse/live_query/configuration.rb,
lib/parse/live_query/health_monitor.rb,
lib/parse/live_query/circuit_breaker.rb

Overview

Note:

EXPERIMENTAL: This feature is not fully implemented. The WebSocket client is incomplete. You must explicitly enable this feature before use:

Parse.live_query_enabled = true

LiveQuery provides real-time data subscriptions for reactive applications. It uses WebSockets to receive push notifications when data changes on the server.

Examples:

Basic usage

# Configure LiveQuery server URL
Parse.setup(
  application_id: "your_app_id",
  api_key: "your_api_key",
  server_url: "https://your-parse-server.com/parse",
  live_query_url: "wss://your-parse-server.com"
)

# Subscribe to changes on a model
subscription = Song.subscribe(where: { artist: "Artist Name" })

subscription.on(:create) { |song| puts "New song: #{song.title}" }
subscription.on(:update) { |song, original| puts "Updated: #{song.title}" }
subscription.on(:delete) { |song| puts "Deleted: #{song.id}" }
subscription.on(:enter) { |song, original| puts "Entered query: #{song.title}" }
subscription.on(:leave) { |song, original| puts "Left query: #{song.title}" }

# Unsubscribe when done
subscription.unsubscribe

Using Query directly

query = Song.query(:plays.gt => 1000)
subscription = query.subscribe

subscription.on_create { |song| puts "New popular song!" }
subscription.on_update { |song| puts "Song updated!" }

Multiple subscriptions

client = Parse::LiveQuery.client

sub1 = client.subscribe(Song, where: { genre: "rock" })
sub2 = client.subscribe(Album, where: { year: 2024 })

# Close all subscriptions
client.close

Defined Under Namespace

Modules: Logging Classes: AuthenticationError, CircuitBreaker, Client, Configuration, ConnectionError, Error, Event, EventQueue, EventQueueFullError, HealthMonitor, NotEnabledError, Subscription, SubscriptionError

Constant Summary collapse

EVENTS =

Default LiveQuery events

%i[create update delete enter leave].freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.default_clientParse::LiveQuery::Client

Returns the default LiveQuery client.

Returns:



86
87
88
# File 'lib/parse/live_query.rb', line 86

def default_client
  @default_client
end

Class Method Details

.available?Boolean

Check if LiveQuery is configured and available

Returns:

  • (Boolean)


117
118
119
# File 'lib/parse/live_query.rb', line 117

def available?
  !!config.url
end

.clientParse::LiveQuery::Client

Get or create the default LiveQuery client. Uses the configuration from Parse.setup if available.

Returns:

Raises:



104
105
106
107
# File 'lib/parse/live_query.rb', line 104

def client
  ensure_enabled!
  @default_client ||= Client.new
end

.configParse::LiveQuery::Configuration

Get the LiveQuery configuration object



123
124
125
# File 'lib/parse/live_query.rb', line 123

def config
  @config ||= Configuration.new
end

.configurationHash

Deprecated.

Use configure block instead

Legacy configuration method for backward compatibility

Returns:



153
154
155
156
157
158
159
160
# File 'lib/parse/live_query.rb', line 153

def configuration
  {
    url: config.url,
    application_id: config.application_id,
    client_key: config.client_key,
    master_key: config.master_key,
  }
end

.configure {|config| ... } ⇒ Configuration

Configure LiveQuery settings using a block

Examples:

Parse::LiveQuery.configure do |config|
  config.url = "wss://your-server.com"
  config.ping_interval = 20.0
  config.logging_enabled = true
end

Yields:

  • (config)

    Configuration object

Returns:



137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/parse/live_query.rb', line 137

def configure
  yield config if block_given?

  # Sync logging settings
  if config.logging_enabled
    Logging.enabled = true
    Logging.log_level = config.log_level
    Logging.logger = config.logger if config.logger
  end

  config
end

.enabled?Boolean

Check if LiveQuery feature is enabled

Returns:

  • (Boolean)


90
91
92
# File 'lib/parse/live_query.rb', line 90

def enabled?
  Parse.live_query_enabled?
end

.ensure_enabled!Object

Ensure LiveQuery is enabled, raising an error if not

Raises:



96
97
98
# File 'lib/parse/live_query.rb', line 96

def ensure_enabled!
  raise NotEnabledError unless enabled?
end

.reset!Object

Reset the default client (closes connection and clears instance)



110
111
112
113
# File 'lib/parse/live_query.rb', line 110

def reset!
  @default_client&.close
  @default_client = nil
end