pubnub 4.2.5 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pubnub might be problematic. Click here for more details.

Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -0
  3. data/.pubnub.yml +168 -117
  4. data/.travis.yml +13 -9
  5. data/CHANGELOG.md +31 -8
  6. data/Gemfile.lock +67 -64
  7. data/README.md +56 -17
  8. data/VERSION +1 -1
  9. data/fixtures/vcr_cassettes/examples/add_channels_to_push/001.yml +45 -0
  10. data/fixtures/vcr_cassettes/examples/add_channels_to_push/002.yml +45 -0
  11. data/fixtures/vcr_cassettes/examples/add_channels_to_push/003.yml +45 -0
  12. data/fixtures/vcr_cassettes/examples/add_channels_to_push/004.yml +45 -0
  13. data/fixtures/vcr_cassettes/examples/grant/1913.yml +1 -1
  14. data/fixtures/vcr_cassettes/examples/grant/1944.yml +8 -9
  15. data/fixtures/vcr_cassettes/examples/grant/1945.yml +359 -9
  16. data/fixtures/vcr_cassettes/examples/grant/1946.yml +8 -9
  17. data/fixtures/vcr_cassettes/examples/grant/1947.yml +8 -9
  18. data/fixtures/vcr_cassettes/examples/grant/1948.yml +8 -9
  19. data/fixtures/vcr_cassettes/examples/history/100.yml +46 -0
  20. data/fixtures/vcr_cassettes/examples/history/include_meta__encrypted.yml +46 -0
  21. data/fixtures/vcr_cassettes/examples/history/include_token__encrypted.yml +45 -0
  22. data/fixtures/vcr_cassettes/examples/history/no_includes__encrypted.yml +45 -0
  23. data/fixtures/vcr_cassettes/examples/list_push_provisions/001.yml +46 -0
  24. data/fixtures/vcr_cassettes/examples/list_push_provisions/002.yml +45 -0
  25. data/fixtures/vcr_cassettes/examples/list_push_provisions/003.yml +45 -0
  26. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/001.yml +45 -0
  27. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/002.yml +45 -0
  28. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/003.yml +45 -0
  29. data/fixtures/vcr_cassettes/examples/remove_device_from_push/001.yml +45 -0
  30. data/fixtures/vcr_cassettes/examples/remove_device_from_push/002.yml +45 -0
  31. data/fixtures/vcr_cassettes/examples/remove_device_from_push/003.yml +45 -0
  32. data/fixtures/vcr_cassettes/lib/events/get_all_channels_metadata.yml +39 -0
  33. data/fixtures/vcr_cassettes/lib/events/get_all_uuid_metadata.yml +76 -0
  34. data/fixtures/vcr_cassettes/lib/events/get_channel_members.yml +37 -0
  35. data/fixtures/vcr_cassettes/lib/events/get_channel_metadata.yml +37 -0
  36. data/fixtures/vcr_cassettes/lib/events/get_memberships1.yml +37 -0
  37. data/fixtures/vcr_cassettes/lib/events/get_memberships2.yml +37 -0
  38. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata1.yml +76 -0
  39. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata2.yml +76 -0
  40. data/fixtures/vcr_cassettes/lib/events/grant-error.yml +2 -2
  41. data/fixtures/vcr_cassettes/lib/events/grant.yml +10 -11
  42. data/fixtures/vcr_cassettes/lib/events/remove_channel_members.yml +78 -0
  43. data/fixtures/vcr_cassettes/lib/events/{delete_space.yml → remove_channel_metadata.yml} +5 -6
  44. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_remove.yml → remove_memberships1.yml} +8 -9
  45. data/fixtures/vcr_cassettes/lib/events/{manage_members_add.yml → remove_memberships2.yml} +8 -9
  46. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata1.yml +76 -0
  47. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata2.yml +76 -0
  48. data/fixtures/vcr_cassettes/lib/events/set_channel_members.yml +39 -0
  49. data/fixtures/vcr_cassettes/lib/events/set_channel_metadata.yml +39 -0
  50. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_add.yml → set_memberships1.yml} +8 -9
  51. data/fixtures/vcr_cassettes/lib/events/set_memberships2.yml +39 -0
  52. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata1.yml +78 -0
  53. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata2.yml +78 -0
  54. data/fixtures/vcr_cassettes/lib/events/{subscribe-space-delete-async.yml → subscribe-channel-metadata-remove-sync.yml} +12 -14
  55. data/fixtures/vcr_cassettes/lib/events/subscribe-channel-metadata-set-async.yml +75 -0
  56. data/fixtures/vcr_cassettes/lib/events/{subscribe-member-remove-async.yml → subscribe-member-remove-sync.yml} +12 -14
  57. data/fixtures/vcr_cassettes/lib/events/subscribe-member-set-async.yml +75 -0
  58. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-remove-async.yml +12 -14
  59. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-update-async.yml → subscribe-membership-set-async.yml} +12 -14
  60. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-delete-async.yml → subscribe-uuid-metadata-remove-sync.yml} +12 -14
  61. data/fixtures/vcr_cassettes/lib/events/subscribe-uuid-metadata-set-async.yml +75 -0
  62. data/lib/pubnub/client.rb +18 -15
  63. data/lib/pubnub/client/events.rb +4 -2
  64. data/lib/pubnub/client/paged_history.rb +1 -1
  65. data/lib/pubnub/constants.rb +19 -18
  66. data/lib/pubnub/event.rb +32 -16
  67. data/lib/pubnub/event/formatter.rb +4 -0
  68. data/lib/pubnub/event/signature.rb +22 -7
  69. data/lib/pubnub/events/add_channels_to_push.rb +29 -13
  70. data/lib/pubnub/events/get_all_channels_metadata.rb +104 -0
  71. data/lib/pubnub/events/get_all_uuid_metadata.rb +104 -0
  72. data/lib/pubnub/events/get_channel_members.rb +120 -0
  73. data/lib/pubnub/events/{update_space.rb → get_channel_metadata.rb} +27 -27
  74. data/lib/pubnub/events/get_memberships.rb +120 -0
  75. data/lib/pubnub/events/{create_space.rb → get_uuid_metadata.rb} +27 -25
  76. data/lib/pubnub/events/grant.rb +10 -1
  77. data/lib/pubnub/events/history.rb +17 -2
  78. data/lib/pubnub/events/list_push_provisions.rb +29 -12
  79. data/lib/pubnub/events/remove_channel_members.rb +137 -0
  80. data/lib/pubnub/events/{delete_space.rb → remove_channel_metadata.rb} +12 -12
  81. data/lib/pubnub/events/remove_channels_from_push.rb +29 -13
  82. data/lib/pubnub/events/remove_device_from_push.rb +30 -14
  83. data/lib/pubnub/events/remove_memberships.rb +137 -0
  84. data/lib/pubnub/events/{delete_user.rb → remove_uuid_metadata.rb} +12 -12
  85. data/lib/pubnub/events/set_channel_members.rb +140 -0
  86. data/lib/pubnub/events/{manage_members.rb → set_channel_metadata.rb} +32 -38
  87. data/lib/pubnub/events/set_memberships.rb +140 -0
  88. data/lib/pubnub/events/{create_user.rb → set_uuid_metadata.rb} +33 -17
  89. data/lib/pubnub/formatter.rb +30 -3
  90. data/lib/pubnub/pam.rb +2 -11
  91. data/lib/pubnub/subscribe_callback.rb +1 -3
  92. data/lib/pubnub/subscribe_event/formatter.rb +26 -17
  93. data/lib/pubnub/subscriber.rb +5 -6
  94. data/lib/pubnub/validators/add_channels_to_push.rb +52 -0
  95. data/lib/pubnub/validators/get_all_channels_metadata.rb +29 -0
  96. data/lib/pubnub/validators/get_all_uuid_metadata.rb +29 -0
  97. data/lib/pubnub/validators/get_channel_members.rb +39 -0
  98. data/lib/pubnub/validators/get_channel_metadata.rb +39 -0
  99. data/lib/pubnub/validators/get_memberships.rb +39 -0
  100. data/lib/pubnub/validators/get_uuid_metadata.rb +39 -0
  101. data/lib/pubnub/validators/grant.rb +37 -2
  102. data/lib/pubnub/validators/list_push_provisions.rb +43 -0
  103. data/lib/pubnub/validators/remove_channel_members.rb +52 -0
  104. data/lib/pubnub/validators/remove_channel_metadata.rb +39 -0
  105. data/lib/pubnub/validators/remove_channels_from_push.rb +52 -0
  106. data/lib/pubnub/validators/remove_device_from_push.rb +43 -0
  107. data/lib/pubnub/validators/remove_memberships.rb +52 -0
  108. data/lib/pubnub/validators/remove_uuid_metadata.rb +39 -0
  109. data/lib/pubnub/validators/set_channel_members.rb +78 -0
  110. data/lib/pubnub/validators/set_channel_metadata.rb +62 -0
  111. data/lib/pubnub/validators/set_memberships.rb +78 -0
  112. data/lib/pubnub/validators/set_uuid_metadata.rb +62 -0
  113. data/lib/pubnub/version.rb +1 -1
  114. data/pubnub.gemspec +1 -1
  115. data/spec/examples/add_channels_to_push_spec.rb +178 -0
  116. data/spec/examples/{grant_examples_spec.rb → grant_examples_1_spec.rb} +0 -8973
  117. data/spec/examples/grant_examples_2_spec.rb +9107 -0
  118. data/spec/examples/history_examples_spec.rb +85 -0
  119. data/spec/examples/list_push_provisions_spec.rb +164 -0
  120. data/spec/examples/presence_examples_spec.rb +222 -186
  121. data/spec/examples/remove_channels_from_push_spec.rb +164 -0
  122. data/spec/examples/remove_device_from_push_spec.rb +164 -0
  123. data/spec/examples/revoke_examples_1_spec.rb +27013 -0
  124. data/spec/examples/revoke_examples_2_spec.rb +27012 -0
  125. data/spec/examples/revoke_examples_3_spec.rb +17967 -0
  126. data/spec/examples/status_request_message_count_exceeded_spec.rb +4 -1
  127. data/spec/examples/subscribe_examples_1_spec.rb +26972 -0
  128. data/spec/examples/subscribe_examples_2_spec.rb +19575 -0
  129. data/spec/lib/connection_callback_spec.rb +4 -3
  130. data/spec/lib/event/formatter_spec.rb +22 -0
  131. data/spec/lib/events/channel_metadata_spec.rb +58 -0
  132. data/spec/lib/events/grant_spec.rb +3 -2
  133. data/spec/lib/events/membership_spec.rb +51 -21
  134. data/spec/lib/events/presence_delta_spec.rb +9 -6
  135. data/spec/lib/events/presence_spec.rb +13 -7
  136. data/spec/lib/events/subscribe_spec.rb +102 -65
  137. data/spec/lib/events/uuid_metadata_spec.rb +86 -0
  138. data/spec/lib/subscribe_event/formatter_spec.rb +22 -0
  139. data/spec/lib/super_admin_spec.rb +8 -4
  140. data/spec/spec_helper.rb +24 -8
  141. metadata +124 -79
  142. data/fixtures/vcr_cassettes/lib/events/create_space.yml +0 -40
  143. data/fixtures/vcr_cassettes/lib/events/create_user.yml +0 -40
  144. data/fixtures/vcr_cassettes/lib/events/delete_user.yml +0 -38
  145. data/fixtures/vcr_cassettes/lib/events/get_members.yml +0 -38
  146. data/fixtures/vcr_cassettes/lib/events/get_space.yml +0 -38
  147. data/fixtures/vcr_cassettes/lib/events/get_space_memberships.yml +0 -38
  148. data/fixtures/vcr_cassettes/lib/events/get_spaces.yml +0 -40
  149. data/fixtures/vcr_cassettes/lib/events/get_user.yml +0 -38
  150. data/fixtures/vcr_cassettes/lib/events/get_users.yml +0 -40
  151. data/fixtures/vcr_cassettes/lib/events/manage_members_remove.yml +0 -83
  152. data/fixtures/vcr_cassettes/lib/events/subscribe-member-add-async.yml +0 -77
  153. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-add-async.yml +0 -77
  154. data/fixtures/vcr_cassettes/lib/events/subscribe-space-update-async.yml +0 -77
  155. data/fixtures/vcr_cassettes/lib/events/update_space.yml +0 -40
  156. data/fixtures/vcr_cassettes/lib/events/update_user.yml +0 -40
  157. data/lib/pubnub/events/get_members.rb +0 -93
  158. data/lib/pubnub/events/get_space.rb +0 -74
  159. data/lib/pubnub/events/get_space_memberships.rb +0 -93
  160. data/lib/pubnub/events/get_spaces.rb +0 -90
  161. data/lib/pubnub/events/get_user.rb +0 -74
  162. data/lib/pubnub/events/get_users.rb +0 -90
  163. data/lib/pubnub/events/manage_memberships.rb +0 -105
  164. data/lib/pubnub/events/update_user.rb +0 -86
  165. data/lib/pubnub/validators/create_space.rb +0 -44
  166. data/lib/pubnub/validators/create_user.rb +0 -44
  167. data/lib/pubnub/validators/delete_space.rb +0 -32
  168. data/lib/pubnub/validators/delete_user.rb +0 -32
  169. data/lib/pubnub/validators/get_members.rb +0 -32
  170. data/lib/pubnub/validators/get_space.rb +0 -32
  171. data/lib/pubnub/validators/get_space_memberships.rb +0 -32
  172. data/lib/pubnub/validators/get_spaces.rb +0 -16
  173. data/lib/pubnub/validators/get_user.rb +0 -32
  174. data/lib/pubnub/validators/get_users.rb +0 -16
  175. data/lib/pubnub/validators/manage_members.rb +0 -45
  176. data/lib/pubnub/validators/manage_memberships.rb +0 -45
  177. data/lib/pubnub/validators/push.rb +0 -43
  178. data/lib/pubnub/validators/update_space.rb +0 -45
  179. data/lib/pubnub/validators/update_user.rb +0 -45
  180. data/spec/examples/revoke_examples_spec.rb +0 -71950
  181. data/spec/examples/subscribe_examples_spec.rb +0 -45184
  182. data/spec/lib/events/space_spec.rb +0 -75
  183. data/spec/lib/events/user_spec.rb +0 -75
