pubnub 4.3.0 → 4.4.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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/.pubnub.yml +32 -24
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile.lock +1 -1
  5. data/README.md +1 -1
  6. data/VERSION +1 -1
  7. data/fixtures/vcr_cassettes/examples/grant/1913.yml +1 -1
  8. data/fixtures/vcr_cassettes/examples/grant/1945.yml +355 -4
  9. data/fixtures/vcr_cassettes/lib/events/get_all_channels_metadata.yml +39 -0
  10. data/fixtures/vcr_cassettes/lib/events/get_all_uuid_metadata.yml +76 -0
  11. data/fixtures/vcr_cassettes/lib/events/{get_space_memberships.yml → get_channel_members.yml} +5 -6
  12. data/fixtures/vcr_cassettes/lib/events/get_channel_metadata.yml +37 -0
  13. data/fixtures/vcr_cassettes/lib/events/{get_members.yml → get_memberships.yml} +10 -11
  14. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata.yml +76 -0
  15. data/fixtures/vcr_cassettes/lib/events/grant-error.yml +2 -2
  16. data/fixtures/vcr_cassettes/lib/events/grant.yml +10 -11
  17. data/fixtures/vcr_cassettes/lib/events/remove_channel_members.yml +78 -0
  18. data/fixtures/vcr_cassettes/lib/events/{delete_space.yml → remove_channel_metadata.yml} +5 -6
  19. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_remove.yml → remove_memberships.yml} +8 -9
  20. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata.yml +76 -0
  21. data/fixtures/vcr_cassettes/lib/events/set_channel_members.yml +39 -0
  22. data/fixtures/vcr_cassettes/lib/events/set_channel_metadata.yml +39 -0
  23. data/fixtures/vcr_cassettes/lib/events/{manage_members_add.yml → set_memberships.yml} +8 -9
  24. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata.yml +78 -0
  25. data/fixtures/vcr_cassettes/lib/events/{subscribe-space-delete-async.yml → subscribe-channel-metadata-remove-sync.yml} +12 -14
  26. data/fixtures/vcr_cassettes/lib/events/subscribe-channel-metadata-set-async.yml +75 -0
  27. data/fixtures/vcr_cassettes/lib/events/{subscribe-member-remove-async.yml → subscribe-member-remove-sync.yml} +12 -14
  28. data/fixtures/vcr_cassettes/lib/events/subscribe-member-set-async.yml +75 -0
  29. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-remove-async.yml +12 -14
  30. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-update-async.yml → subscribe-membership-set-async.yml} +12 -14
  31. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-delete-async.yml → subscribe-uuid-metadata-remove-sync.yml} +12 -14
  32. data/fixtures/vcr_cassettes/lib/events/subscribe-uuid-metadata-set-async.yml +75 -0
  33. data/lib/pubnub/client.rb +14 -14
  34. data/lib/pubnub/client/events.rb +4 -2
  35. data/lib/pubnub/constants.rb +19 -18
  36. data/lib/pubnub/event.rb +29 -15
  37. data/lib/pubnub/event/signature.rb +22 -7
  38. data/lib/pubnub/events/get_all_channels_metadata.rb +92 -0
  39. data/lib/pubnub/events/get_all_uuid_metadata.rb +92 -0
  40. data/lib/pubnub/events/get_channel_members.rb +100 -0
  41. data/lib/pubnub/events/{get_user.rb → get_channel_metadata.rb} +22 -15
  42. data/lib/pubnub/events/get_memberships.rb +100 -0
  43. data/lib/pubnub/events/{get_space.rb → get_uuid_metadata.rb} +22 -15
  44. data/lib/pubnub/events/grant.rb +9 -7
  45. data/lib/pubnub/events/remove_channel_members.rb +117 -0
  46. data/lib/pubnub/events/{delete_space.rb → remove_channel_metadata.rb} +12 -12
  47. data/lib/pubnub/events/remove_memberships.rb +117 -0
  48. data/lib/pubnub/events/{delete_user.rb → remove_uuid_metadata.rb} +12 -12
  49. data/lib/pubnub/events/set_channel_members.rb +120 -0
  50. data/lib/pubnub/events/{create_space.rb → set_channel_metadata.rb} +26 -16
  51. data/lib/pubnub/events/set_memberships.rb +120 -0
  52. data/lib/pubnub/events/{update_space.rb → set_uuid_metadata.rb} +27 -18
  53. data/lib/pubnub/pam.rb +2 -11
  54. data/lib/pubnub/subscribe_callback.rb +1 -3
  55. data/lib/pubnub/subscribe_event/formatter.rb +21 -17
  56. data/lib/pubnub/subscriber.rb +5 -6
  57. data/lib/pubnub/validators/get_all_channels_metadata.rb +29 -0
  58. data/lib/pubnub/validators/get_all_uuid_metadata.rb +29 -0
  59. data/lib/pubnub/validators/get_channel_members.rb +39 -0
  60. data/lib/pubnub/validators/get_channel_metadata.rb +39 -0
  61. data/lib/pubnub/validators/get_memberships.rb +39 -0
  62. data/lib/pubnub/validators/get_uuid_metadata.rb +39 -0
  63. data/lib/pubnub/validators/grant.rb +37 -2
  64. data/lib/pubnub/validators/remove_channel_members.rb +52 -0
  65. data/lib/pubnub/validators/remove_channel_metadata.rb +39 -0
  66. data/lib/pubnub/validators/remove_memberships.rb +52 -0
  67. data/lib/pubnub/validators/remove_uuid_metadata.rb +39 -0
  68. data/lib/pubnub/validators/set_channel_members.rb +78 -0
  69. data/lib/pubnub/validators/set_channel_metadata.rb +62 -0
  70. data/lib/pubnub/validators/set_memberships.rb +78 -0
  71. data/lib/pubnub/validators/set_uuid_metadata.rb +62 -0
  72. data/lib/pubnub/version.rb +1 -1
  73. data/spec/examples/grant_examples_spec.rb +2 -2
  74. data/spec/lib/events/channel_metadata_spec.rb +58 -0
  75. data/spec/lib/events/grant_spec.rb +3 -2
  76. data/spec/lib/events/membership_spec.rb +25 -22
  77. data/spec/lib/events/subscribe_spec.rb +58 -45
  78. data/spec/lib/events/uuid_metadata_spec.rb +56 -0
  79. data/spec/spec_helper.rb +1 -1
  80. metadata +55 -57
  81. data/fixtures/vcr_cassettes/lib/events/create_space.yml +0 -40
  82. data/fixtures/vcr_cassettes/lib/events/create_user.yml +0 -40
  83. data/fixtures/vcr_cassettes/lib/events/delete_user.yml +0 -38
  84. data/fixtures/vcr_cassettes/lib/events/get_space.yml +0 -38
  85. data/fixtures/vcr_cassettes/lib/events/get_spaces.yml +0 -40
  86. data/fixtures/vcr_cassettes/lib/events/get_user.yml +0 -38
  87. data/fixtures/vcr_cassettes/lib/events/get_users.yml +0 -40
  88. data/fixtures/vcr_cassettes/lib/events/manage_members_remove.yml +0 -83
  89. data/fixtures/vcr_cassettes/lib/events/manage_memberships_add.yml +0 -40
  90. data/fixtures/vcr_cassettes/lib/events/subscribe-member-add-async.yml +0 -77
  91. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-add-async.yml +0 -77
  92. data/fixtures/vcr_cassettes/lib/events/subscribe-space-update-async.yml +0 -77
  93. data/fixtures/vcr_cassettes/lib/events/update_space.yml +0 -40
  94. data/fixtures/vcr_cassettes/lib/events/update_user.yml +0 -40
  95. data/lib/pubnub/events/create_user.rb +0 -84
  96. data/lib/pubnub/events/get_members.rb +0 -93
  97. data/lib/pubnub/events/get_space_memberships.rb +0 -93
  98. data/lib/pubnub/events/get_spaces.rb +0 -90
  99. data/lib/pubnub/events/get_users.rb +0 -90
  100. data/lib/pubnub/events/manage_members.rb +0 -105
  101. data/lib/pubnub/events/manage_memberships.rb +0 -105
  102. data/lib/pubnub/events/update_user.rb +0 -86
  103. data/lib/pubnub/validators/create_space.rb +0 -44
  104. data/lib/pubnub/validators/create_user.rb +0 -44
  105. data/lib/pubnub/validators/delete_space.rb +0 -32
  106. data/lib/pubnub/validators/delete_user.rb +0 -32
  107. data/lib/pubnub/validators/get_members.rb +0 -32
  108. data/lib/pubnub/validators/get_space.rb +0 -32
  109. data/lib/pubnub/validators/get_space_memberships.rb +0 -32
  110. data/lib/pubnub/validators/get_spaces.rb +0 -16
  111. data/lib/pubnub/validators/get_user.rb +0 -32
  112. data/lib/pubnub/validators/get_users.rb +0 -16
  113. data/lib/pubnub/validators/manage_members.rb +0 -45
  114. data/lib/pubnub/validators/manage_memberships.rb +0 -45
  115. data/lib/pubnub/validators/update_space.rb +0 -45
  116. data/lib/pubnub/validators/update_user.rb +0 -45
  117. data/spec/lib/events/space_spec.rb +0 -75
  118. data/spec/lib/events/user_spec.rb +0 -75
