pubnub 4.2.6 → 4.6.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 (226) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -0
  3. data/.pubnub.yml +113 -56
  4. data/.travis.yml +4 -2
  5. data/CHANGELOG.md +39 -11
  6. data/Gemfile.lock +10 -1
  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/channel_members/001.yml +111 -0
  14. data/fixtures/vcr_cassettes/examples/channel_members/002.yml +111 -0
  15. data/fixtures/vcr_cassettes/examples/channel_members/003.yml +111 -0
  16. data/fixtures/vcr_cassettes/examples/channel_members/004.yml +147 -0
  17. data/fixtures/vcr_cassettes/examples/channel_members/005.yml +147 -0
  18. data/fixtures/vcr_cassettes/examples/channel_members/006.yml +147 -0
  19. data/fixtures/vcr_cassettes/examples/channel_metadata/001.yml +39 -0
  20. data/fixtures/vcr_cassettes/examples/channel_metadata/002.yml +39 -0
  21. data/fixtures/vcr_cassettes/examples/channel_metadata/003.yml +39 -0
  22. data/fixtures/vcr_cassettes/examples/channel_metadata/004.yml +73 -0
  23. data/fixtures/vcr_cassettes/examples/channel_metadata/005.yml +73 -0
  24. data/fixtures/vcr_cassettes/examples/channel_metadata/006.yml +73 -0
  25. data/fixtures/vcr_cassettes/examples/grant/1913.yml +1 -1
  26. data/fixtures/vcr_cassettes/examples/grant/1944.yml +8 -9
  27. data/fixtures/vcr_cassettes/examples/grant/1945.yml +359 -9
  28. data/fixtures/vcr_cassettes/examples/grant/1946.yml +8 -9
  29. data/fixtures/vcr_cassettes/examples/grant/1947.yml +8 -9
  30. data/fixtures/vcr_cassettes/examples/grant/1948.yml +8 -9
  31. data/fixtures/vcr_cassettes/examples/history/include_meta__encrypted.yml +7 -7
  32. data/fixtures/vcr_cassettes/examples/history/include_meta__encrypted_random_iv.yml +46 -0
  33. data/fixtures/vcr_cassettes/examples/history/include_token__encrypted.yml +6 -6
  34. data/fixtures/vcr_cassettes/examples/history/include_token__encrypted_random_iv.yml +46 -0
  35. data/fixtures/vcr_cassettes/examples/history/no_includes__encrypted.yml +6 -6
  36. data/fixtures/vcr_cassettes/examples/history/no_includes__encrypted_random_iv.yml +45 -0
  37. data/fixtures/vcr_cassettes/examples/list_push_provisions/001.yml +46 -0
  38. data/fixtures/vcr_cassettes/examples/list_push_provisions/002.yml +45 -0
  39. data/fixtures/vcr_cassettes/examples/list_push_provisions/003.yml +45 -0
  40. data/fixtures/vcr_cassettes/examples/memberships/001.yml +111 -0
  41. data/fixtures/vcr_cassettes/examples/memberships/002.yml +111 -0
  42. data/fixtures/vcr_cassettes/examples/memberships/003.yml +111 -0
  43. data/fixtures/vcr_cassettes/examples/memberships/004.yml +111 -0
  44. data/fixtures/vcr_cassettes/examples/memberships/005.yml +147 -0
  45. data/fixtures/vcr_cassettes/examples/memberships/006.yml +147 -0
  46. data/fixtures/vcr_cassettes/examples/memberships/007.yml +147 -0
  47. data/fixtures/vcr_cassettes/examples/memberships/008.yml +147 -0
  48. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/001.yml +45 -0
  49. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/002.yml +45 -0
  50. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/003.yml +45 -0
  51. data/fixtures/vcr_cassettes/examples/remove_device_from_push/001.yml +45 -0
  52. data/fixtures/vcr_cassettes/examples/remove_device_from_push/002.yml +45 -0
  53. data/fixtures/vcr_cassettes/examples/remove_device_from_push/003.yml +45 -0
  54. data/fixtures/vcr_cassettes/examples/uuid_metadata/001.yml +39 -0
  55. data/fixtures/vcr_cassettes/examples/uuid_metadata/002.yml +39 -0
  56. data/fixtures/vcr_cassettes/examples/uuid_metadata/003.yml +39 -0
  57. data/fixtures/vcr_cassettes/examples/uuid_metadata/004.yml +39 -0
  58. data/fixtures/vcr_cassettes/examples/uuid_metadata/005.yml +73 -0
  59. data/fixtures/vcr_cassettes/examples/uuid_metadata/006.yml +73 -0
  60. data/fixtures/vcr_cassettes/examples/uuid_metadata/007.yml +73 -0
  61. data/fixtures/vcr_cassettes/examples/uuid_metadata/008.yml +73 -0
  62. data/fixtures/vcr_cassettes/lib/events/get_all_channels_metadata.yml +39 -0
  63. data/fixtures/vcr_cassettes/lib/events/get_all_uuid_metadata.yml +76 -0
  64. data/fixtures/vcr_cassettes/lib/events/get_channel_members.yml +37 -0
  65. data/fixtures/vcr_cassettes/lib/events/get_channel_metadata.yml +37 -0
  66. data/fixtures/vcr_cassettes/lib/events/get_memberships1.yml +37 -0
  67. data/fixtures/vcr_cassettes/lib/events/get_memberships2.yml +37 -0
  68. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata1.yml +76 -0
  69. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata2.yml +76 -0
  70. data/fixtures/vcr_cassettes/lib/events/grant-error.yml +2 -2
  71. data/fixtures/vcr_cassettes/lib/events/grant.yml +10 -11
  72. data/fixtures/vcr_cassettes/lib/events/remove_channel_members.yml +78 -0
  73. data/fixtures/vcr_cassettes/lib/events/{delete_space.yml → remove_channel_metadata.yml} +5 -6
  74. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_remove.yml → remove_memberships1.yml} +8 -9
  75. data/fixtures/vcr_cassettes/lib/events/{manage_members_add.yml → remove_memberships2.yml} +8 -9
  76. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata1.yml +76 -0
  77. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata2.yml +76 -0
  78. data/fixtures/vcr_cassettes/lib/events/set_channel_members.yml +39 -0
  79. data/fixtures/vcr_cassettes/lib/events/set_channel_metadata.yml +39 -0
  80. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_add.yml → set_memberships1.yml} +8 -9
  81. data/fixtures/vcr_cassettes/lib/events/set_memberships2.yml +39 -0
  82. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata1.yml +78 -0
  83. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata2.yml +78 -0
  84. data/fixtures/vcr_cassettes/lib/events/{subscribe-space-delete-async.yml → subscribe-channel-metadata-remove-sync.yml} +12 -14
  85. data/fixtures/vcr_cassettes/lib/events/subscribe-channel-metadata-set-async.yml +75 -0
  86. data/fixtures/vcr_cassettes/lib/events/{subscribe-member-remove-async.yml → subscribe-member-remove-sync.yml} +12 -14
  87. data/fixtures/vcr_cassettes/lib/events/subscribe-member-set-async.yml +75 -0
  88. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-remove-async.yml +12 -14
  89. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-update-async.yml → subscribe-membership-set-async.yml} +12 -14
  90. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-delete-async.yml → subscribe-uuid-metadata-remove-sync.yml} +12 -14
  91. data/fixtures/vcr_cassettes/lib/events/subscribe-uuid-metadata-set-async.yml +75 -0
  92. data/lib/pubnub/client.rb +22 -16
  93. data/lib/pubnub/client/events.rb +4 -2
  94. data/lib/pubnub/client/helpers.rb +1 -1
  95. data/lib/pubnub/configuration.rb +1 -0
  96. data/lib/pubnub/constants.rb +20 -18
  97. data/lib/pubnub/crypto.rb +22 -8
  98. data/lib/pubnub/event.rb +39 -17
  99. data/lib/pubnub/event/formatter.rb +4 -0
  100. data/lib/pubnub/event/signature.rb +22 -7
  101. data/lib/pubnub/events/add_channels_to_push.rb +29 -13
  102. data/lib/pubnub/events/get_all_channels_metadata.rb +104 -0
  103. data/lib/pubnub/events/get_all_uuid_metadata.rb +104 -0
  104. data/lib/pubnub/events/get_channel_members.rb +120 -0
  105. data/lib/pubnub/events/{update_space.rb → get_channel_metadata.rb} +27 -27
  106. data/lib/pubnub/events/get_memberships.rb +120 -0
  107. data/lib/pubnub/events/{create_space.rb → get_uuid_metadata.rb} +27 -25
  108. data/lib/pubnub/events/grant.rb +10 -1
  109. data/lib/pubnub/events/history.rb +2 -1
  110. data/lib/pubnub/events/list_push_provisions.rb +29 -12
  111. data/lib/pubnub/events/publish.rb +2 -2
  112. data/lib/pubnub/events/remove_channel_members.rb +137 -0
  113. data/lib/pubnub/events/{delete_space.rb → remove_channel_metadata.rb} +13 -13
  114. data/lib/pubnub/events/remove_channels_from_push.rb +29 -13
  115. data/lib/pubnub/events/remove_device_from_push.rb +30 -14
  116. data/lib/pubnub/events/remove_memberships.rb +137 -0
  117. data/lib/pubnub/events/{delete_user.rb → remove_uuid_metadata.rb} +13 -13
  118. data/lib/pubnub/events/set_channel_members.rb +140 -0
  119. data/lib/pubnub/events/{manage_members.rb → set_channel_metadata.rb} +32 -38
  120. data/lib/pubnub/events/set_memberships.rb +140 -0
  121. data/lib/pubnub/events/{create_user.rb → set_uuid_metadata.rb} +33 -17
  122. data/lib/pubnub/events/signal.rb +1 -1
  123. data/lib/pubnub/formatter.rb +31 -4
  124. data/lib/pubnub/pam.rb +2 -11
  125. data/lib/pubnub/subscribe_callback.rb +1 -3
  126. data/lib/pubnub/subscribe_event/formatter.rb +30 -19
  127. data/lib/pubnub/subscriber.rb +5 -6
  128. data/lib/pubnub/validators/add_channels_to_push.rb +52 -0
  129. data/lib/pubnub/validators/get_all_channels_metadata.rb +29 -0
  130. data/lib/pubnub/validators/get_all_uuid_metadata.rb +29 -0
  131. data/lib/pubnub/validators/get_channel_members.rb +39 -0
  132. data/lib/pubnub/validators/get_channel_metadata.rb +39 -0
  133. data/lib/pubnub/validators/get_memberships.rb +39 -0
  134. data/lib/pubnub/validators/get_uuid_metadata.rb +39 -0
  135. data/lib/pubnub/validators/grant.rb +37 -2
  136. data/lib/pubnub/validators/list_push_provisions.rb +43 -0
  137. data/lib/pubnub/validators/remove_channel_members.rb +52 -0
  138. data/lib/pubnub/validators/remove_channel_metadata.rb +39 -0
  139. data/lib/pubnub/validators/remove_channels_from_push.rb +52 -0
  140. data/lib/pubnub/validators/remove_device_from_push.rb +43 -0
  141. data/lib/pubnub/validators/remove_memberships.rb +52 -0
  142. data/lib/pubnub/validators/remove_uuid_metadata.rb +39 -0
  143. data/lib/pubnub/validators/set_channel_members.rb +78 -0
  144. data/lib/pubnub/validators/set_channel_metadata.rb +62 -0
  145. data/lib/pubnub/validators/set_memberships.rb +78 -0
  146. data/lib/pubnub/validators/set_uuid_metadata.rb +62 -0
  147. data/lib/pubnub/version.rb +1 -1
  148. data/spec/examples/add_channels_to_push_spec.rb +178 -0
  149. data/spec/examples/{grant_examples_spec.rb → grant_examples_1_spec.rb} +0 -8973
  150. data/spec/examples/grant_examples_2_spec.rb +9107 -0
  151. data/spec/examples/history_examples_spec.rb +87 -9
  152. data/spec/examples/list_push_provisions_spec.rb +164 -0
  153. data/spec/examples/presence_examples_spec.rb +222 -186
  154. data/spec/examples/publish_examples_spec.rb +864 -0
  155. data/spec/examples/remove_channel_members_examples_spec.rb +100 -0
  156. data/spec/examples/remove_channel_metadata_examples_spec.rb +89 -0
  157. data/spec/examples/remove_channels_from_push_spec.rb +164 -0
  158. data/spec/examples/remove_device_from_push_spec.rb +164 -0
  159. data/spec/examples/remove_memberships_examples_spec.rb +121 -0
  160. data/spec/examples/remove_uuid_metadata_examples_spec.rb +107 -0
  161. data/spec/examples/revoke_examples_1_spec.rb +27013 -0
  162. data/spec/examples/revoke_examples_2_spec.rb +27012 -0
  163. data/spec/examples/revoke_examples_3_spec.rb +17967 -0
  164. data/spec/examples/set_channel_members_examples_spec.rb +99 -0
  165. data/spec/examples/set_channel_metadata_examples_spec.rb +93 -0
  166. data/spec/examples/set_memberships_examples_spec.rb +122 -0
  167. data/spec/examples/set_uuid_metadata_examples_spec.rb +114 -0
  168. data/spec/examples/status_request_message_count_exceeded_spec.rb +4 -1
  169. data/spec/examples/subscribe_examples_1_spec.rb +26972 -0
  170. data/spec/examples/subscribe_examples_2_spec.rb +19575 -0
  171. data/spec/lib/connection_callback_spec.rb +4 -3
  172. data/spec/lib/event/formatter_spec.rb +22 -0
  173. data/spec/lib/events/channel_metadata_spec.rb +58 -0
  174. data/spec/lib/events/grant_spec.rb +3 -2
  175. data/spec/lib/events/membership_spec.rb +51 -21
  176. data/spec/lib/events/presence_delta_spec.rb +9 -6
  177. data/spec/lib/events/presence_spec.rb +13 -7
  178. data/spec/lib/events/subscribe_spec.rb +104 -65
  179. data/spec/lib/events/uuid_metadata_spec.rb +86 -0
  180. data/spec/lib/multiple_ciphers_spec.rb +16 -4
  181. data/spec/lib/subscribe_event/formatter_spec.rb +22 -0
  182. data/spec/lib/super_admin_spec.rb +8 -4
  183. data/spec/spec_helper.rb +24 -8
  184. metadata +153 -65
  185. data/fixtures/vcr_cassettes/lib/events/create_space.yml +0 -40
  186. data/fixtures/vcr_cassettes/lib/events/create_user.yml +0 -40
  187. data/fixtures/vcr_cassettes/lib/events/delete_user.yml +0 -38
  188. data/fixtures/vcr_cassettes/lib/events/get_members.yml +0 -38
  189. data/fixtures/vcr_cassettes/lib/events/get_space.yml +0 -38
  190. data/fixtures/vcr_cassettes/lib/events/get_space_memberships.yml +0 -38
  191. data/fixtures/vcr_cassettes/lib/events/get_spaces.yml +0 -40
  192. data/fixtures/vcr_cassettes/lib/events/get_user.yml +0 -38
  193. data/fixtures/vcr_cassettes/lib/events/get_users.yml +0 -40
  194. data/fixtures/vcr_cassettes/lib/events/manage_members_remove.yml +0 -83
  195. data/fixtures/vcr_cassettes/lib/events/subscribe-member-add-async.yml +0 -77
  196. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-add-async.yml +0 -77
  197. data/fixtures/vcr_cassettes/lib/events/subscribe-space-update-async.yml +0 -77
  198. data/fixtures/vcr_cassettes/lib/events/update_space.yml +0 -40
  199. data/fixtures/vcr_cassettes/lib/events/update_user.yml +0 -40
  200. data/lib/pubnub/events/get_members.rb +0 -93
  201. data/lib/pubnub/events/get_space.rb +0 -74
  202. data/lib/pubnub/events/get_space_memberships.rb +0 -93
  203. data/lib/pubnub/events/get_spaces.rb +0 -90
  204. data/lib/pubnub/events/get_user.rb +0 -74
  205. data/lib/pubnub/events/get_users.rb +0 -90
  206. data/lib/pubnub/events/manage_memberships.rb +0 -105
  207. data/lib/pubnub/events/update_user.rb +0 -86
  208. data/lib/pubnub/validators/create_space.rb +0 -44
  209. data/lib/pubnub/validators/create_user.rb +0 -44
  210. data/lib/pubnub/validators/delete_space.rb +0 -32
  211. data/lib/pubnub/validators/delete_user.rb +0 -32
  212. data/lib/pubnub/validators/get_members.rb +0 -32
  213. data/lib/pubnub/validators/get_space.rb +0 -32
  214. data/lib/pubnub/validators/get_space_memberships.rb +0 -32
  215. data/lib/pubnub/validators/get_spaces.rb +0 -16
  216. data/lib/pubnub/validators/get_user.rb +0 -32
  217. data/lib/pubnub/validators/get_users.rb +0 -16
  218. data/lib/pubnub/validators/manage_members.rb +0 -45
  219. data/lib/pubnub/validators/manage_memberships.rb +0 -45
  220. data/lib/pubnub/validators/push.rb +0 -43
  221. data/lib/pubnub/validators/update_space.rb +0 -45
  222. data/lib/pubnub/validators/update_user.rb +0 -45
  223. data/spec/examples/revoke_examples_spec.rb +0 -71950
  224. data/spec/examples/subscribe_examples_spec.rb +0 -45184
  225. data/spec/lib/events/space_spec.rb +0 -75
  226. data/spec/lib/events/user_spec.rb +0 -75
