Sha256: 19e6f3b6defffdfb6520f77fdea12b1fc11c84fb0ec7084d256910b8dbd88f7c

Contents?: true

Size: 1.45 KB

Versions: 6

Compression:

Stored size: 1.45 KB

Contents

require_relative 'live_query/data_store'
require_relative 'live_query/live_query_pool'

class QueryTasks
  @@live_query_pool = LiveQueryPool.new(DataStore.new)
  @@channel_live_queries = {}
  
  def self.live_query_pool
    @@live_query_pool
  end
    
  # The dispatcher passes its self in
  def initialize(channel, dispatcher=nil)
    @channel = channel
    @dispatcher = dispatcher
  end
  
  def add_listener(collection, query)
    live_query = @@live_query_pool.lookup(collection, query)
    track_channel_in_live_query(live_query)
    
    live_query.add_channel(@channel)
    
    # Return the initial data
    return live_query.initial_data
  end
  
  # Remove a listening channel, the LiveQuery will automatically remove 
  # itsself from the pool when there are no channels.
  def remove_listener(collection, query)
    live_query = @@live_query_pool.lookup(collection, query)
    live_query.remove_channel(@channel)
  end
  
  
  # Removes a channel from all associated live queries
  def close!
    live_queries = @@channel_live_queries[@channel]
    
    if live_queries
      live_queries.each do |live_query|
        live_query.remove_channel(@channel)
      end
    end
    
    @@channel_live_queries.delete(@channel)
  end
  
  private
    # Tracks that this channel will be notified from the live query.
    def track_channel_in_live_query(live_query)
      @@channel_live_queries[@channel] ||= []
      @@channel_live_queries[@channel] << live_query
    end


end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
volt-0.6.5 app/volt/tasks/query_tasks.rb
volt-0.6.4 app/volt/tasks/query_tasks.rb
volt-0.6.3 app/volt/tasks/query_tasks.rb
volt-0.6.2 app/volt/tasks/query_tasks.rb
volt-0.6.1 app/volt/tasks/query_tasks.rb
volt-0.6.0 app/volt/tasks/query_tasks.rb