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.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -0
- data/.pubnub.yml +168 -117
- data/.travis.yml +13 -9
- data/CHANGELOG.md +31 -8
- data/Gemfile.lock +67 -64
- data/README.md +56 -17
- data/VERSION +1 -1
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/001.yml +45 -0
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/003.yml +45 -0
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/004.yml +45 -0
- data/fixtures/vcr_cassettes/examples/grant/1913.yml +1 -1
- data/fixtures/vcr_cassettes/examples/grant/1944.yml +8 -9
- data/fixtures/vcr_cassettes/examples/grant/1945.yml +359 -9
- data/fixtures/vcr_cassettes/examples/grant/1946.yml +8 -9
- data/fixtures/vcr_cassettes/examples/grant/1947.yml +8 -9
- data/fixtures/vcr_cassettes/examples/grant/1948.yml +8 -9
- data/fixtures/vcr_cassettes/examples/history/100.yml +46 -0
- data/fixtures/vcr_cassettes/examples/history/include_meta__encrypted.yml +46 -0
- data/fixtures/vcr_cassettes/examples/history/include_token__encrypted.yml +45 -0
- data/fixtures/vcr_cassettes/examples/history/no_includes__encrypted.yml +45 -0
- data/fixtures/vcr_cassettes/examples/list_push_provisions/001.yml +46 -0
- data/fixtures/vcr_cassettes/examples/list_push_provisions/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/list_push_provisions/003.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_channels_from_push/001.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_channels_from_push/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_channels_from_push/003.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_device_from_push/001.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_device_from_push/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_device_from_push/003.yml +45 -0
- data/fixtures/vcr_cassettes/lib/events/get_all_channels_metadata.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/get_all_uuid_metadata.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/get_channel_members.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_channel_metadata.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_memberships1.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_memberships2.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata1.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata2.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/grant-error.yml +2 -2
- data/fixtures/vcr_cassettes/lib/events/grant.yml +10 -11
- data/fixtures/vcr_cassettes/lib/events/remove_channel_members.yml +78 -0
- data/fixtures/vcr_cassettes/lib/events/{delete_space.yml → remove_channel_metadata.yml} +5 -6
- data/fixtures/vcr_cassettes/lib/events/{manage_memberships_remove.yml → remove_memberships1.yml} +8 -9
- data/fixtures/vcr_cassettes/lib/events/{manage_members_add.yml → remove_memberships2.yml} +8 -9
- data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata1.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata2.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/set_channel_members.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/set_channel_metadata.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/{manage_memberships_add.yml → set_memberships1.yml} +8 -9
- data/fixtures/vcr_cassettes/lib/events/set_memberships2.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata1.yml +78 -0
- data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata2.yml +78 -0
- data/fixtures/vcr_cassettes/lib/events/{subscribe-space-delete-async.yml → subscribe-channel-metadata-remove-sync.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/subscribe-channel-metadata-set-async.yml +75 -0
- data/fixtures/vcr_cassettes/lib/events/{subscribe-member-remove-async.yml → subscribe-member-remove-sync.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/subscribe-member-set-async.yml +75 -0
- data/fixtures/vcr_cassettes/lib/events/subscribe-membership-remove-async.yml +12 -14
- data/fixtures/vcr_cassettes/lib/events/{subscribe-user-update-async.yml → subscribe-membership-set-async.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/{subscribe-user-delete-async.yml → subscribe-uuid-metadata-remove-sync.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/subscribe-uuid-metadata-set-async.yml +75 -0
- data/lib/pubnub/client.rb +18 -15
- data/lib/pubnub/client/events.rb +4 -2
- data/lib/pubnub/client/paged_history.rb +1 -1
- data/lib/pubnub/constants.rb +19 -18
- data/lib/pubnub/event.rb +32 -16
- data/lib/pubnub/event/formatter.rb +4 -0
- data/lib/pubnub/event/signature.rb +22 -7
- data/lib/pubnub/events/add_channels_to_push.rb +29 -13
- data/lib/pubnub/events/get_all_channels_metadata.rb +104 -0
- data/lib/pubnub/events/get_all_uuid_metadata.rb +104 -0
- data/lib/pubnub/events/get_channel_members.rb +120 -0
- data/lib/pubnub/events/{update_space.rb → get_channel_metadata.rb} +27 -27
- data/lib/pubnub/events/get_memberships.rb +120 -0
- data/lib/pubnub/events/{create_space.rb → get_uuid_metadata.rb} +27 -25
- data/lib/pubnub/events/grant.rb +10 -1
- data/lib/pubnub/events/history.rb +17 -2
- data/lib/pubnub/events/list_push_provisions.rb +29 -12
- data/lib/pubnub/events/remove_channel_members.rb +137 -0
- data/lib/pubnub/events/{delete_space.rb → remove_channel_metadata.rb} +12 -12
- data/lib/pubnub/events/remove_channels_from_push.rb +29 -13
- data/lib/pubnub/events/remove_device_from_push.rb +30 -14
- data/lib/pubnub/events/remove_memberships.rb +137 -0
- data/lib/pubnub/events/{delete_user.rb → remove_uuid_metadata.rb} +12 -12
- data/lib/pubnub/events/set_channel_members.rb +140 -0
- data/lib/pubnub/events/{manage_members.rb → set_channel_metadata.rb} +32 -38
- data/lib/pubnub/events/set_memberships.rb +140 -0
- data/lib/pubnub/events/{create_user.rb → set_uuid_metadata.rb} +33 -17
- data/lib/pubnub/formatter.rb +30 -3
- data/lib/pubnub/pam.rb +2 -11
- data/lib/pubnub/subscribe_callback.rb +1 -3
- data/lib/pubnub/subscribe_event/formatter.rb +26 -17
- data/lib/pubnub/subscriber.rb +5 -6
- data/lib/pubnub/validators/add_channels_to_push.rb +52 -0
- data/lib/pubnub/validators/get_all_channels_metadata.rb +29 -0
- data/lib/pubnub/validators/get_all_uuid_metadata.rb +29 -0
- data/lib/pubnub/validators/get_channel_members.rb +39 -0
- data/lib/pubnub/validators/get_channel_metadata.rb +39 -0
- data/lib/pubnub/validators/get_memberships.rb +39 -0
- data/lib/pubnub/validators/get_uuid_metadata.rb +39 -0
- data/lib/pubnub/validators/grant.rb +37 -2
- data/lib/pubnub/validators/list_push_provisions.rb +43 -0
- data/lib/pubnub/validators/remove_channel_members.rb +52 -0
- data/lib/pubnub/validators/remove_channel_metadata.rb +39 -0
- data/lib/pubnub/validators/remove_channels_from_push.rb +52 -0
- data/lib/pubnub/validators/remove_device_from_push.rb +43 -0
- data/lib/pubnub/validators/remove_memberships.rb +52 -0
- data/lib/pubnub/validators/remove_uuid_metadata.rb +39 -0
- data/lib/pubnub/validators/set_channel_members.rb +78 -0
- data/lib/pubnub/validators/set_channel_metadata.rb +62 -0
- data/lib/pubnub/validators/set_memberships.rb +78 -0
- data/lib/pubnub/validators/set_uuid_metadata.rb +62 -0
- data/lib/pubnub/version.rb +1 -1
- data/pubnub.gemspec +1 -1
- data/spec/examples/add_channels_to_push_spec.rb +178 -0
- data/spec/examples/{grant_examples_spec.rb → grant_examples_1_spec.rb} +0 -8973
- data/spec/examples/grant_examples_2_spec.rb +9107 -0
- data/spec/examples/history_examples_spec.rb +85 -0
- data/spec/examples/list_push_provisions_spec.rb +164 -0
- data/spec/examples/presence_examples_spec.rb +222 -186
- data/spec/examples/remove_channels_from_push_spec.rb +164 -0
- data/spec/examples/remove_device_from_push_spec.rb +164 -0
- data/spec/examples/revoke_examples_1_spec.rb +27013 -0
- data/spec/examples/revoke_examples_2_spec.rb +27012 -0
- data/spec/examples/revoke_examples_3_spec.rb +17967 -0
- data/spec/examples/status_request_message_count_exceeded_spec.rb +4 -1
- data/spec/examples/subscribe_examples_1_spec.rb +26972 -0
- data/spec/examples/subscribe_examples_2_spec.rb +19575 -0
- data/spec/lib/connection_callback_spec.rb +4 -3
- data/spec/lib/event/formatter_spec.rb +22 -0
- data/spec/lib/events/channel_metadata_spec.rb +58 -0
- data/spec/lib/events/grant_spec.rb +3 -2
- data/spec/lib/events/membership_spec.rb +51 -21
- data/spec/lib/events/presence_delta_spec.rb +9 -6
- data/spec/lib/events/presence_spec.rb +13 -7
- data/spec/lib/events/subscribe_spec.rb +102 -65
- data/spec/lib/events/uuid_metadata_spec.rb +86 -0
- data/spec/lib/subscribe_event/formatter_spec.rb +22 -0
- data/spec/lib/super_admin_spec.rb +8 -4
- data/spec/spec_helper.rb +24 -8
- metadata +124 -79
- data/fixtures/vcr_cassettes/lib/events/create_space.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/create_user.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/delete_user.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_members.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_space.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_space_memberships.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_spaces.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/get_user.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_users.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/manage_members_remove.yml +0 -83
- data/fixtures/vcr_cassettes/lib/events/subscribe-member-add-async.yml +0 -77
- data/fixtures/vcr_cassettes/lib/events/subscribe-membership-add-async.yml +0 -77
- data/fixtures/vcr_cassettes/lib/events/subscribe-space-update-async.yml +0 -77
- data/fixtures/vcr_cassettes/lib/events/update_space.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/update_user.yml +0 -40
- data/lib/pubnub/events/get_members.rb +0 -93
- data/lib/pubnub/events/get_space.rb +0 -74
- data/lib/pubnub/events/get_space_memberships.rb +0 -93
- data/lib/pubnub/events/get_spaces.rb +0 -90
- data/lib/pubnub/events/get_user.rb +0 -74
- data/lib/pubnub/events/get_users.rb +0 -90
- data/lib/pubnub/events/manage_memberships.rb +0 -105
- data/lib/pubnub/events/update_user.rb +0 -86
- data/lib/pubnub/validators/create_space.rb +0 -44
- data/lib/pubnub/validators/create_user.rb +0 -44
- data/lib/pubnub/validators/delete_space.rb +0 -32
- data/lib/pubnub/validators/delete_user.rb +0 -32
- data/lib/pubnub/validators/get_members.rb +0 -32
- data/lib/pubnub/validators/get_space.rb +0 -32
- data/lib/pubnub/validators/get_space_memberships.rb +0 -32
- data/lib/pubnub/validators/get_spaces.rb +0 -16
- data/lib/pubnub/validators/get_user.rb +0 -32
- data/lib/pubnub/validators/get_users.rb +0 -16
- data/lib/pubnub/validators/manage_members.rb +0 -45
- data/lib/pubnub/validators/manage_memberships.rb +0 -45
- data/lib/pubnub/validators/push.rb +0 -43
- data/lib/pubnub/validators/update_space.rb +0 -45
- data/lib/pubnub/validators/update_user.rb +0 -45
- data/spec/examples/revoke_examples_spec.rb +0 -71950
- data/spec/examples/subscribe_examples_spec.rb +0 -45184
- data/spec/lib/events/space_spec.rb +0 -75
- data/spec/lib/events/user_spec.rb +0 -75
@@ -0,0 +1,43 @@
|
|
1
|
+
# Toplevel Pubnub module.
|
2
|
+
module Pubnub
|
3
|
+
# Validator module that holds all validators modules
|
4
|
+
module Validator
|
5
|
+
# Validator for RemoveDeviceFromPush event
|
6
|
+
module RemoveDeviceFromPush
|
7
|
+
include CommonValidator
|
8
|
+
|
9
|
+
def validate!
|
10
|
+
return if @skip_validate
|
11
|
+
validate_push_token!
|
12
|
+
validate_push_gateway!
|
13
|
+
validate_topic! if @push_gateway.eql? 'apns2'
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def validate_push_token!
|
19
|
+
return unless @push_token.nil? || @push_token.empty?
|
20
|
+
raise(
|
21
|
+
ArgumentError.new,
|
22
|
+
':push_token is required for RemoveDeviceFromPush event.'
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def validate_push_gateway!
|
27
|
+
return unless @push_gateway.nil? || @push_gateway.empty?
|
28
|
+
raise(
|
29
|
+
ArgumentError.new,
|
30
|
+
':push_gateway is required for RemoveDeviceFromPush event.'
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_topic!
|
35
|
+
return unless @topic.nil? || @topic.empty?
|
36
|
+
raise(
|
37
|
+
ArgumentError.new,
|
38
|
+
':topic is required for RemoveDeviceFromPush event.'
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Toplevel Pubnub module.
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Pubnub
|
5
|
+
# Validator module that holds all validators modules
|
6
|
+
module Validator
|
7
|
+
# Validator for RemoveMemberships event
|
8
|
+
module RemoveMemberships
|
9
|
+
include CommonValidator
|
10
|
+
|
11
|
+
def validate!
|
12
|
+
return if @skip_validate
|
13
|
+
|
14
|
+
validate_subscribe_key!
|
15
|
+
validate_uuid!
|
16
|
+
validate_memberships!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def validate_subscribe_key!
|
22
|
+
return unless @subscribe_key.nil?
|
23
|
+
|
24
|
+
raise(
|
25
|
+
ArgumentError.new(object: self, message: ':subscribe_key is required for remove memberships event.'),
|
26
|
+
':subscribe_key is required for remove memberships event.'
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_uuid!
|
31
|
+
return unless @uuid.nil? || @uuid.empty?
|
32
|
+
|
33
|
+
raise(
|
34
|
+
ArgumentError.new(object: self, message: ':uuid is required for remove memberships event.'),
|
35
|
+
':uuid is required for remove memberships event.'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate_memberships!
|
40
|
+
raise(
|
41
|
+
ArgumentError.new(object: self, message: ':channels is required for remove memberships event.'),
|
42
|
+
':channels is required for remove memberships event.'
|
43
|
+
) if @channels.nil? || @channels.empty?
|
44
|
+
|
45
|
+
raise(
|
46
|
+
ArgumentError.new(object: self, message: ':channels parameter for remove memberships must be Array.'),
|
47
|
+
':channels parameter for remove memberships must be Array.'
|
48
|
+
) if @channels.class != Array
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Toplevel Pubnub module.
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Pubnub
|
5
|
+
# Validator module that holds all validators modules
|
6
|
+
module Validator
|
7
|
+
# Validator for RemoveUuidMetadata event
|
8
|
+
module RemoveUuidMetadata
|
9
|
+
include CommonValidator
|
10
|
+
|
11
|
+
def validate!
|
12
|
+
return if @skip_validate
|
13
|
+
|
14
|
+
validate_subscribe_key!
|
15
|
+
validate_uuid!
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def validate_subscribe_key!
|
21
|
+
return unless @subscribe_key.nil?
|
22
|
+
|
23
|
+
raise(
|
24
|
+
ArgumentError.new(object: self, message: ':subscribe_key is required for remove uuid metadata event.'),
|
25
|
+
':subscribe_key is required for remove uuid metadata event.'
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_uuid!
|
30
|
+
return unless @uuid.nil? || @uuid.empty?
|
31
|
+
|
32
|
+
raise(
|
33
|
+
ArgumentError.new(object: self, message: ':uuid is required for remove uuid metadata event.'),
|
34
|
+
':uuid is required for remove uuid metadata event.'
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# Toplevel Pubnub module.
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Pubnub
|
5
|
+
# Validator module that holds all validators modules
|
6
|
+
module Validator
|
7
|
+
# Validator for SetChannelMembers event
|
8
|
+
module SetChannelMembers
|
9
|
+
include CommonValidator
|
10
|
+
|
11
|
+
def validate!
|
12
|
+
return if @skip_validate
|
13
|
+
|
14
|
+
validate_subscribe_key!
|
15
|
+
validate_channel!
|
16
|
+
validate_members!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def validate_subscribe_key!
|
22
|
+
return unless @subscribe_key.nil?
|
23
|
+
|
24
|
+
raise(
|
25
|
+
ArgumentError.new(object: self, message: ':subscribe_key is required for set channel members event.'),
|
26
|
+
':subscribe_key is required for set channel members event.'
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_channel!
|
31
|
+
return unless @channel.nil? || @channel.empty?
|
32
|
+
|
33
|
+
raise(
|
34
|
+
ArgumentError.new(object: self, message: ':channel is required for set channel members event.'),
|
35
|
+
':channel is required for set channel members event.'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate_members!
|
40
|
+
raise(
|
41
|
+
ArgumentError.new(object: self, message: ':uuids is required for set channel members event.'),
|
42
|
+
':uuids is required for set channel members event.'
|
43
|
+
) if @uuids.nil? || @uuids.empty?
|
44
|
+
|
45
|
+
raise(
|
46
|
+
ArgumentError.new(object: self, message: ':uuids parameter for set channel members must be Array.'),
|
47
|
+
':uuids parameter for set channel members must be Array.'
|
48
|
+
) if @uuids.class != Array
|
49
|
+
|
50
|
+
acceptable_values = %w[String Symbol Float Integer TrueClass FalseClass]
|
51
|
+
|
52
|
+
@uuids.each do |member|
|
53
|
+
raise(
|
54
|
+
ArgumentError.new(object: self, message: ':uuid is required for set channel members event.'),
|
55
|
+
':uuid is required for set channel members event.'
|
56
|
+
) if member[:uuid].nil? || member[:uuid].empty?
|
57
|
+
|
58
|
+
next if member[:custom].nil?
|
59
|
+
|
60
|
+
raise(
|
61
|
+
ArgumentError.new(object: self, message: ':custom parameter of channel member must be Hash.'),
|
62
|
+
':custom parameter of channel member must be Hash.'
|
63
|
+
) if member[:custom].class != Hash
|
64
|
+
|
65
|
+
# Verify that all values in member custom has expected data type.
|
66
|
+
member[:custom].each do |key, value|
|
67
|
+
unless acceptable_values.include?(value.class.to_s)
|
68
|
+
message = "Value for '#{key}' has unacceptable type (#{value.class.to_s})." \
|
69
|
+
"Only following data types allowed: #{acceptable_values.join(", ")}"
|
70
|
+
|
71
|
+
raise(ArgumentError.new(object: self, message: message), message)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Toplevel Pubnub module.
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Pubnub
|
5
|
+
# Validator module that holds all validators modules
|
6
|
+
module Validator
|
7
|
+
# Validator for SetChannelMetadata event
|
8
|
+
module SetChannelMetadata
|
9
|
+
include CommonValidator
|
10
|
+
|
11
|
+
def validate!
|
12
|
+
return if @skip_validate
|
13
|
+
|
14
|
+
validate_subscribe_key!
|
15
|
+
validate_channel!
|
16
|
+
validate_metadata!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def validate_subscribe_key!
|
22
|
+
return unless @subscribe_key.nil?
|
23
|
+
|
24
|
+
raise(
|
25
|
+
ArgumentError.new(object: self, message: ':subscribe_key is required for set channel metadata event.'),
|
26
|
+
':subscribe_key is required for set channel metadata event.'
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_channel!
|
31
|
+
return unless @channel.nil? || @channel.empty?
|
32
|
+
|
33
|
+
raise(
|
34
|
+
ArgumentError.new(object: self, message: ':channel is required for set channel metadata event.'),
|
35
|
+
':channel is required for set channel metadata event.'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate_metadata!
|
40
|
+
raise(
|
41
|
+
ArgumentError.new(object: self, message: ':metadata is required for set channel metadata event.'),
|
42
|
+
':metadata is required for set channel metadata event.'
|
43
|
+
) if @metadata.nil? || @metadata.empty?
|
44
|
+
|
45
|
+
raise(
|
46
|
+
ArgumentError.new(object: self, message: ':metadata parameter for set channel metadata must be Hash.'),
|
47
|
+
':metadata parameter for set channel metadata must be Hash.'
|
48
|
+
) if @metadata.class != Hash
|
49
|
+
|
50
|
+
known_channel_metadata_fields = %w[name description custom updated eTag]
|
51
|
+
|
52
|
+
@metadata.each_key do |field_name|
|
53
|
+
unless known_channel_metadata_fields.include?(field_name.to_s)
|
54
|
+
message = "Unknown channel metadata key: '#{field_name}'. Only following keys allowed: #{known_channel_metadata_fields.join(", ")}"
|
55
|
+
|
56
|
+
raise(ArgumentError.new(object: self, message: message), message)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# Toplevel Pubnub module.
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Pubnub
|
5
|
+
# Validator module that holds all validators modules
|
6
|
+
module Validator
|
7
|
+
# Validator for SetMemberships event
|
8
|
+
module SetMemberships
|
9
|
+
include CommonValidator
|
10
|
+
|
11
|
+
def validate!
|
12
|
+
return if @skip_validate
|
13
|
+
|
14
|
+
validate_subscribe_key!
|
15
|
+
validate_uuid!
|
16
|
+
validate_memberships!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def validate_subscribe_key!
|
22
|
+
return unless @subscribe_key.nil?
|
23
|
+
|
24
|
+
raise(
|
25
|
+
ArgumentError.new(object: self, message: ':subscribe_key is required for set memberships event.'),
|
26
|
+
':subscribe_key is required for set memberships event.'
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_uuid!
|
31
|
+
return unless @uuid.nil? || @uuid.empty?
|
32
|
+
|
33
|
+
raise(
|
34
|
+
ArgumentError.new(object: self, message: ':uuid is required for set memberships event.'),
|
35
|
+
':uuid is required for set memberships event.'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate_memberships!
|
40
|
+
raise(
|
41
|
+
ArgumentError.new(object: self, message: ':channels is required for set memberships event.'),
|
42
|
+
':channels is required for set memberships event.'
|
43
|
+
) if @channels.nil? || @channels.empty?
|
44
|
+
|
45
|
+
raise(
|
46
|
+
ArgumentError.new(object: self, message: ':channels parameter for set memberships must be Array.'),
|
47
|
+
':channels parameter for set memberships must be Array.'
|
48
|
+
) if @channels.class != Array
|
49
|
+
|
50
|
+
acceptable_values = %w[String Symbol Float Integer TrueClass FalseClass]
|
51
|
+
|
52
|
+
@channels.each do |membership|
|
53
|
+
raise(
|
54
|
+
ArgumentError.new(object: self, message: ':channel is required for set memberships event.'),
|
55
|
+
':channel is required for set memberships event.'
|
56
|
+
) if membership[:channel].nil? || membership[:channel].empty?
|
57
|
+
|
58
|
+
next if membership[:custom].nil?
|
59
|
+
|
60
|
+
raise(
|
61
|
+
ArgumentError.new(object: self, message: ':custom parameter of membership must be Hash.'),
|
62
|
+
':custom parameter of membership must be Hash.'
|
63
|
+
) if membership[:custom].class != Hash
|
64
|
+
|
65
|
+
# Verify that all values in membership 'custom' has expected data type.
|
66
|
+
membership[:custom].each do |key, value|
|
67
|
+
unless acceptable_values.include?(value.class.to_s)
|
68
|
+
message = "Value for '#{key}' has unacceptable type (#{value.class.to_s})." \
|
69
|
+
"Only following data types allowed: #{acceptable_values.join(", ")}"
|
70
|
+
|
71
|
+
raise(ArgumentError.new(object: self, message: message), message)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Toplevel Pubnub module.
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Pubnub
|
5
|
+
# Validator module that holds all validators modules
|
6
|
+
module Validator
|
7
|
+
# Validator for SetUuidMetadata event
|
8
|
+
module SetUuidMetadata
|
9
|
+
include CommonValidator
|
10
|
+
|
11
|
+
def validate!
|
12
|
+
return if @skip_validate
|
13
|
+
|
14
|
+
validate_subscribe_key!
|
15
|
+
validate_uuid!
|
16
|
+
validate_metadata!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def validate_subscribe_key!
|
22
|
+
return unless @subscribe_key.nil?
|
23
|
+
|
24
|
+
raise(
|
25
|
+
ArgumentError.new(object: self, message: ':subscribe_key is required for set uuid metadata event.'),
|
26
|
+
':subscribe_key is required for set uuid metadata event.'
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_uuid!
|
31
|
+
return unless @uuid.nil? || @uuid.empty?
|
32
|
+
|
33
|
+
raise(
|
34
|
+
ArgumentError.new(object: self, message: ':uuid is required for set uuid metadata event.'),
|
35
|
+
':uuid is required for set uuid metadata event.'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate_metadata!
|
40
|
+
raise(
|
41
|
+
ArgumentError.new(object: self, message: ':metadata is required for set uuid metadata event.'),
|
42
|
+
':metadata is required for set uuid metadata event.'
|
43
|
+
) if @metadata.nil? || @metadata.empty?
|
44
|
+
|
45
|
+
raise(
|
46
|
+
ArgumentError.new(object: self, message: ':metadata parameter for set uuid metadata must be Hash.'),
|
47
|
+
':metadata parameter for set uuid metadata must be Hash.'
|
48
|
+
) if @metadata.class != Hash
|
49
|
+
|
50
|
+
known_uuid_metadata_fields = %w[name email externalId profileUrl custom updated eTag]
|
51
|
+
|
52
|
+
@metadata.each_key do |field_name|
|
53
|
+
unless known_uuid_metadata_fields.include?(field_name.to_s)
|
54
|
+
message = "Unknown uuid metadata key: '#{field_name}'. Only following keys allowed: #{known_uuid_metadata_fields.join(", ")}"
|
55
|
+
|
56
|
+
raise(ArgumentError.new(object: self, message: message), message)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/pubnub/version.rb
CHANGED
data/pubnub.gemspec
CHANGED
@@ -18,11 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
spec.required_ruby_version = '>= 2.4'
|
20
20
|
|
21
|
+
spec.add_dependency 'addressable', '>= 2.0.0'
|
21
22
|
spec.add_dependency 'concurrent-ruby', '~> 1.1.5'
|
22
23
|
spec.add_dependency 'concurrent-ruby-edge', '~> 0.5.0'
|
23
24
|
spec.add_dependency 'dry-validation', '~> 1.0'
|
24
25
|
spec.add_dependency 'httpclient', '~> 2.8', '>= 2.8.3'
|
25
26
|
spec.add_dependency 'json', '>= 2.2.0', '< 3'
|
26
27
|
spec.add_dependency 'timers', '>= 4.3.0'
|
27
|
-
spec.add_development_dependency 'bundler', '~> 1.7'
|
28
28
|
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Pubnub::AddChannelsToPush do
|
4
|
+
around :each do |example|
|
5
|
+
@fired = false
|
6
|
+
|
7
|
+
@callback = -> (_envelope) do
|
8
|
+
@fired = true
|
9
|
+
end
|
10
|
+
|
11
|
+
@pubnub = Pubnub.new(
|
12
|
+
subscribe_key: 'sub-a-mock-key',
|
13
|
+
uuid: "ruby-test-uuid-client-one",
|
14
|
+
auth_key: "ruby-test-auth-client-one"
|
15
|
+
)
|
16
|
+
|
17
|
+
@device_token = '815ee724ccb0a6a84dc303be8ccbaa00d1c84dde6bcae6721b08f92100951113'
|
18
|
+
|
19
|
+
example.run_with_retry retry: 1
|
20
|
+
end
|
21
|
+
|
22
|
+
it "001_channel___demo1_demo2___push_gateway___apns___push_token__valid___http_sync__true___callback__nil_" do
|
23
|
+
VCR.use_cassette("examples/add_channels_to_push/001", record: :once) do
|
24
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns', channel: 'demo1,demo2', http_sync: true)
|
25
|
+
|
26
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
27
|
+
expect(envelope.error?).to eq false
|
28
|
+
|
29
|
+
expect(envelope.status[:code]).to eq(200)
|
30
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
31
|
+
expect(envelope.status[:category]).to eq(:ack)
|
32
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
33
|
+
|
34
|
+
expect(envelope.result[:code]).to eq(200)
|
35
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "001_channel___demo1_demo2___push_gateway___apns___push_token__valid___http_sync__true___callback___block_" do
|
40
|
+
VCR.use_cassette("examples/add_channels_to_push/001", record: :once) do
|
41
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns', channel: 'demo1,demo2', http_sync: true, &@callback)
|
42
|
+
|
43
|
+
expect(@fired).to eq true
|
44
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
45
|
+
expect(envelope.error?).to eq false
|
46
|
+
|
47
|
+
expect(envelope.status[:code]).to eq(200)
|
48
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
49
|
+
expect(envelope.status[:category]).to eq(:ack)
|
50
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
51
|
+
|
52
|
+
expect(envelope.result[:code]).to eq(200)
|
53
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "001_channel___demo1_demo2___push_gateway___apns___push_token__valid___http_sync__true___callback___lambda_" do
|
58
|
+
VCR.use_cassette("examples/add_channels_to_push/001", record: :once) do
|
59
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns', channel: 'demo1,demo2', http_sync: true, callback: @callback)
|
60
|
+
|
61
|
+
expect(@fired).to eq true
|
62
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
63
|
+
expect(envelope.error?).to eq false
|
64
|
+
|
65
|
+
expect(envelope.status[:code]).to eq(200)
|
66
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
67
|
+
expect(envelope.status[:category]).to eq(:ack)
|
68
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
69
|
+
|
70
|
+
expect(envelope.result[:code]).to eq(200)
|
71
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
it "001_channel___demo1_demo2___push_gateway___apns___push_token__valid___http_sync__false___callback__nil_" do
|
76
|
+
VCR.use_cassette("examples/add_channels_to_push/001", record: :once) do
|
77
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns', channel: 'demo1,demo2', http_sync: false)
|
78
|
+
envelope = envelope.value
|
79
|
+
|
80
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
81
|
+
expect(envelope.error?).to eq false
|
82
|
+
|
83
|
+
expect(envelope.status[:code]).to eq(200)
|
84
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
85
|
+
expect(envelope.status[:category]).to eq(:ack)
|
86
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
87
|
+
|
88
|
+
expect(envelope.result[:code]).to eq(200)
|
89
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
it "001_channel___demo1_demo2___push_gateway___apns___push_token__valid___http_sync__false___callback___block_" do
|
94
|
+
VCR.use_cassette("examples/add_channels_to_push/001", record: :once) do
|
95
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns', channel: 'demo1,demo2', http_sync: false, &@callback)
|
96
|
+
envelope = envelope.value
|
97
|
+
|
98
|
+
expect(@fired).to eq true
|
99
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
100
|
+
expect(envelope.error?).to eq false
|
101
|
+
|
102
|
+
expect(envelope.status[:code]).to eq(200)
|
103
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
104
|
+
expect(envelope.status[:category]).to eq(:ack)
|
105
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
106
|
+
|
107
|
+
expect(envelope.result[:code]).to eq(200)
|
108
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "001_channel___demo1_demo2___push_gateway___apns___push_token__valid___http_sync__false___callback___lambda_" do
|
113
|
+
VCR.use_cassette("examples/add_channels_to_push/001", record: :once) do
|
114
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns', channel: 'demo1,demo2', http_sync: false, callback: @callback)
|
115
|
+
envelope = envelope.value
|
116
|
+
|
117
|
+
expect(@fired).to eq true
|
118
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
119
|
+
expect(envelope.error?).to eq false
|
120
|
+
|
121
|
+
expect(envelope.status[:code]).to eq(200)
|
122
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
123
|
+
expect(envelope.status[:category]).to eq(:ack)
|
124
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
125
|
+
|
126
|
+
expect(envelope.result[:code]).to eq(200)
|
127
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
it "002_channel___demo1_demo2___push_gateway___apns2___push_token__valid___topic__ruby_test___environment__default___http_sync__true___callback__nil_" do
|
132
|
+
VCR.use_cassette("examples/add_channels_to_push/002", record: :once) do
|
133
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns2', channel: 'demo1,demo2', topic: 'ruby_test', http_sync: true)
|
134
|
+
|
135
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
136
|
+
expect(envelope.error?).to eq false
|
137
|
+
|
138
|
+
expect(envelope.status[:code]).to eq(200)
|
139
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
140
|
+
expect(envelope.status[:category]).to eq(:ack)
|
141
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
142
|
+
|
143
|
+
expect(envelope.result[:code]).to eq(200)
|
144
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
it "003_channel___demo1_demo2___push_gateway___apns2___push_token__valid___topic__ruby_test___environment__production___http_sync__true___callback__nil_" do
|
149
|
+
VCR.use_cassette("examples/add_channels_to_push/003", record: :once) do
|
150
|
+
envelope = @pubnub.add_channels_to_push(push_token: @device_token, push_gateway: 'apns2', channel: 'demo1,demo2', topic: 'ruby_test', environment: 'production', http_sync: true)
|
151
|
+
|
152
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
153
|
+
expect(envelope.error?).to eq false
|
154
|
+
|
155
|
+
expect(envelope.status[:code]).to eq(200)
|
156
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
157
|
+
expect(envelope.status[:category]).to eq(:ack)
|
158
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
159
|
+
|
160
|
+
expect(envelope.result[:code]).to eq(200)
|
161
|
+
expect(envelope.result[:operation]).to eq(:add_channels_to_push)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
it "004_channel___demo1_demo2___push_gateway___apns2___push_token__invalid___topic__ruby_test___environment__production___http_sync__true___callback__nil_" do
|
166
|
+
VCR.use_cassette("examples/add_channels_to_push/004", record: :once) do
|
167
|
+
envelope = @pubnub.add_channels_to_push(push_token: "invalid_token", push_gateway: 'apns2', channel: 'demo1,demo2', topic: 'ruby_test', environment: 'production', http_sync: true)
|
168
|
+
|
169
|
+
expect(envelope.is_a?(Pubnub::Envelope)).to eq true
|
170
|
+
expect(envelope.error?).to eq true
|
171
|
+
|
172
|
+
expect(envelope.status[:code]).to eq(400)
|
173
|
+
expect(envelope.status[:operation]).to eq(:add_channels_to_push)
|
174
|
+
expect(envelope.status[:category]).to eq(:error)
|
175
|
+
expect(envelope.status[:config]).to eq({:tls => false, :uuid => "ruby-test-uuid-client-one", auth_key: "ruby-test-auth-client-one", :origin => "ps.pndsn.com"})
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|