@@ -0,0 +1,137 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds RemoveMemberships functionality
6
+ class RemoveMemberships < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::RemoveMemberships
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @uuid = options[:uuid].nil? ? app.env[:uuid] : options[:uuid]
14
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
15
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
16
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
17
+ @start = options[:start] if options[:start] && !options[:start].empty?
18
+ @end = options[:end] if options[:start] && !options[:end].empty?
19
+
20
+ if options[:include]
21
+ include = options[:include]
22
+ @include_count = [0, '0', false].include?(include[:count]) ? "0" : "1" unless include[:count].nil?
23
+ @include_custom = "custom" if !include[:custom].nil? && ![0, '0', false].include?(include[:custom])
24
+ @include_channel_metadata = "channel" if !include[:channel_metadata].nil? && ![0, '0', false].include?(include[:channel_metadata])
25
+ @include_channel_custom = "channel.custom" if !include[:channel_custom].nil? && ![0, '0', false].include?(include[:channel_custom])
26
+
27
+ @include = [@include_custom, @include_channel_metadata, @include_channel_custom].reject { |flag| flag.to_s.empty? }
28
+ end
29
+
30
+ @channels = options[:channels] if options[:channels] && !options[:channels].empty?
31
+
32
+ # Collections by default return number of available entries.
33
+ @include_count = "1" if @include_count.nil?
34
+
35
+ super
36
+ end
37
+
38
+ def fire
39
+ Pubnub.logger.debug('Pubnub::RemoveMemberships') { "Fired event #{self.class}" }
40
+
41
+ memberships = @channels.map do |membership|
42
+ { channel: { id: membership } }
43
+ end
44
+
45
+ body = Formatter.format_message({ delete: memberships }, @cipher_key, false)
46
+ response = send_request(body)
47
+
48
+ envelopes = fire_callbacks(handle(response, uri))
49
+ finalize_event(envelopes)
50
+ envelopes
51
+ end
52
+
53
+ private
54
+
55
+ def current_operation
56
+ Pubnub::Constants::OPERATION_REMOVE_MEMBERSHIPS
57
+ end
58
+
59
+ def parameters(signature = false)
60
+ parameters = super(signature)
61
+ parameters[:limit] = @limit unless @limit.nil?
62
+ parameters[:sort] = @sort unless @sort.nil?
63
+ parameters[:filter] = @filter unless @filter.nil?
64
+ parameters[:start] = @start unless @start.nil?
65
+ parameters[:end] = @end if @end && !@start
66
+ parameters[:count] = @include_count unless @include_count.nil?
67
+ parameters[:include] = @include.sort.join(",") if @include && !@include.empty?
68
+
69
+ parameters
70
+ end
71
+
72
+ def path
73
+ '/' + [
74
+ 'v2',
75
+ 'objects',
76
+ @subscribe_key,
77
+ 'uuids',
78
+ Formatter.encode(@uuid),
79
+ 'channels'
80
+ ].join('/')
81
+ end
82
+
83
+ def valid_envelope(parsed_response, req_res_objects)
84
+ memberships = parsed_response['data'].map { |uuid_membership|
85
+ membership = Hash.new
86
+ uuid_membership.each{ |k,v| membership[k.to_sym] = v }
87
+
88
+ unless membership[:channel].nil?
89
+ channel_metadata = Hash.new
90
+ membership[:channel].each{ |k,v| channel_metadata[k.to_sym] = v }
91
+ channel_metadata[:updated] = Date._parse(channel_metadata[:updated]) unless channel_metadata[:updated].nil?
92
+ membership[:channel] = channel_metadata
93
+ end
94
+ membership[:updated] = Date._parse(membership[:updated]) unless membership[:updated].nil?
95
+
96
+ membership
97
+ }
98
+
99
+ Pubnub::Envelope.new(
100
+ event: @event,
101
+ event_options: @given_options,
102
+ timetoken: nil,
103
+
104
+ result: {
105
+ code: req_res_objects[:response].code,
106
+ operation: current_operation,
107
+ client_request: req_res_objects[:request],
108
+ server_response: req_res_objects[:response],
109
+ data: {
110
+ memberships: memberships,
111
+ totalCount: parsed_response['totalCount'],
112
+ next: parsed_response['next'],
113
+ prev: parsed_response['prev']
114
+ }
115
+ },
116
+
117
+ status: {
118
+ code: req_res_objects[:response].code,
119
+ operation: current_operation,
120
+ client_request: req_res_objects[:request],
121
+ server_response: req_res_objects[:response],
122
+ data: nil,
123
+ category: Pubnub::Constants::STATUS_ACK,
124
+ error: false,
125
+ auto_retried: false,
126
+
127
+ current_timetoken: nil,
128
+ last_timetoken: nil,
129
+ subscribed_channels: nil,
130
+ subscribed_channel_groups: nil,
131
+
132
+ config: get_config
133
+ }
134
+ )
135
+ end
136
+ end
137
+ end
@@ -2,20 +2,20 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Pubnub
5
- # Holds DeleteUser functionality
6
- class DeleteUser < SingleEvent
5
+ # Holds RemoveUuidMetadata functionality
6
+ class RemoveUuidMetadata < SingleEvent
7
7
  include Concurrent::Async