@@ -7,8 +7,10 @@ module Pubnub
7
7
  EVENTS = %w[publish subscribe presence leave history here_now audit grant delete_messages
8
8
  revoke time heartbeat where_now set_state state channel_registration message_counts signal
9
9
  add_channels_to_push list_push_provisions remove_channels_from_push remove_device_from_push
10
- create_user create_space delete_user delete_space get_user get_users get_space get_spaces
11
- update_user update_space get_members get_space_memberships manage_members manage_memberships].freeze
10
+ set_uuid_metadata set_channel_metadata remove_uuid_metadata remove_channel_metadata
11
+ get_uuid_metadata get_all_uuid_metadata get_channel_metadata get_all_channels_metadata
12
+ get_channel_members get_memberships set_channel_members set_memberships
13
+ remove_memberships remove_channel_members].freeze
12
14
 
13
15
  EVENTS.each do |event_name|
14
16
  define_method event_name do |options = {}, &block|
@@ -66,20 +66,20 @@ module Pubnub
66
66
  OPERATION_REMOVE_CHANNELS_FROM_PUSH = :remove_channels_from_push
67
67
  OPERATION_REMOVE_DEVICE_FROM_PUSH = :remove_device_from_push
68
68
  OPERATION_SIGNAL = :signal
69
- OPERATION_CREATE_USER = :create_user
70
- OPERATION_GET_USER = :get_user
71
- OPERATION_GET_USERS = :get_users
72
- OPERATION_UPDATE_USER = :update_user
73
- OPERATION_DELETE_USER = :delete_user
74
- OPERATION_CREATE_SPACE = :create_space
75
- OPERATION_GET_SPACE = :get_space
76
- OPERATION_GET_SPACES = :get_spaces
77
- OPERATION_UPDATE_SPACE = :update_space
78
- OPERATION_DELETE_SPACE = :delete_space
79
- OPERATION_GET_MEMBERS = :get_members
80
- OPERATION_MANAGE_MEMBERS = :manage_members
81
- OPERATION_GET_SPACE_MEMBERSHIPS = :get_space_memberships
82
- OPERATION_MANAGE_MEMBERSHIPS = :manage_memberships
69
+ OPERATION_SET_UUID_METADATA = :set_uuid_metadata
70
+ OPERATION_GET_UUID_METADATA = :get_uuid_metadata
71
+ OPERATION_GET_ALL_UUID_METADATA = :get_all_uuid_metadata
72
+ OPERATION_REMOVE_UUID_METADATA = :remove_uuid_metadata
73
+ OPERATION_SET_CHANNEL_METADATA = :set_channel_metadata
74
+ OPERATION_GET_CHANNEL_METADATA = :get_channel_metadata
75
+ OPERATION_GET_ALL_CHANNELS_METADATA = :get_all_channels_metadata
76
+ OPERATION_REMOVE_CHANNEL_METADATA = :remove_channel_metadata
77
+ OPERATION_GET_CHANNEL_MEMBERS = :get_channel_members
78
+ OPERATION_SET_CHANNEL_MEMBERS = :set_channel_members
79
+ OPERATION_REMOVE_CHANNEL_MEMBERS = :remove_channel_members
80
+ OPERATION_GET_MEMBERSHIPS = :get_memberships
81
+ OPERATION_SET_MEMBERSHIPS = :set_memberships
82
+ OPERATION_REMOVE_MEMBERSHIPS = :remove_memberships
83
83
 
