pubnub 5.3.5 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/commands-handler.yml +1 -1
- data/.github/workflows/release.yml +2 -2
- data/.github/workflows/run-tests.yml +12 -8
- data/.github/workflows/run-validations.yml +2 -2
- data/.pubnub.yml +26 -4
- data/CHANGELOG.md +100 -82
- data/Gemfile +1 -0
- data/Gemfile.lock +18 -1
- data/VERSION +1 -1
- data/lib/pubnub/client/events.rb +10 -8
- data/lib/pubnub/client.rb +97 -96
- data/lib/pubnub/constants.rb +4 -1
- data/lib/pubnub/event.rb +28 -23
- data/lib/pubnub/events/fetch_messages.rb +128 -0
- data/lib/pubnub/events/get_all_channels_metadata.rb +13 -9
- data/lib/pubnub/events/get_all_uuid_metadata.rb +13 -9
- data/lib/pubnub/events/get_channel_members.rb +18 -15
- data/lib/pubnub/events/get_channel_metadata.rb +9 -5
- data/lib/pubnub/events/get_memberships.rb +18 -15
- data/lib/pubnub/events/get_uuid_metadata.rb +9 -5
- data/lib/pubnub/events/publish.rb +1 -0
- data/lib/pubnub/events/set_channel_members.rb +18 -13
- data/lib/pubnub/events/set_channel_metadata.rb +8 -4
- data/lib/pubnub/events/set_memberships.rb +18 -13
- data/lib/pubnub/events/set_uuid_metadata.rb +8 -4
- data/lib/pubnub/events/signal.rb +4 -0
- data/lib/pubnub/subscribe_event/formatter.rb +29 -16
- data/lib/pubnub/validators/fetch_messages.rb +41 -0
- data/lib/pubnub/validators/set_channel_metadata.rb +17 -13
- data/lib/pubnub/validators/set_uuid_metadata.rb +17 -13
- data/lib/pubnub/version.rb +1 -1
- metadata +8 -6
@@ -12,23 +12,26 @@ module Pubnub
|
|
12
12
|
@telemetry_name = :l_obj
|
13
13
|
@channel = options[:channel]
|
14
14
|
@limit = [options[:limit], 100].min unless options[:limit].nil?
|
15
|
-
@sort = options[:sort].join(
|
15
|
+
@sort = options[:sort].join(',') if options[:sort] && !options[:sort].empty?
|
16
16
|
@filter = options[:filter] if options[:filter] && !options[:filter].empty?
|
17
17
|
@start = options[:start] if options[:start] && !options[:start].empty?
|
18
18
|
@end = options[:end] if options[:start] && !options[:end].empty?
|
19
19
|
|
20
|
+
@include = []
|
20
21
|
if options[:include]
|
21
22
|
include = options[:include]
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
26
|
-
|
27
|
-
@include
|
23
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
24
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
25
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
26
|
+
@include.push('uuid') unless include[:uuid_metadata].nil? || [0, '0', false].include?(include[:uuid_metadata])
|
27
|
+
@include.push('uuid.type') unless include[:uuid_type].nil? || [0, '0', false].include?(include[:uuid_type])
|
28
|
+
@include.push('uuid.status') unless include[:uuid_status].nil? || [0, '0', false].include?(include[:uuid_status])
|
29
|
+
@include.push('uuid.custom') unless include[:uuid_custom].nil? || [0, '0', false].include?(include[:uuid_custom])
|
30
|
+
@include_count = [0, '0', false].include?(include[:count]) ? '0' : '1' unless include[:count].nil?
|
28
31
|
end
|
29
32
|
|
30
33
|
# Collections by default return number of available entries.
|
31
|
-
@include_count =
|
34
|
+
@include_count = '1' if @include_count.nil?
|
32
35
|
|
33
36
|
super
|
34
37
|
end
|
@@ -47,7 +50,7 @@ module Pubnub
|
|
47
50
|
parameters[:start] = @start unless @start.nil?
|
48
51
|
parameters[:end] = @end if @end && !@start
|
49
52
|
parameters[:count] = @include_count unless @include_count.nil?
|
50
|
-
parameters[:include] = @include.sort.join(
|
53
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
51
54
|
|
52
55
|
parameters
|
53
56
|
end
|
@@ -64,20 +67,20 @@ module Pubnub
|
|
64
67
|
end
|
65
68
|
|
66
69
|
def valid_envelope(parsed_response, req_res_objects)
|
67
|
-
members = parsed_response['data'].map
|
68
|
-
member =
|
69
|
-
channel_member.each{ |k,v| member[k.to_sym] = v }
|
70
|
+
members = parsed_response['data'].map do |channel_member|
|
71
|
+
member = {}
|
72
|
+
channel_member.each { |k, v| member[k.to_sym] = v }
|
70
73
|
|
71
74
|
unless member[:uuid].nil?
|
72
|
-
uuid_metadata =
|
73
|
-
member[:uuid].each{ |k,v| uuid_metadata[k.to_sym] = v }
|
75
|
+
uuid_metadata = {}
|
76
|
+
member[:uuid].each { |k, v| uuid_metadata[k.to_sym] = v }
|
74
77
|
uuid_metadata[:updated] = Date._parse(uuid_metadata[:updated]) unless uuid_metadata[:updated].nil?
|
75
78
|
member[:uuid] = uuid_metadata
|
76
79
|
end
|
77
80
|
member[:updated] = Date._parse(member[:updated]) unless member[:updated].nil?
|
78
81
|
|
79
82
|
member
|
80
|
-
|
83
|
+
end
|
81
84
|
|
82
85
|
Pubnub::Envelope.new(
|
83
86
|
event: @event,
|
@@ -12,12 +12,16 @@ module Pubnub
|
|
12
12
|
@telemetry_name = :l_obj
|
13
13
|
@channel = options[:channel]
|
14
14
|
|
15
|
+
@include = []
|
15
16
|
if options[:include]
|
16
|
-
|
17
|
+
include = options[:include]
|
18
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
19
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
20
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
17
21
|
end
|
18
22
|
|
19
23
|
# Single entity creation should return it's 'custom' field by default.
|
20
|
-
@include =
|
24
|
+
@include = ['custom'] if @include.empty?
|
21
25
|
super
|
22
26
|
end
|
23
27
|
|
@@ -29,7 +33,7 @@ module Pubnub
|
|
29
33
|
|
30
34
|
def parameters(signature = false)
|
31
35
|
parameters = super(signature)
|
32
|
-
parameters[:include] = @include
|
36
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
33
37
|
|
34
38
|
parameters
|
35
39
|
end
|
@@ -46,8 +50,8 @@ module Pubnub
|
|
46
50
|
|
47
51
|
def valid_envelope(parsed_response, req_res_objects)
|
48
52
|
data = parsed_response['data']
|
49
|
-
metadata =
|
50
|
-
data.each{ |k,v| metadata[k.to_sym] = v }
|
53
|
+
metadata = {}
|
54
|
+
data.each { |k, v| metadata[k.to_sym] = v }
|
51
55
|
metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
|
52
56
|
|
53
57
|
Pubnub::Envelope.new(
|
@@ -12,23 +12,26 @@ module Pubnub
|
|
12
12
|
@telemetry_name = :l_obj
|
13
13
|
@uuid = options[:uuid].nil? ? app.user_id : options[:uuid]
|
14
14
|
@limit = [options[:limit], 100].min unless options[:limit].nil?
|
15
|
-
@sort = options[:sort].join(
|
15
|
+
@sort = options[:sort].join(',') if options[:sort] && !options[:sort].empty?
|
16
16
|
@filter = options[:filter] if options[:filter] && !options[:filter].empty?
|
17
17
|
@start = options[:start] if options[:start] && !options[:start].empty?
|
18
18
|
@end = options[:end] if options[:start] && !options[:end].empty?
|
19
19
|
|
20
|
+
@include = []
|
20
21
|
if options[:include]
|
21
22
|
include = options[:include]
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
26
|
-
|
27
|
-
@include
|
23
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
24
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
25
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
26
|
+
@include.push('channel') unless include[:channel_metadata].nil? || [0, '0', false].include?(include[:channel_metadata])
|
27
|
+
@include.push('channel.type') unless include[:channel_type].nil? || [0, '0', false].include?(include[:channel_type])
|
28
|
+
@include.push('channel.status') unless include[:channel_status].nil? || [0, '0', false].include?(include[:channel_status])
|
29
|
+
@include.push('channel.custom') unless include[:channel_custom].nil? || [0, '0', false].include?(include[:channel_custom])
|
30
|
+
@include_count = [0, '0', false].include?(include[:count]) ? '0' : '1' unless include[:count].nil?
|
28
31
|
end
|
29
32
|
|
30
33
|
# Collections by default return number of available entries.
|
31
|
-
@include_count =
|
34
|
+
@include_count = '1' if @include_count.nil?
|
32
35
|
|
33
36
|
super
|
34
37
|
end
|
@@ -47,7 +50,7 @@ module Pubnub
|
|
47
50
|
parameters[:start] = @start unless @start.nil?
|
48
51
|
parameters[:end] = @end if @end && !@start
|
49
52
|
parameters[:count] = @include_count unless @include_count.nil?
|
50
|
-
parameters[:include] = @include.sort.join(
|
53
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
51
54
|
|
52
55
|
parameters
|
53
56
|
end
|
@@ -64,20 +67,20 @@ module Pubnub
|
|
64
67
|
end
|
65
68
|
|
66
69
|
def valid_envelope(parsed_response, req_res_objects)
|
67
|
-
memberships = parsed_response['data'].map
|
68
|
-
membership =
|
69
|
-
uuid_membership.each{ |k,v| membership[k.to_sym] = v }
|
70
|
+
memberships = parsed_response['data'].map do |uuid_membership|
|
71
|
+
membership = {}
|
72
|
+
uuid_membership.each { |k, v| membership[k.to_sym] = v }
|
70
73
|
|
71
74
|
unless membership[:channel].nil?
|
72
|
-
channel_metadata =
|
73
|
-
membership[:channel].each{ |k,v| channel_metadata[k.to_sym] = v }
|
75
|
+
channel_metadata = {}
|
76
|
+
membership[:channel].each { |k, v| channel_metadata[k.to_sym] = v }
|
74
77
|
channel_metadata[:updated] = Date._parse(channel_metadata[:updated]) unless channel_metadata[:updated].nil?
|
75
78
|
membership[:channel] = channel_metadata
|
76
79
|
end
|
77
80
|
membership[:updated] = Date._parse(membership[:updated]) unless membership[:updated].nil?
|
78
81
|
|
79
82
|
membership
|
80
|
-
|
83
|
+
end
|
81
84
|
|
82
85
|
Pubnub::Envelope.new(
|
83
86
|
event: @event,
|
@@ -12,12 +12,16 @@ module Pubnub
|
|
12
12
|
@telemetry_name = :l_obj
|
13
13
|
@uuid = options[:uuid].nil? ? app.user_id : options[:uuid]
|
14
14
|
|
15
|
+
@include = []
|
15
16
|
if options[:include]
|
16
|
-
|
17
|
+
include = options[:include]
|
18
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
19
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
20
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
17
21
|
end
|
18
22
|
|
19
23
|
# Single entity creation should return it's 'custom' field by default.
|
20
|
-
@include =
|
24
|
+
@include = ['custom'] if @include.empty?
|
21
25
|
super
|
22
26
|
end
|
23
27
|
|
@@ -29,7 +33,7 @@ module Pubnub
|
|
29
33
|
|
30
34
|
def parameters(signature = false)
|
31
35
|
parameters = super(signature)
|
32
|
-
parameters[:include] = @include
|
36
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
33
37
|
|
34
38
|
parameters
|
35
39
|
end
|
@@ -46,8 +50,8 @@ module Pubnub
|
|
46
50
|
|
47
51
|
def valid_envelope(parsed_response, req_res_objects)
|
48
52
|
data = parsed_response['data']
|
49
|
-
metadata =
|
50
|
-
data.each{ |k,v| metadata[k.to_sym] = v }
|
53
|
+
metadata = {}
|
54
|
+
data.each { |k, v| metadata[k.to_sym] = v }
|
51
55
|
metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
|
52
56
|
|
53
57
|
Pubnub::Envelope.new(
|
@@ -12,25 +12,28 @@ module Pubnub
|
|
12
12
|
@telemetry_name = :l_obj
|
13
13
|
@channel = options[:channel]
|
14
14
|
@limit = [options[:limit], 100].min unless options[:limit].nil?
|
15
|
-
@sort = options[:sort].join(
|
15
|
+
@sort = options[:sort].join(',') if options[:sort] && !options[:sort].empty?
|
16
16
|
@filter = options[:filter] if options[:filter] && !options[:filter].empty?
|
17
17
|
@start = options[:start] if options[:start] && !options[:start].empty?
|
18
18
|
@end = options[:end] if options[:start] && !options[:end].empty?
|
19
19
|
|
20
|
+
@include = []
|
20
21
|
if options[:include]
|
21
22
|
include = options[:include]
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
26
|
-
|
27
|
-
@include
|
23
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
24
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
25
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
26
|
+
@include.push('uuid') unless include[:uuid_metadata].nil? || [0, '0', false].include?(include[:uuid_metadata])
|
27
|
+
@include.push('uuid.type') unless include[:uuid_type].nil? || [0, '0', false].include?(include[:uuid_type])
|
28
|
+
@include.push('uuid.status') unless include[:uuid_status].nil? || [0, '0', false].include?(include[:uuid_status])
|
29
|
+
@include.push('uuid.custom') unless include[:uuid_custom].nil? || [0, '0', false].include?(include[:uuid_custom])
|
30
|
+
@include_count = [0, '0', false].include?(include[:count]) ? '0' : '1' unless include[:count].nil?
|
28
31
|
end
|
29
32
|
|
30
33
|
@uuids = options[:uuids] if options[:uuids] && !options[:uuids].empty?
|
31
34
|
|
32
35
|
# Collections by default return number of available entries.
|
33
|
-
@include_count =
|
36
|
+
@include_count = '1' if @include_count.nil?
|
34
37
|
|
35
38
|
super
|
36
39
|
end
|
@@ -41,6 +44,8 @@ module Pubnub
|
|
41
44
|
members = @uuids.map do |member|
|
42
45
|
member_object = { uuid: { id: member[:uuid] } }
|
43
46
|
member_object[:custom] = member[:custom] if member[:custom] && !member[:custom].empty?
|
47
|
+
member_object[:type] = member[:type] if member[:type] && !member[:type].empty?
|
48
|
+
member_object[:status] = member[:status] if member[:status] && !member[:status].empty?
|
44
49
|
|
45
50
|
member_object
|
46
51
|
end
|
@@ -67,7 +72,7 @@ module Pubnub
|
|
67
72
|
parameters[:start] = @start unless @start.nil?
|
68
73
|
parameters[:end] = @end if @end && !@start
|
69
74
|
parameters[:count] = @include_count unless @include_count.nil?
|
70
|
-
parameters[:include] = @include.sort.join(
|
75
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
71
76
|
|
72
77
|
parameters
|
73
78
|
end
|
@@ -84,12 +89,12 @@ module Pubnub
|
|
84
89
|
end
|
85
90
|
|
86
91
|
def valid_envelope(parsed_response, req_res_objects)
|
87
|
-
members = parsed_response['data'].map
|
88
|
-
member =
|
92
|
+
members = parsed_response['data'].map do |channel_member|
|
93
|
+
member = {}
|
89
94
|
channel_member.each { |k, v| member[k.to_sym] = v }
|
90
95
|
|
91
96
|
unless member[:uuid].nil?
|
92
|
-
uuid_metadata =
|
97
|
+
uuid_metadata = {}
|
93
98
|
member[:uuid].each { |k, v| uuid_metadata[k.to_sym] = v }
|
94
99
|
uuid_metadata[:updated] = Date._parse(uuid_metadata[:updated]) unless uuid_metadata[:updated].nil?
|
95
100
|
member[:uuid] = uuid_metadata
|
@@ -97,7 +102,7 @@ module Pubnub
|
|
97
102
|
member[:updated] = Date._parse(member[:updated]) unless member[:updated].nil?
|
98
103
|
|
99
104
|
member
|
100
|
-
|
105
|
+
end
|
101
106
|
|
102
107
|
Pubnub::Envelope.new(
|
103
108
|
event: @event,
|
@@ -15,12 +15,16 @@ module Pubnub
|
|
15
15
|
# Clean up user-provided metadata object from nils.
|
16
16
|
@metadata = options[:metadata].delete_if { |_k, v| v.blank? } unless options[:metadata].nil?
|
17
17
|
|
18
|
+
@include = []
|
18
19
|
if options[:include]
|
19
|
-
|
20
|
+
include = options[:include]
|
21
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
22
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
23
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
20
24
|
end
|
21
25
|
|
22
26
|
# Single entity creation should return it's 'custom' field by default.
|
23
|
-
@include =
|
27
|
+
@include = ['custom'] if @include.empty?
|
24
28
|
super
|
25
29
|
end
|
26
30
|
|
@@ -43,7 +47,7 @@ module Pubnub
|
|
43
47
|
|
44
48
|
def parameters(signature = false)
|
45
49
|
parameters = super(signature)
|
46
|
-
parameters[:include] = @include
|
50
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
47
51
|
parameters
|
48
52
|
end
|
49
53
|
|
@@ -59,7 +63,7 @@ module Pubnub
|
|
59
63
|
|
60
64
|
def valid_envelope(parsed_response, req_res_objects)
|
61
65
|
data = parsed_response['data']
|
62
|
-
metadata =
|
66
|
+
metadata = {}
|
63
67
|
data.each { |k, v| metadata[k.to_sym] = v }
|
64
68
|
metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
|
65
69
|
|
@@ -12,25 +12,28 @@ module Pubnub
|
|
12
12
|
@telemetry_name = :l_obj
|
13
13
|
@uuid = options[:uuid].nil? ? app.user_id : options[:uuid]
|
14
14
|
@limit = [options[:limit], 100].min unless options[:limit].nil?
|
15
|
-
@sort = options[:sort].join(
|
15
|
+
@sort = options[:sort].join(',') if options[:sort] && !options[:sort].empty?
|
16
16
|
@filter = options[:filter] if options[:filter] && !options[:filter].empty?
|
17
17
|
@start = options[:start] if options[:start] && !options[:start].empty?
|
18
18
|
@end = options[:end] if options[:start] && !options[:end].empty?
|
19
19
|
|
20
|
+
@include = []
|
20
21
|
if options[:include]
|
21
22
|
include = options[:include]
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
26
|
-
|
27
|
-
@include
|
23
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
24
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
25
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
26
|
+
@include.push('channel') unless include[:channel_metadata].nil? || [0, '0', false].include?(include[:channel_metadata])
|
27
|
+
@include.push('channel.type') unless include[:channel_type].nil? || [0, '0', false].include?(include[:channel_type])
|
28
|
+
@include.push('channel.status') unless include[:channel_status].nil? || [0, '0', false].include?(include[:channel_status])
|
29
|
+
@include.push('channel.custom') unless include[:channel_custom].nil? || [0, '0', false].include?(include[:channel_custom])
|
30
|
+
@include_count = [0, '0', false].include?(include[:count]) ? '0' : '1' unless include[:count].nil?
|
28
31
|
end
|
29
32
|
|
30
33
|
@channels = options[:channels] if options[:channels] && !options[:channels].empty?
|
31
34
|
|
32
35
|
# Collections by default return number of available entries.
|
33
|
-
@include_count =
|
36
|
+
@include_count = '1' if @include_count.nil?
|
34
37
|
|
35
38
|
super
|
36
39
|
end
|
@@ -41,6 +44,8 @@ module Pubnub
|
|
41
44
|
memberships = @channels.map do |membership|
|
42
45
|
membership_object = { channel: { id: membership[:channel] } }
|
43
46
|
membership_object[:custom] = membership[:custom] if membership[:custom] && !membership[:custom].empty?
|
47
|
+
membership_object[:type] = membership[:type] if membership[:type] && !membership[:type].empty?
|
48
|
+
membership_object[:status] = membership[:status] if membership[:status] && !membership[:status].empty?
|
44
49
|
|
45
50
|
membership_object
|
46
51
|
end
|
@@ -67,7 +72,7 @@ module Pubnub
|
|
67
72
|
parameters[:start] = @start unless @start.nil?
|
68
73
|
parameters[:end] = @end if @end && !@start
|
69
74
|
parameters[:count] = @include_count unless @include_count.nil?
|
70
|
-
parameters[:include] = @include.sort.join(
|
75
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
71
76
|
|
72
77
|
parameters
|
73
78
|
end
|
@@ -84,12 +89,12 @@ module Pubnub
|
|
84
89
|
end
|
85
90
|
|
86
91
|
def valid_envelope(parsed_response, req_res_objects)
|
87
|
-
memberships = parsed_response['data'].map
|
88
|
-
membership =
|
92
|
+
memberships = parsed_response['data'].map do |uuid_membership|
|
93
|
+
membership = {}
|
89
94
|
uuid_membership.each { |k, v| membership[k.to_sym] = v }
|
90
95
|
|
91
96
|
unless membership[:channel].nil?
|
92
|
-
channel_metadata =
|
97
|
+
channel_metadata = {}
|
93
98
|
membership[:channel].each { |k, v| channel_metadata[k.to_sym] = v }
|
94
99
|
channel_metadata[:updated] = Date._parse(channel_metadata[:updated]) unless channel_metadata[:updated].nil?
|
95
100
|
membership[:channel] = channel_metadata
|
@@ -97,7 +102,7 @@ module Pubnub
|
|
97
102
|
membership[:updated] = Date._parse(membership[:updated]) unless membership[:updated].nil?
|
98
103
|
|
99
104
|
membership
|
100
|
-
|
105
|
+
end
|
101
106
|
|
102
107
|
Pubnub::Envelope.new(
|
103
108
|
event: @event,
|
@@ -15,12 +15,16 @@ module Pubnub
|
|
15
15
|
# Clean up user-provided metadata object from nils.
|
16
16
|
@metadata = options[:metadata].delete_if { |_k, v| v.blank? } unless options[:metadata].nil?
|
17
17
|
|
18
|
+
@include = []
|
18
19
|
if options[:include]
|
19
|
-
|
20
|
+
include = options[:include]
|
21
|
+
@include.push('type') unless include[:type].nil? || [0, '0', false].include?(include[:type])
|
22
|
+
@include.push('status') unless include[:status].nil? || [0, '0', false].include?(include[:status])
|
23
|
+
@include.push('custom') unless include[:custom].nil? || [0, '0', false].include?(include[:custom])
|
20
24
|
end
|
21
25
|
|
22
26
|
# Single entity creation should return it's 'custom' field by default.
|
23
|
-
@include =
|
27
|
+
@include = ['custom'] if @include.empty?
|
24
28
|
|
25
29
|
super
|
26
30
|
end
|
@@ -44,7 +48,7 @@ module Pubnub
|
|
44
48
|
|
45
49
|
def parameters(signature = false)
|
46
50
|
parameters = super(signature)
|
47
|
-
parameters[:include] = @include
|
51
|
+
parameters[:include] = @include.sort.join(',') unless @include.empty?
|
48
52
|
parameters
|
49
53
|
end
|
50
54
|
|
@@ -60,7 +64,7 @@ module Pubnub
|
|
60
64
|
|
61
65
|
def valid_envelope(parsed_response, req_res_objects)
|
62
66
|
data = parsed_response['data']
|
63
|
-
metadata =
|
67
|
+
metadata = {}
|
64
68
|
data.each { |k, v| metadata[k.to_sym] = v }
|
65
69
|
metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
|
66
70
|
|
data/lib/pubnub/events/signal.rb
CHANGED
@@ -26,6 +26,10 @@ module Pubnub
|
|
26
26
|
def parameters(*_args)
|
27
27
|
params = super
|
28
28
|
|
29
|
+
empty_if_blank = { custom_message_type: @custom_message_type }
|
30
|
+
empty_if_blank.delete_if { |_k, v| v.blank? }
|
31
|
+
|
32
|
+
params = params.merge(empty_if_blank)
|
29
33
|
params = params.merge(seqn: @sequence_number,
|
30
34
|
ortt: { t: @origination_time_token })
|
31
35
|
params
|
@@ -60,6 +60,7 @@ module Pubnub
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def plain_envelope(req_res_objects, timetoken)
|
63
|
+
operation = get_operation
|
63
64
|
Pubnub::Envelope.new(
|
64
65
|
event: @event,
|
65
66
|
event_options: @given_options,
|
@@ -82,7 +83,7 @@ module Pubnub
|
|
82
83
|
},
|
83
84
|
result: {
|
84
85
|
code: req_res_objects[:response].code,
|
85
|
-
operation:
|
86
|
+
operation: operation,
|
86
87
|
client_request: req_res_objects[:request],
|
87
88
|
server_response: req_res_objects[:response],
|
88
89
|
|
@@ -92,6 +93,20 @@ module Pubnub
|
|
92
93
|
end
|
93
94
|
|
94
95
|
def encrypted_envelope(req_res_objects, message, timetoken)
|
96
|
+
operation = get_operation(message)
|
97
|
+
data = {
|
98
|
+
message: decipher_payload(message),
|
99
|
+
subscribed_channel: message[:subscription_match] || message[:channel],
|
100
|
+
actual_channel: message[:channel],
|
101
|
+
publish_time_object: message[:publish_timetoken],
|
102
|
+
message_meta_data: message[:user_meta_data],
|
103
|
+
presence_event: get_presence_event(message),
|
104
|
+
presence: get_presence_data(message)
|
105
|
+
}
|
106
|
+
if !data[:actual_channel].end_with?('-pnpres') && (message[:type].nil? || [1, 4].include?(message[:type]))
|
107
|
+
data[:custom_message_type] = message[:custom_message_type]
|
108
|
+
end
|
109
|
+
|
95
110
|
Pubnub::Envelope.new(
|
96
111
|
event: @event,
|
97
112
|
event_options: @given_options,
|
@@ -114,19 +129,11 @@ module Pubnub
|
|
114
129
|
},
|
115
130
|
result: {
|
116
131
|
code: req_res_objects[:response].code,
|
117
|
-
operation:
|
132
|
+
operation: operation,
|
118
133
|
client_request: req_res_objects[:request],
|
119
134
|
server_response: req_res_objects[:response],
|
120
135
|
|
121
|
-
data:
|
122
|
-
message: decipher_payload(message),
|
123
|
-
subscribed_channel: message[:subscription_match] || message[:channel],
|
124
|
-
actual_channel: message[:channel],
|
125
|
-
publish_time_object: message[:publish_timetoken],
|
126
|
-
message_meta_data: message[:user_meta_data],
|
127
|
-
presence_event: get_presence_event(message),
|
128
|
-
presence: get_presence_data(message)
|
129
|
-
}
|
136
|
+
data: data
|
130
137
|
}
|
131
138
|
)
|
132
139
|
end
|
@@ -142,10 +149,10 @@ module Pubnub
|
|
142
149
|
Pubnub::Schemas::Envelope::StatusSchema.new.call status
|
143
150
|
end
|
144
151
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
152
|
+
return unless (results_validation + statuses_validation).map(&:failure?).index(true)
|
153
|
+
|
154
|
+
Pubnub.logger.error('Pubnub::SubscribeEvent::Formatter') { 'Invalid formatted envelope.' }
|
155
|
+
raise Exception, 'Invalid formatted envelope.'
|
149
156
|
end
|
150
157
|
|
151
158
|
def format_envelopes(response, request)
|
@@ -216,6 +223,7 @@ module Pubnub
|
|
216
223
|
|
217
224
|
def get_presence_data(message)
|
218
225
|
return nil unless get_operation(message) == Pubnub::Constants::OPERATION_PRESENCE
|
226
|
+
|
219
227
|
{
|
220
228
|
uuid: message[:payload]['uuid'],
|
221
229
|
timestamp: message[:payload]['timestamp'],
|
@@ -226,6 +234,7 @@ module Pubnub
|
|
226
234
|
|
227
235
|
def get_presence_event(message)
|
228
236
|
return nil unless get_operation(message) == Pubnub::Constants::OPERATION_PRESENCE
|
237
|
+
|
229
238
|
message[:payload]['action']
|
230
239
|
rescue StandardError
|
231
240
|
nil
|
@@ -233,7 +242,7 @@ module Pubnub
|
|
233
242
|
|
234
243
|
def expand_messages_keys(messages)
|
235
244
|
messages.map do |m|
|
236
|
-
{
|
245
|
+
envelope = {
|
237
246
|
shard: m['a'],
|
238
247
|
channel: m['c'],
|
239
248
|
subscription_match: m['b'],
|
@@ -250,11 +259,15 @@ module Pubnub
|
|
250
259
|
origination_time_token: expand_timetoken(m['o']),
|
251
260
|
publish_timetoken: expand_timetoken(m['p'])
|
252
261
|
}
|
262
|
+
envelope[:custom_message_type] = m['cmt'] if !m['c'].end_with?('-pnpres') && (envelope[:type].nil? || [1, 4].include?(envelope[:type]))
|
263
|
+
|
264
|
+
envelope
|
253
265
|
end
|
254
266
|
end
|
255
267
|
|
256
268
|
def expand_timetoken(timetoken)
|
257
269
|
return nil unless timetoken
|
270
|
+
|
258
271
|
{
|
259
272
|
timetoken: timetoken['t'],
|
260
273
|
region_code: timetoken['r']
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pubnub
|
4
|
+
# Validator module that holds all validators modules.
|
5
|
+
module Validator
|
6
|
+
# Validator for FetchMessages event.
|
7
|
+
module FetchMessages
|
8
|
+
include CommonValidator
|
9
|
+
|
10
|
+
def validate!
|
11
|
+
return if @skip_validate
|
12
|
+
|
13
|
+
validate_subscribe_key!
|
14
|
+
validate_channel_or_channels!
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def validate_subscribe_key!
|
20
|
+
return unless @subscribe_key.nil?
|
21
|
+
|
22
|
+
raise(
|
23
|
+
ArgumentError.new(object: self, message: ':subscribe_key is required for fetch messages event'),
|
24
|
+
':subscribe_key is required for fetch messages event'
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate_channel_or_channels!
|
29
|
+
error_message = nil
|
30
|
+
if @include_message_actions
|
31
|
+
error_message = ":channels can't be used with :include_custom_message_type set to 'true'" unless @channels.nil?
|
32
|
+
error_message = ":channel is required with :include_custom_message_type set to 'true'" if @channel.nil?
|
33
|
+
elsif @channels.nil? || @channels.empty?
|
34
|
+
error_message = ':channels is required for fetch message event'
|
35
|
+
end
|
36
|
+
|
37
|
+
raise(ArgumentError.new(object: self, message: error_message), error_message) unless error_message.nil?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|