@@ -3,13 +3,14 @@ module Pubnub
3
3
  # Push related event
4
4
  class AddChannelsToPush < SingleEvent
5
5
  include Concurrent::Async
6
- include Pubnub::Validator::Push
6
+ include Pubnub::Validator::AddChannelsToPush
7
7
 
8
8
  def initialize(options, app)
9
- super
10
9
  @event = current_operation
11
- @auth_key = options[:auth_key]
12
- @params = @given_options
10
+ @telemetry_name = :l_push
11
+ super
12
+ # `environment` should
13
+ @environment ||= 'development' if @push_gateway.eql? 'apns2'
13
14
  end
14
15
 
15
16
  private
@@ -25,19 +26,33 @@ module Pubnub
25
26
  end
26
27
 
27
28
  def path
28
- '/' + [
29
- 'v1',
30
- 'push',
31
- 'sub-key',
32
- @subscribe_key,
33
- 'devices',
34
- @params.fetch(:push_token)
35
- ].join('/')
29
+ if @push_gateway.eql? 'apns2'
30
+ '/' + [
31
+ 'v2',
32
+ 'push',
33
+ 'sub-key',
34
+ @subscribe_key,
35
+ 'devices-apns2',
36
+ @push_token
37
+ ].join('/')
38
+ else
39
+ '/' + [
40
+ 'v1',
41
+ 'push',
42
+ 'sub-key',
43
+ @subscribe_key,
44
+ 'devices',
45
+ @push_token
46
+ ].join('/')
47
+ end
36
48
  end