84
84
  OPERATIONS = [
85
85
  OPERATION_SUBSCRIBE, OPERATION_HEARTBEAT, OPERATION_PRESENCE, OPERATION_TIME, OPERATION_HISTORY,
@@ -87,10 +87,11 @@ module Pubnub
87
87
  OPERATION_LIST_ALL_CHANNELS_IN_CHANNEL_GROUP, OPERATION_CHANNEL_GROUP_ADD, OPERATION_CHANNEL_GROUP_REMOVE,
88
88
  OPERATION_AUDIT, OPERATION_GRANT, OPERATION_REVOKE, OPERATION_WHERE_NOW, OPERATION_MESSAGE_COUNTS,
89
89
  OPERATION_ADD_CHANNELS_TO_PUSH, OPERATION_LIST_PUSH_PROVISIONS, OPERATION_REMOVE_CHANNELS_FROM_PUSH,
90
- OPERATION_REMOVE_DEVICE_FROM_PUSH, OPERATION_SIGNAL, OPERATION_CREATE_USER, OPERATION_GET_USER,
91
- OPERATION_GET_USERS, OPERATION_UPDATE_USER, OPERATION_DELETE_USER, OPERATION_CREATE_SPACE,
92
- OPERATION_GET_SPACE, OPERATION_GET_SPACES, OPERATION_UPDATE_SPACE, OPERATION_DELETE_SPACE,
93
- OPERATION_GET_MEMBERS, OPERATION_MANAGE_MEMBERS, OPERATION_GET_SPACE_MEMBERSHIPS, OPERATION_MANAGE_MEMBERSHIPS
90
+ OPERATION_REMOVE_DEVICE_FROM_PUSH, OPERATION_SIGNAL, OPERATION_SET_UUID_METADATA, OPERATION_GET_UUID_METADATA,
91
+ OPERATION_GET_ALL_UUID_METADATA, OPERATION_REMOVE_UUID_METADATA, OPERATION_SET_CHANNEL_METADATA,
92
+ OPERATION_GET_CHANNEL_METADATA, OPERATION_GET_ALL_CHANNELS_METADATA, OPERATION_REMOVE_CHANNEL_METADATA,
93
+ OPERATION_GET_CHANNEL_MEMBERS, OPERATION_SET_CHANNEL_MEMBERS, OPERATION_REMOVE_CHANNEL_MEMBERS,
94
+ OPERATION_GET_MEMBERSHIPS, OPERATION_SET_MEMBERSHIPS, OPERATION_REMOVE_MEMBERSHIPS
94
95
  ].freeze
