Module: DDP::Server::Protocol::Data

Included in:
DDP::Server::Protocol
Defined in:
lib/ddp/server/protocol/data.rb

Overview

Protocol regarding handling data subscriptions

Defined Under Namespace

Classes: Subscription

Instance Method Summary collapse

Instance Method Details

#handle_dataObject



8
9
10
11
12
13
14
15
16
17
18
19
# 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) ⇒ Object



21
22
23
24
25
26
27
28
29
# 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) ⇒ Object



40
41
42
43
44
# 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) ⇒ Object



52
53
54
55
56
# 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) ⇒ Object



73
74
75
76
77
# 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) ⇒ Object



58
59
60
61
62
63
# 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) ⇒ Object



79
80
81
# 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) ⇒ Object



46
47
48
49
50
# 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) ⇒ Object



69
70
71
# File 'lib/ddp/server/protocol/data.rb', line 69

def send_ready(subs)
  write_message msg: 'ready', subs: subs
end

#send_removed(collection, id) ⇒ Object



65
66
67
# 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) ⇒ Object



31
32
33
34
35
36
37
38
# 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