module DDP::Server::Protocol::Data

Protocol regarding handling data subscriptions

Public Instance Methods

handle_data() click to toggle source
# File lib/ddp/server/protocol/data.rb, line 8
def handle_data
        case @message['msg']
        when 'sub'
                handle_sub(@message['id'], @message['name'], @message['params'])
                true
        when 'unsub'
                handle_unsub(@message['id'])
                true
        else
                false
        end
end
handle_sub(id, name, params) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 21
def handle_sub(id, name, params)
        params ||= []
        query = api.collection_query(name, *params)
        subscription = subscriptions[id] = Subscription.new(self, id, name, query)
        subscription.async.start
        send_ready([id])
rescue => e
        send_error_result(id, e)
end
handle_unsub(id) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 40
def handle_unsub(id)
        subscription = @subscriptions.delete(id)
        subscription.stop unless subscription.nil?
        send_nosub(id)
end
send_added(collection, id, fields = nil) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 52
def send_added(collection, id, fields = nil)
        message = { msg: 'added', id: id, collection: collection }
        message.merge!(fields: fields) if fields
        write_message message
end
send_added_before(collection, id, fields = nil, before = nil) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 73
def send_added_before(collection, id, fields = nil, before = nil)
        message = { msg: 'addedBefore', id: id, collection: collection, before: before }
        message.merge!(fields: fields) if fields
        write_message message
end
send_changed(collection, id, fields = nil, cleared = nil) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 58
def send_changed(collection, id, fields = nil, cleared = nil)
        message = { msg: 'changed', id: id, collection: collection }
        message.merge!(fields: fields) if fields
        message.merge!(cleared: cleared) if cleared
        write_message message
end
send_moved_before(collection, id, before = nil) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 79
def send_moved_before(collection, id, before = nil)
        write_message msg: 'movedBefore', id: id, collection: collection, before: before
end
send_nosub(id, error = nil) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 46
def send_nosub(id, error = nil)
        message = { msg: 'nosub', id: id }
        message.merge!(error: error) if error
        write_message message
end
send_ready(subs) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 69
def send_ready(subs)
        write_message msg: 'ready', subs: subs
end
send_removed(collection, id) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 65
def send_removed(collection, id)
        write_message msg: 'removed', collection: collection, id: id
end
subscription_update(id, old_value, new_value) click to toggle source
# File lib/ddp/server/protocol/data.rb, line 31
def subscription_update(id, old_value, new_value)
        subscription_name = @subscriptions[id].name

        return send_added(subscription_name, new_value['id'], new_value) if old_value.nil?
        return send_removed(subscription_name, old_value['id']) if new_value.nil?

        send_changed(subscription_name, old_value['id'], new_value, old_value.keys - new_value.keys)
end