8
- include Pubnub::Validator::DeleteUser
8
+ include Pubnub::Validator::RemoveUuidMetadata
9
9
 
10
10
  def initialize(options, app)
11
- @event = :delete_user
11
+ @event = current_operation
12
12
  @telemetry_name = :l_obj
13
- @user_id = options[:user_id]
13
+ @uuid = options[:uuid].nil? ? app.env[:uuid] : options[:uuid]
14
14
  super
15
15
  end
16
16
 
17
17
  def fire
18
- Pubnub.logger.debug('Pubnub::DeleteUser') { "Fired event #{self.class}" }
18
+ Pubnub.logger.debug('Pubnub::RemoveUuidMetadata') { "Fired event #{self.class}" }
19
19
 
20
20
  body = Formatter.format_message(@data, @cipher_key, false)
21
21
  response = send_request(body)
@@ -28,16 +28,16 @@ module Pubnub
28
28
  private
29
29
 
30
30
  def current_operation
31
- Pubnub::Constants::OPERATION_DELETE_USER
31
+ Pubnub::Constants::OPERATION_REMOVE_UUID_METADATA
32
32
  end
33
33
 
34
34
  def path
35
35
  '/' + [
36
- 'v1',
36
+ 'v2',
37
37
  'objects',
38
38
  @subscribe_key,
39
- 'users',
40
- @user_id
39
+ 'uuids',
40
+ Formatter.encode(@uuid)
41
41
  ].join('/')