37
49
 
38
50
  def parameters(*_args)
39
51
  params = super
40
- params.merge!(@params.select { |p, _| required_params.include?(p) })
52
+ params[:add] = Formatter.channels_for_url(@channel, false)
53
+ params[:type] = @push_gateway unless @push_gateway.eql? 'apns2'
54
+ params[:environment] = @environment if @push_gateway.eql? 'apns2'
55
+ params[:topic] = @topic if @push_gateway.eql? 'apns2'
41
56
  params
42
57
  end
43
58
 
@@ -48,6 +63,7 @@ module Pubnub
48
63
  timetoken: nil,
49
64
  status: {
50
65
  code: req_res_objects[:response].code,
66
+ operation: current_operation,
51
67
  client_request: req_res_objects[:request],
52
68
  server_response: req_res_objects[:response],
53
69
 
@@ -0,0 +1,104 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetAllChannelsMetadata functionality
6
+ class GetAllChannelsMetadata < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetAllChannelsMetadata
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
14
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
15
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
16
+ @start = options[:start] if options[:start] && !options[:start].empty?
17
+ @end = options[:end] if options[:start] && !options[:end].empty?
18
+
19
+ if options[:include]
20
+ @include_count = [0, '0', false].include?(options[:include][:count]) ? "0" : "1" unless options[:include][:count].nil?
21
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
22
+ end
23
+
24
+ # Collections by default return number of available entries.
25
+ @include_count = "1" if @include_count.nil?
26
+
27
+ super
28
+ end
29
+
30
+ private
31
+
32
+ def current_operation
33
+ Pubnub::Constants::OPERATION_GET_ALL_CHANNELS_METADATA
34
+ end
35
+
36
+ def parameters(signature = false)
37
+ parameters = super(signature)
38
+ parameters[:limit] = @limit unless @limit.nil?
39
+ parameters[:sort] = @sort unless @sort.nil?
40
+ parameters[:filter] = @filter unless @filter.nil?
41
+ parameters[:start] = @start unless @start.nil?
42
+ parameters[:end] = @end if @end && !@start
43
+ parameters[:count] = @include_count unless @include_count.nil?
44
+ parameters[:include] = @include unless @include.to_s.empty?
45
+
46
+ parameters
47
+ end
48
+
49
+ def path
50
+ '/' + [
51
+ 'v2',
52
+ 'objects',
53
+ @subscribe_key,
54
+ 'channels'
55
+ ].join('/')
56
+ end
57
+
58
+ def valid_envelope(parsed_response, req_res_objects)
59
+ channels_metadata = parsed_response['data'].map { |uuid_metadata|
60
+ metadata = Hash.new
61
+ uuid_metadata.each{ |k,v| metadata[k.to_sym] = v }
62
+ metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
63
+ metadata
64
+ }
65
+
66
+ Pubnub::Envelope.new(
67
+ event: @event,
68
+ event_options: @given_options,
69
+ timetoken: nil,
70
+
71
+ result: {
72
+ code: req_res_objects[:response].code,
73
+ operation: current_operation,
74
+ client_request: req_res_objects[:request],
75
+ server_response: req_res_objects[:response],
76
+ data: {
77
+ metadata: channels_metadata,
78
+ totalCount: parsed_response['totalCount'],
79
+ next: parsed_response['next'],
80
+ prev: parsed_response['prev']
81
+ }
82
+ },
83
+
84
+ status: {
85
+ code: req_res_objects[:response].code,
86
+ operation: current_operation,
87
+ client_request: req_res_objects[:request],
88
+ server_response: req_res_objects[:response],
89
+ data: nil,
90
+ category: Pubnub::Constants::STATUS_ACK,
91
+ error: false,
92
+ auto_retried: false,
93
+
94
+ current_timetoken: nil,
95
+ last_timetoken: nil,
96
+ subscribed_channels: nil,
97
+ subscribed_channel_groups: nil,
98
+
99
+ config: get_config
100
+ }
101
+ )
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,104 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetAllUuidMetadata functionality
6
+ class GetAllUuidMetadata < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetAllUuidMetadata
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
14
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
15
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
16
+ @start = options[:start] if options[:start] && !options[:start].empty?
17
+ @end = options[:end] if options[:start] && !options[:end].empty?
18
+
19
+ if options[:include]
20
+ @include_count = [0, '0', false].include?(options[:include][:count]) ? "0" : "1" unless options[:include][:count].nil?
21
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
22
+ end
23
+
24
+ # Collections by default return number of available entries.
25
+ @include_count = "1" if @include_count.nil?
26
+
27
+ super
28
+ end
29
+
30
+ private
31
+
32
+ def current_operation
33
+ Pubnub::Constants::OPERATION_GET_ALL_UUID_METADATA
34
+ end
35
+
36
+ def parameters(signature = false)
37
+ parameters = super(signature)
38
+ parameters[:limit] = @limit unless @limit.nil?
39
+ parameters[:sort] = @sort unless @sort.nil?
40
+ parameters[:filter] = @filter unless @filter.nil?
41
+ parameters[:start] = @start unless @start.nil?
42
+ parameters[:end] = @end if @end && !@start
43
+ parameters[:count] = @include_count unless @include_count.nil?
44
+ parameters[:include] = @include unless @include.to_s.empty?
45
+
46
+ parameters
47
+ end
48
+
49
+ def path
50
+ '/' + [
51
+ 'v2',
52
+ 'objects',
53
+ @subscribe_key,
54
+ 'uuids'
55
+ ].join('/')
56
+ end
57
+
58
+ def valid_envelope(parsed_response, req_res_objects)
59
+ uuids_metadata = parsed_response['data'].map { |uuid_metadata|
60
+ metadata = Hash.new
61
+ uuid_metadata.each{ |k,v| metadata[k.to_sym] = v }
62
+ metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
63
+ metadata
64
+ }
65
+
66
+ Pubnub::Envelope.new(
67
+ event: @event,
68
+ event_options: @given_options,
69
+ timetoken: nil,
70
+
71
+ result: {
72
+ code: req_res_objects[:response].code,
73
+ operation: current_operation,
74
+ client_request: req_res_objects[:request],
75
+ server_response: req_res_objects[:response],
76
+ data: {
77
+ metadata: uuids_metadata,
78
+ totalCount: parsed_response['totalCount'],
79
+ next: parsed_response['next'],
80
+ prev: parsed_response['prev']
81
+ }
82
+ },
83
+
84
+ status: {
85
+ code: req_res_objects[:response].code,
86
+ operation: current_operation,
87
+ client_request: req_res_objects[:request],
88
+ server_response: req_res_objects[:response],
89
+ data: nil,
90
+ category: Pubnub::Constants::STATUS_ACK,
91
+ error: false,
92
+ auto_retried: false,
93
+
94
+ current_timetoken: nil,
95
+ last_timetoken: nil,
96
+ subscribed_channels: nil,
97
+ subscribed_channel_groups: nil,
98
+
99
+ config: get_config
100
+ }
101
+ )
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,120 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetChannelMembers functionality
6
+ class GetChannelMembers < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetChannelMembers
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
+ # Collections by default return number of available entries.
31
+ @include_count = "1" if @include_count.nil?
32
+
33
+ super
34
+ end
35
+
36
+ private
37
+
38
+ def current_operation
39
+ Pubnub::Constants::OPERATION_GET_CHANNEL_MEMBERS
40
+ end
41
+
42
+ def parameters(signature = false)
43
+ parameters = super(signature)
44
+ parameters[:limit] = @limit unless @limit.nil?
45
+ parameters[:sort] = @sort unless @sort.nil?
46
+ parameters[:filter] = @filter unless @filter.nil?
47
+ parameters[:start] = @start unless @start.nil?
48
+ parameters[:end] = @end if @end && !@start
49
+ parameters[:count] = @include_count unless @include_count.nil?
50
+ parameters[:include] = @include.sort.join(",") if @include && !@include.empty?
51
+
52
+ parameters
53
+ end
54
+
55
+ def path
56
+ '/' + [
57
+ 'v2',
58
+ 'objects',
59
+ @subscribe_key,
60
+ 'channels',
61
+ Formatter.channels_for_url(@channel),
62
+ 'uuids'
63
+ ].join('/')
64
+ end
65
+
66
+ def valid_envelope(parsed_response, req_res_objects)
67
+ members = parsed_response['data'].map { |channel_member|
68
+ member = Hash.new
69
+ channel_member.each{ |k,v| member[k.to_sym] = v }
70
+
71
+ unless member[:uuid].nil?
72
+ uuid_metadata = Hash.new
73
+ member[:uuid].each{ |k,v| uuid_metadata[k.to_sym] = v }
74
+ uuid_metadata[:updated] = Date._parse(uuid_metadata[:updated]) unless uuid_metadata[:updated].nil?
75
+ member[:uuid] = uuid_metadata
76
+ end
77
+ member[:updated] = Date._parse(member[:updated]) unless member[:updated].nil?
78
+
79
+ member
80
+ }
81
+
82
+ Pubnub::Envelope.new(
83
+ event: @event,
84
+ event_options: @given_options,
85
+ timetoken: nil,
86
+
87
+ result: {
88
+ code: req_res_objects[:response].code,
89
+ operation: current_operation,
90
+ client_request: req_res_objects[:request],
91
+ server_response: req_res_objects[:response],
92
+ data: {
93
+ members: members,
94
+ totalCount: parsed_response['totalCount'],
95
+ next: parsed_response['next'],
96
+ prev: parsed_response['prev']
97
+ }
98
+ },
99
+
100
+ status: {
101
+ code: req_res_objects[:response].code,
102
+ operation: current_operation,
103
+ client_request: req_res_objects[:request],
104
+ server_response: req_res_objects[:response],
105
+ data: nil,
106
+ category: Pubnub::Constants::STATUS_ACK,
107
+ error: false,
108
+ auto_retried: false,
109
+
110
+ current_timetoken: nil,
111
+ last_timetoken: nil,
112
+ subscribed_channels: nil,
113
+ subscribed_channel_groups: nil,
114
+
115
+ config: get_config
116
+ }
117
+ )
118
+ end
119
+ end
120
+ end
@@ -2,54 +2,54 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Pubnub
5
- # Holds UpdateSpace functionality
6
- class UpdateSpace < SingleEvent
5
+ # Holds GetChannelMetadata functionality
6
+ class GetChannelMetadata < SingleEvent
7
7
  include Concurrent::Async
8
- include Pubnub::Validator::UpdateSpace
8
+ include Pubnub::Validator::GetChannelMetadata
9
9
 
10
10
  def initialize(options, app)
11
- @event = :update_space
11
+ @event = current_operation
12
12
  @telemetry_name = :l_obj
13
- @space_id = options[:space_id]
14
- @data = options[:data]
15
- @include = options[:include]
16
- super
17
- end
18
-
19
- def fire
20
- Pubnub.logger.debug('Pubnub::UpdateSpace') { "Fired event #{self.class}" }
13
+ @channel = options[:channel]
21
14
 
22
- body = Formatter.format_message(@data, @cipher_key, false)
23
- response = send_request(body)
15
+ if options[:include]
16
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
17
+ end
24
18
 
25
- envelopes = fire_callbacks(handle(response, uri))
26
- finalize_event(envelopes)
27
- envelopes
19
+ # Single entity creation should return it's 'custom' field by default.
20
+ @include = "custom" if @include.nil?
21
+ super
28
22
  end
29
23
 
30
24
  private
31
25
 
32
26
  def current_operation
33
- Pubnub::Constants::OPERATION_UPDATE_SPACE
27
+ Pubnub::Constants::OPERATION_GET_CHANNEL_METADATA
34
28
  end
35
29
 
36
- def parameters(*_args)
37
- parameters = super
38
- parameters[:include] = @include if @include
30
+ def parameters(signature = false)
31
+ parameters = super(signature)
32
+ parameters[:include] = @include
33
+
39
34
  parameters
40
35
  end
41
36
 
42
37
  def path
43
38
  '/' + [
44
- 'v1',
39
+ 'v2',
45
40
  'objects',
46
41
  @subscribe_key,
47
- 'spaces',
48
- @space_id
42
+ 'channels',
43
+ Formatter.channels_for_url(@channel)
49
44
  ].join('/')
50
45
  end
51
46
 
52
47
  def valid_envelope(parsed_response, req_res_objects)
48
+ data = parsed_response['data']
49
+ metadata = Hash.new
50
+ data.each{ |k,v| metadata[k.to_sym] = v }
51
+ metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
52
+
53
53
  Pubnub::Envelope.new(
54
54
  event: @event,
55
55
  event_options: @given_options,
@@ -57,15 +57,15 @@ module Pubnub
57
57
 
58
58
  result: {
59
59
  code: req_res_objects[:response].code,
60
- operation: Pubnub::Constants::OPERATION_UPDATE_SPACE,
60
+ operation: current_operation,
61
61
  client_request: req_res_objects[:request],
62
62
  server_response: req_res_objects[:response],
63
- data: parsed_response
63
+ data: metadata
64
64
  },
65
65
 
66
66
  status: {
67
67
  code: req_res_objects[:response].code,
68
- operation: Pubnub::Constants::OPERATION_UPDATE_SPACE,
68
+ operation: current_operation,
69
69
  client_request: req_res_objects[:request],
70
70
  server_response: req_res_objects[:response],
71
71
  data: nil,