95
96
 
96
97
  # Announcements
@@ -29,6 +29,7 @@ module Pubnub
29
29
  set_timestamp
30
30
  validate!
31
31
  telemetry = @app.telemetry_for(@telemetry_name)
32
+ @compressed_body = nil
32
33
  @current_telemetry = telemetry ? telemetry.round(3) : nil
33
34
  Pubnub.logger.debug('Pubnub::Event') { "Initialized #{self.class}" }
34
35
  end
@@ -46,24 +47,20 @@ module Pubnub
46
47
  def send_request(compressed_body = '')
47
48
  Pubnub.logger.debug('Pubnub::Event') { '#send_request called' }
48
49
 
50
+ @compressed_body = compressed_body
49
51
  sender = request_dispatcher
50
52
  Pubnub.logger.debug('Pubnub::Event') { '#send_request got sender' }
51
53
 
52
54
  telemetry_time_start = ::Time.now.to_f
53
- response = case @event
54
- when Pubnub::Constants::OPERATION_DELETE, Pubnub::Constants::OPERATION_DELETE_SPACE, Pubnub::Constants::OPERATION_DELETE_USER
55
- sender.delete(uri.to_s)
56
- when Pubnub::Constants::OPERATION_MANAGE_MEMBERS, Pubnub::Constants::OPERATION_MANAGE_MEMBERSHIPS,
57
- Pubnub::Constants::OPERATION_UPDATE_SPACE, Pubnub::Constants::OPERATION_UPDATE_USER
58
- sender.patch(uri.to_s, body: compressed_body)
59
- when Pubnub::Constants::OPERATION_CREATE_USER, Pubnub::Constants::OPERATION_CREATE_SPACE
55
+ response = case operation_http_method
56
+ when "get"
57
+ sender.get(uri.to_s)
58
+ when "post"
60
59
  sender.post(uri.to_s, body: compressed_body)