42
42
  end
43
43
 
@@ -49,7 +49,7 @@ module Pubnub
49
49
 
50
50
  result: {
51
51
  code: req_res_objects[:response].code,
52
- operation: Pubnub::Constants::OPERATION_DELETE_USER,
52
+ operation: current_operation,
53
53
  client_request: req_res_objects[:request],
54
54
  server_response: req_res_objects[:response],
55
55
  data: parsed_response
@@ -57,7 +57,7 @@ module Pubnub
57
57
 
58
58
  status: {
59
59
  code: req_res_objects[:response].code,
60
- operation: Pubnub::Constants::OPERATION_DELETE_USER,
60
+ operation: current_operation,
61
61
  client_request: req_res_objects[:request],
62
62
  server_response: req_res_objects[:response],
63
63
  data: nil,
@@ -0,0 +1,140 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds SetChannelMembers functionality
6
+ class SetChannelMembers < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::SetChannelMembers
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @channel = options[:channel]
14
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
15
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
16
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
17
+ @start = options[:start] if options[:start] && !options[:start].empty?
18
+ @end = options[:end] if options[:start] && !options[:end].empty?
19
+
20
+ if options[:include]
21
+ include = options[:include]
22
+ @include_count = [0, '0', false].include?(include[:count]) ? "0" : "1" unless include[:count].nil?
23
+ @include_custom = "custom" if !include[:custom].nil? && ![0, '0', false].include?(include[:custom])
24
+ @include_uuid_metadata = "uuid" if !include[:uuid_metadata].nil? && ![0, '0', false].include?(include[:uuid_metadata])
25
+ @include_uuid_custom = "uuid.custom" if !include[:uuid_custom].nil? && ![0, '0', false].include?(include[:uuid_custom])
26
+
27
+ @include = [@include_custom, @include_uuid_metadata, @include_uuid_custom].reject { |flag| flag.to_s.empty? }
28
+ end
29
+
30
+ @uuids = options[:uuids] if options[:uuids] && !options[:uuids].empty?
31
+
32
+ # Collections by default return number of available entries.
33
+ @include_count = "1" if @include_count.nil?
34
+
35
+ super
36
+ end
37
+
38
+ def fire
39
+ Pubnub.logger.debug('Pubnub::SetChannelMembers') { "Fired event #{self.class}" }
40
+
41
+ members = @uuids.map do |member|
42
+ member_object = { uuid: { id: member[:uuid] } }
43
+ member_object[:custom] = member[:custom] if member[:custom] && !member[:custom].empty?
44
+
45
+ member_object
46
+ end
47
+
48
+ body = Formatter.format_message({ set: members }, @cipher_key, false)
49
+ response = send_request(body)
50
+
51
+ envelopes = fire_callbacks(handle(response, uri))
52
+ finalize_event(envelopes)
53
+ envelopes
54
+ end
55
+
56
+ private
57
+
58
+ def current_operation
59
+ Pubnub::Constants::OPERATION_SET_CHANNEL_MEMBERS
60
+ end
61
+
62
+ def parameters(signature = false)
63
+ parameters = super(signature)
64
+ parameters[:limit] = @limit unless @limit.nil?
65
+ parameters[:sort] = @sort unless @sort.nil?
66
+ parameters[:filter] = @filter unless @filter.nil?
67
+ parameters[:start] = @start unless @start.nil?
68
+ parameters[:end] = @end if @end && !@start
69
+ parameters[:count] = @include_count unless @include_count.nil?
70
+ parameters[:include] = @include.sort.join(",") if @include && !@include.empty?
71
+
72
+ parameters
73
+ end
74
+
75
+ def path
76
+ '/' + [
77
+ 'v2',
78
+ 'objects',
79
+ @subscribe_key,
80
+ 'channels',
81
+ Formatter.channels_for_url(@channel),
82
+ 'uuids'
83
+ ].join('/')
84
+ end
85
+
86
+ def valid_envelope(parsed_response, req_res_objects)
87
+ members = parsed_response['data'].map { |channel_member|
88
+ member = Hash.new
89
+ channel_member.each{ |k,v| member[k.to_sym] = v }
90
+
91
+ unless member[:uuid].nil?
92
+ uuid_metadata = Hash.new
93
+ member[:uuid].each{ |k,v| uuid_metadata[k.to_sym] = v }
94
+ uuid_metadata[:updated] = Date._parse(uuid_metadata[:updated]) unless uuid_metadata[:updated].nil?
95
+ member[:uuid] = uuid_metadata
96
+ end
97
+ member[:updated] = Date._parse(member[:updated]) unless member[:updated].nil?
98
+
99
+ member
100
+ }
101
+
102
+ Pubnub::Envelope.new(
103
+ event: @event,
104
+ event_options: @given_options,
105
+ timetoken: nil,
106
+
107
+ result: {
108
+ code: req_res_objects[:response].code,
109
+ operation: current_operation,
110
+ client_request: req_res_objects[:request],
111
+ server_response: req_res_objects[:response],
112
+ data: {
113
+ members: members,
114
+ totalCount: parsed_response['totalCount'],
115
+ next: parsed_response['next'],
116
+ prev: parsed_response['prev']
117
+ }
118
+ },
119
+
120
+ status: {
121
+ code: req_res_objects[:response].code,
122
+ operation: current_operation,
123
+ client_request: req_res_objects[:request],
124
+ server_response: req_res_objects[:response],
125
+ data: nil,
126
+ category: Pubnub::Constants::STATUS_ACK,
127
+ error: false,
128
+ auto_retried: false,
129
+
130
+ current_timetoken: nil,
131
+ last_timetoken: nil,
132
+ subscribed_channels: nil,
133
+ subscribed_channel_groups: nil,
134
+
135
+ config: get_config
136
+ }
137
+ )
138
+ end
139
+ end
140
+ end
@@ -2,37 +2,32 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Pubnub
5
- # Holds ManageMembers functionality
6
- class ManageMembers < SingleEvent
5
+ # Holds SetChannelMetadata functionality
6
+ class SetChannelMetadata < SingleEvent
7
7
  include Concurrent::Async
8
- include Pubnub::Validator::ManageMembers
9
- @max_limit = 100
8
+ include Pubnub::Validator::SetChannelMetadata
10
9
 
11
10
  def initialize(options, app)
12
- @event = :manage_members
11
+ @event = current_operation
13
12
  @telemetry_name = :l_obj
14
- @start = options[:start]
15
- @end = if options[:end].nil?
16
- @max_limit
17
- else
18
- @end = options[:end]
19
- end
20
- @limit = options[:limit]
21
- @count = if options[:count].nil?
22
- false
23
- else
24
- options[:count]
25
- end
26
- @include = options[:include]
27
- @space_id = options[:space_id]
28
- @data = options[:data]
13
+ @channel = options[:channel]
14
+
15
+ # Clean up user-provided metadata object from nils.
16
+ @metadata = options[:metadata].delete_if { |_k, v| v.blank? } unless options[:metadata].nil?
17
+
18
+ if options[:include]
19
+ @include = [0, '0', false].include?(options[:include][:custom]) ? "0" : "1" unless options[:include][:custom].nil?
20
+ end
21
+
22
+ # Single entity creation should return it's 'custom' field by default.
23
+ @include = "custom" if @include.nil?
29
24
  super
30
25
  end
31
26
 
32
27
  def fire
33
- Pubnub.logger.debug('Pubnub::ManageMembers') { "Fired event #{self.class}" }
28
+ Pubnub.logger.debug('Pubnub::SetChannelMetadata') { "Fired event #{self.class}" }
34
29
 
35
- body = Formatter.format_message(@data, @cipher_key, false)
30
+ body = Formatter.format_message(@metadata, @cipher_key, false)
36
31
  response = send_request(body)
37
32
 
38
33
  envelopes = fire_callbacks(handle(response, uri))
@@ -43,32 +38,31 @@ module Pubnub
43
38
  private
44
39
 
45
40
  def current_operation
46
- Pubnub::Constants::OPERATION_MANAGE_MEMBERS
41
+ Pubnub::Constants::OPERATION_SET_CHANNEL_METADATA
47
42
  end
48
43
 
49
- def parameters(*_args)
50
- parameters = super
51
- parameters[:start] = @start if @start
52
- parameters[:end] = @end if @end && !@start
53
- parameters[:count] = @count if @count
54
- parameters[:limit] = @limit if @limit && @limit != @max_limit
55
- parameters[:include] = @include if @include
56
-
44
+ def parameters(signature = false)
45
+ parameters = super(signature)
46
+ parameters[:include] = @include
57
47
  parameters
58
48
  end
59
49
 
60
50
  def path
61
51
  '/' + [
62
- 'v1',
52
+ 'v2',
63
53
  'objects',
64
54
  @subscribe_key,
65
- 'spaces',
66
- @space_id,
67
- 'users'
55
+ 'channels',
56
+ Formatter.channels_for_url(@channel)
68
57
  ].join('/')
69
58
  end
70
59
 
71
60
  def valid_envelope(parsed_response, req_res_objects)
61
+ data = parsed_response['data']
62
+ metadata = Hash.new
63
+ data.each{ |k,v| metadata[k.to_sym] = v }
64
+ metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
65
+
72
66
  Pubnub::Envelope.new(
73
67
  event: @event,
74
68
  event_options: @given_options,
@@ -76,15 +70,15 @@ module Pubnub
76
70
 
77
71
  result: {
78
72
  code: req_res_objects[:response].code,
79
- operation: Pubnub::Constants::OPERATION_MANAGE_MEMBERS,
73
+ operation: current_operation,
80
74
  client_request: req_res_objects[:request],
81
75
  server_response: req_res_objects[:response],
82
- data: parsed_response
76
+ data: metadata
83
77
  },
84
78
 
85
79
  status: {
86
80
  code: req_res_objects[:response].code,
87
- operation: Pubnub::Constants::OPERATION_MANAGE_MEMBERS,
81
+ operation: current_operation,
88
82
  client_request: req_res_objects[:request],
89
83
  server_response: req_res_objects[:response],
90
84
  data: nil,