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,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,
@@ -0,0 +1,120 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetMemberships functionality
6
+ class GetMemberships < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetMemberships
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
+ # 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_MEMBERSHIPS
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
+ 'uuids',
61
+ Formatter.encode(@uuid),
62
+ 'channels'
63
+ ].join('/')
64
+ end
65
+
66
+ def valid_envelope(parsed_response, req_res_objects)
67
+ memberships = parsed_response['data'].map { |uuid_membership|
68
+ membership = Hash.new
69
+ uuid_membership.each{ |k,v| membership[k.to_sym] = v }
70
+
71
+ unless membership[:channel].nil?
72
+ channel_metadata = Hash.new
73
+ membership[:channel].each{ |k,v| channel_metadata[k.to_sym] = v }
74
+ channel_metadata[:updated] = Date._parse(channel_metadata[:updated]) unless channel_metadata[:updated].nil?
75
+ membership[:channel] = channel_metadata
76
+ end
77
+ membership[:updated] = Date._parse(membership[:updated]) unless membership[:updated].nil?
78
+
79
+ membership
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
+ memberships: memberships,
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,52 +2,54 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Pubnub
5
- # Holds CreateSpace functionality
6
- class CreateSpace < SingleEvent
5
+ # Holds GetUuidMetadata functionality
6
+ class GetUuidMetadata < SingleEvent
7
7
  include Concurrent::Async
8
- include Pubnub::Validator::CreateSpace
8
+ include Pubnub::Validator::GetUuidMetadata
9
9
 
10
10
  def initialize(options, app)
11
- @event = :create_space
11
+ @event = current_operation
12
12
  @telemetry_name = :l_obj
13
- @data = options[:data]
14
- @include = options[:include]
15
- super
16
- end
17
-
18
- def fire
19
- Pubnub.logger.debug('Pubnub::CreateSpace') { "Fired event #{self.class}" }
13
+ @uuid = options[:uuid].nil? ? app.env[:uuid] : options[:uuid]
20
14
 
21
- body = Formatter.format_message(@data, @cipher_key, false)
22
- response = send_request(body)
15
+ if options[:include]
16
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
17
+ end
23
18
 
24
- envelopes = fire_callbacks(handle(response, uri))
25
- finalize_event(envelopes)
26
- envelopes
19
+ # Single entity creation should return it's 'custom' field by default.
20
+ @include = "custom" if @include.nil?
21
+ super
27
22
  end
28
23
 
29
24
  private
30
25
 
31
26
  def current_operation
32
- Pubnub::Constants::OPERATION_CREATE_SPACE
27
+ Pubnub::Constants::OPERATION_GET_UUID_METADATA
33
28
  end
34
29
 
35
- def parameters(*_args)
36
- parameters = super
37
- parameters[:include] = @include if @include
30
+ def parameters(signature = false)
31
+ parameters = super(signature)
32
+ parameters[:include] = @include
33
+
38
34
  parameters
39
35
  end
40
36
 
41
37
  def path
42
38
  '/' + [
43
- 'v1',
39
+ 'v2',
44
40
  'objects',
45
41
  @subscribe_key,
46
- 'spaces'
42
+ 'uuids',
43
+ Formatter.encode(@uuid)
47
44
  ].join('/')
48
45
  end
49
46
 
50
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
+
51
53
  Pubnub::Envelope.new(
52
54
  event: @event,
53
55
  event_options: @given_options,
@@ -55,15 +57,15 @@ module Pubnub
55
57
 
56
58
  result: {
57
59
  code: req_res_objects[:response].code,
58
- operation: Pubnub::Constants::OPERATION_CREATE_SPACE,
60
+ operation: current_operation,
59
61
  client_request: req_res_objects[:request],
60
62
  server_response: req_res_objects[:response],
61
- data: parsed_response
63
+ data: metadata
62
64
  },
63
65
 
64
66
  status: {
65
67
  code: req_res_objects[:response].code,
66
- operation: Pubnub::Constants::OPERATION_CREATE_SPACE,
68
+ operation: current_operation,
67
69
  client_request: req_res_objects[:request],
68
70
  server_response: req_res_objects[:response],
69
71
  data: nil,