60
+ when "patch"
61
+ sender.patch(uri.to_s, body: compressed_body)
61
62
  else
62
- if compressed_body.empty?
63
- sender.get(uri.to_s)
64
- else
65
- sender.post(uri.to_s, body: compressed_body)
66
- end
63
+ sender.delete(uri.to_s)
67
64
  end
68
65
 
69
66
  begin
@@ -84,7 +81,7 @@ module Pubnub
84
81
  return @uri if @uri
85
82
  end
86
83
 
87
- sa_signature = super_admin_signature unless parameters.include?(:signature)
84
+ sa_signature = super_admin_signature(operation_http_method, @compressed_body) unless parameters.include?(:signature)
88
85
 
89
86
  uri = @ssl ? 'https://' : 'http://'
90
87
  uri += @origin
@@ -105,6 +102,23 @@ module Pubnub
105
102
 
106
103
  private
107
104
 
105
+ def operation_http_method
106
+ case @event
107
+ when Pubnub::Constants::OPERATION_DELETE, Pubnub::Constants::OPERATION_REMOVE_CHANNEL_METADATA, Pubnub::Constants::OPERATION_REMOVE_UUID_METADATA
108
+ "delete"
109
+ when Pubnub::Constants::OPERATION_SET_UUID_METADATA, Pubnub::Constants::OPERATION_SET_CHANNEL_METADATA,
110
+ Pubnub::Constants::OPERATION_SET_CHANNEL_MEMBERS, Pubnub::Constants::OPERATION_SET_MEMBERSHIPS,
111
+ Pubnub::Constants::OPERATION_REMOVE_CHANNEL_MEMBERS, Pubnub::Constants::OPERATION_REMOVE_MEMBERSHIPS
112
+ "patch"
113
+ else
114
+ if @compressed_body.nil? || @compressed_body.empty?
115
+ "get"
116
+ else
117
+ "post"
118
+ end
119
+ end
120
+ end
121
+
108
122
  def secure_call(cb, arg)
109
123
  cb.call arg
110
124
  rescue StandardError => error
@@ -147,9 +161,9 @@ module Pubnub
147
161
  publish_key subscribe_key timetoken
148
162
  open_timeout read_timeout idle_timeout heartbeat
149
163
  group action read write delete manage ttl presence start
150
- end count reverse presence_callback store skip_validate
164
+ end count limit reverse presence_callback store skip_validate
151
165
  state channel_group channel_groups compressed meta customs include_token
152
- replicate with_presence cipher_key_selector include_meta]
166
+ replicate with_presence cipher_key_selector include_meta join update get]
153
167
 
154
168
  options = options.each_with_object({}) { |option, obj| obj[option.first.to_sym] = option.last }
155
169
 
@@ -6,20 +6,35 @@ module Pubnub
6
6
  module Signature
7
7
  private
8
8
 
9
- def super_admin_signature
9
+ def super_admin_signature(http_method, body)
10
10
  return unless @app.env[:secret_key]
11
11
 
12
+ # Handle special case with publish operation signing when message sent as POST body.
13
+ http_method = if http_method.upcase == "POST" && current_operation == Pubnub::Constants::OPERATION_PUBLISH
14
+ "GET"
15
+ else
16
+ http_method.upcase
17
+ end
18
+
12
19
  message = [
13
- @app.env[:subscribe_key],
20
+ http_method.upcase,
14
21
  @app.env[:publish_key],
15
22
  path,
16
23
  variables_for_signature.gsub(/[!~'()*]/) { |char| '%' + char.ord.to_s(16).upcase }, # Replace ! ~ * ' ( )
17
- ].join("\n")
24
+ ]
25
+
26
+ if %w[POST PATCH].include?(http_method)
27
+ message.push(body)
28
+ else
29
+ message.push('')
30
+ end
18
31
 
19
- URI.encode_www_form_component(Base64.encode64(
32
+ signature = URI.encode_www_form_component(Base64.encode64(
20
33
  OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'),
21
- @app.env[:secret_key].to_s, message)
22
- ).strip).gsub('+', '%20')
34
+ @app.env[:secret_key].to_s, message.join("\n"))
35
+ ).strip.gsub(/\+/, '-').gsub(/\//, '_').gsub(/=+$/, ''))
36
+
37
+ "v2.#{signature}"
23
38
  end
24
39
 
25
40
  def variables_for_signature
@@ -29,7 +44,7 @@ module Pubnub
29
44
  if %w[meta ortt].include?(k.to_s)
30
45
  encoded_value = URI.encode_www_form_component(v.to_json).gsub('+', '%20')
31
46
  "#{k}=#{encoded_value}"
32
- elsif %w[t state filter-expr].include?(k.to_s)
47
+ elsif %w[t state filter-expr sort filter].include?(k.to_s)
33
48
  "#{k}=#{v}"
34
49
  else
35
50
  "#{k}=#{URI.encode_www_form_component(v.to_s).gsub('+', '%20')}"
@@ -0,0 +1,92 @@
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
+ Pubnub::Envelope.new(
60
+ event: @event,
61
+ event_options: @given_options,
62
+ timetoken: nil,
63
+
64
+ result: {
65
+ code: req_res_objects[:response].code,
66
+ operation: current_operation,
67
+ client_request: req_res_objects[:request],
68
+ server_response: req_res_objects[:response],
69
+ data: parsed_response
70
+ },
71
+
72
+ status: {
73
+ code: req_res_objects[:response].code,
74
+ operation: current_operation,
75
+ client_request: req_res_objects[:request],
76
+ server_response: req_res_objects[:response],
77
+ data: nil,
78
+ category: Pubnub::Constants::STATUS_ACK,
79
+ error: false,
80
+ auto_retried: false,
81
+
82
+ current_timetoken: nil,
83
+ last_timetoken: nil,
84
+ subscribed_channels: nil,
85
+ subscribed_channel_groups: nil,
86
+
87
+ config: get_config
88
+ }
89
+ )
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,92 @@
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
+ Pubnub::Envelope.new(
60
+ event: @event,
61
+ event_options: @given_options,
62
+ timetoken: nil,
63
+
64
+ result: {
65
+ code: req_res_objects[:response].code,
66
+ operation: current_operation,
67
+ client_request: req_res_objects[:request],
68
+ server_response: req_res_objects[:response],
69
+ data: parsed_response
70
+ },
71
+
72
+ status: {
73
+ code: req_res_objects[:response].code,
74
+ operation: current_operation,
75
+ client_request: req_res_objects[:request],
76
+ server_response: req_res_objects[:response],
77
+ data: nil,
78
+ category: Pubnub::Constants::STATUS_ACK,
79
+ error: false,
80
+ auto_retried: false,
81
+
82
+ current_timetoken: nil,
83
+ last_timetoken: nil,
84
+ subscribed_channels: nil,
85
+ subscribed_channel_groups: nil,
86
+
87
+ config: get_config
88
+ }
89
+ )
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,100 @@
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
+ Pubnub::Envelope.new(
68
+ event: @event,
69
+ event_options: @given_options,
70
+ timetoken: nil,
71
+
72
+ result: {
73
+ code: req_res_objects[:response].code,
74
+ operation: current_operation,
75
+ client_request: req_res_objects[:request],
76
+ server_response: req_res_objects[:response],
77
+ data: parsed_response
78
+ },
79
+
80
+ status: {
81
+ code: req_res_objects[:response].code,
82
+ operation: current_operation,
83
+ client_request: req_res_objects[:request],
84
+ server_response: req_res_objects[:response],
85
+ data: nil,
86
+ category: Pubnub::Constants::STATUS_ACK,
87
+ error: false,
88
+ auto_retried: false,
89
+
90
+ current_timetoken: nil,
91
+ last_timetoken: nil,
92
+ subscribed_channels: nil,
93
+ subscribed_channel_groups: nil,
94
+
95
+ config: get_config
96
+ }
97
+ )
98
+ end
99
+ end
100
+ end