stream-chat-ruby 2.19.0 → 2.22.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/.rubocop.yml +3 -0
- data/CHANGELOG.md +30 -0
- data/CONTRIBUTING.md +64 -0
- data/Gemfile +1 -0
- data/README.md +69 -117
- data/lib/stream-chat/channel.rb +78 -15
- data/lib/stream-chat/client.rb +178 -30
- data/lib/stream-chat/errors.rb +22 -9
- data/lib/stream-chat/stream_rate_limits.rb +16 -5
- data/lib/stream-chat/stream_response.rb +21 -8
- data/lib/stream-chat/types.rb +13 -0
- data/lib/stream-chat/util.rb +16 -6
- data/lib/stream-chat/version.rb +2 -3
- data/lib/stream-chat.rb +2 -1
- data/stream-chat.gemspec +2 -1
- metadata +18 -2
data/lib/stream-chat/channel.rb
CHANGED
@@ -1,49 +1,72 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
4
|
+
require 'stream-chat/client'
|
3
5
|
require 'stream-chat/errors'
|
4
6
|
require 'stream-chat/util'
|
7
|
+
require 'stream-chat/types'
|
5
8
|
|
6
9
|
module StreamChat
|
7
|
-
class Channel
|
10
|
+
class Channel
|
11
|
+
extend T::Sig
|
12
|
+
T::Configuration.default_checked_level = :never
|
13
|
+
# For now we disable runtime type checks.
|
14
|
+
# We will enable it with a major bump in the future,
|
15
|
+
# but for now, let's just run a static type check.
|
16
|
+
|
17
|
+
sig { returns(T.nilable(String)) }
|
8
18
|
attr_reader :id
|
19
|
+
|
20
|
+
sig { returns(String) }
|
9
21
|
attr_reader :channel_type
|
22
|
+
|
23
|
+
sig { returns(StringKeyHash) }
|
10
24
|
attr_reader :custom_data
|
25
|
+
|
26
|
+
sig { returns(T::Array[StringKeyHash]) }
|
11
27
|
attr_reader :members
|
12
28
|
|
29
|
+
sig { params(client: StreamChat::Client, channel_type: String, channel_id: T.nilable(String), custom_data: T.nilable(StringKeyHash)).void }
|
13
30
|
def initialize(client, channel_type, channel_id = nil, custom_data = nil)
|
14
31
|
@channel_type = channel_type
|
15
32
|
@id = channel_id
|
16
|
-
@cid = "#{@channel_type}:#{@id}"
|
33
|
+
@cid = T.let("#{@channel_type}:#{@id}", String)
|
17
34
|
@client = client
|
18
|
-
@custom_data = custom_data
|
19
|
-
@
|
35
|
+
@custom_data = T.let(custom_data || {}, StringKeyHash)
|
36
|
+
@members = T.let([], T::Array[StringKeyHash])
|
20
37
|
end
|
21
38
|
|
39
|
+
sig { returns(String) }
|
22
40
|
def url
|
23
41
|
raise StreamChannelException, 'channel does not have an id' if @id.nil?
|
24
42
|
|
25
43
|
"channels/#{@channel_type}/#{@id}"
|
26
44
|
end
|
27
45
|
|
46
|
+
sig { params(message_ids: T::Array[String]).returns(StreamChat::StreamResponse) }
|
28
47
|
def get_messages(message_ids)
|
29
48
|
@client.get("#{url}/messages", params: { 'ids' => message_ids.join(',') })
|
30
49
|
end
|
31
50
|
|
51
|
+
sig { params(message: StringKeyHash, user_id: String).returns(StreamChat::StreamResponse) }
|
32
52
|
def send_message(message, user_id)
|
33
53
|
payload = { message: add_user_id(message, user_id) }
|
34
54
|
@client.post("#{url}/message", data: payload)
|
35
55
|
end
|
36
56
|
|
57
|
+
sig { params(event: StringKeyHash, user_id: String).returns(StreamChat::StreamResponse) }
|
37
58
|
def send_event(event, user_id)
|
38
59
|
payload = { 'event' => add_user_id(event, user_id) }
|
39
60
|
@client.post("#{url}/event", data: payload)
|
40
61
|
end
|
41
62
|
|
63
|
+
sig { params(message_id: String, reaction: StringKeyHash, user_id: String).returns(StreamChat::StreamResponse) }
|
42
64
|
def send_reaction(message_id, reaction, user_id)
|
43
65
|
payload = { reaction: add_user_id(reaction, user_id) }
|
44
66
|
@client.post("messages/#{message_id}/reaction", data: payload)
|
45
67
|
end
|
46
68
|
|
69
|
+
sig { params(message_id: String, reaction_type: String, user_id: String).returns(StreamChat::StreamResponse) }
|
47
70
|
def delete_reaction(message_id, reaction_type, user_id)
|
48
71
|
@client.delete(
|
49
72
|
"messages/#{message_id}/reaction/#{reaction_type}",
|
@@ -51,11 +74,13 @@ module StreamChat
|
|
51
74
|
)
|
52
75
|
end
|
53
76
|
|
77
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
54
78
|
def create(user_id)
|
55
79
|
@custom_data['created_by'] = { id: user_id }
|
56
80
|
query(watch: false, state: false, presence: false)
|
57
81
|
end
|
58
82
|
|
83
|
+
sig { params(options: T.untyped).returns(StreamChat::StreamResponse) }
|
59
84
|
def query(**options)
|
60
85
|
payload = { state: true, data: @custom_data }.merge(options)
|
61
86
|
url = "channels/#{@channel_type}"
|
@@ -66,17 +91,18 @@ module StreamChat
|
|
66
91
|
state
|
67
92
|
end
|
68
93
|
|
94
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
69
95
|
def query_members(filter_conditions = {}, sort: nil, **options)
|
70
96
|
params = {}.merge(options).merge({
|
71
97
|
id: @id,
|
72
98
|
type: @channel_type,
|
73
99
|
filter_conditions: filter_conditions,
|
74
|
-
sort: get_sort_fields(sort)
|
100
|
+
sort: StreamChat.get_sort_fields(sort)
|
75
101
|
})
|
76
102
|
|
77
103
|
if @id == '' && @members.length.positive?
|
78
104
|
params['members'] = []
|
79
|
-
@members
|
105
|
+
@members.each do |m|
|
80
106
|
params['members'] << m['user'].nil? ? m['user_id'] : m['user']['id']
|
81
107
|
end
|
82
108
|
end
|
@@ -84,11 +110,13 @@ module StreamChat
|
|
84
110
|
@client.get('members', params: { payload: params.to_json })
|
85
111
|
end
|
86
112
|
|
87
|
-
|
88
|
-
|
113
|
+
sig { params(channel_data: T.nilable(StringKeyHash), update_message: T.nilable(StringKeyHash), options: T.untyped).returns(StreamChat::StreamResponse) }
|
114
|
+
def update(channel_data, update_message = nil, **options)
|
115
|
+
payload = { data: channel_data, message: update_message }.merge(options)
|
89
116
|
@client.post(url, data: payload)
|
90
117
|
end
|
91
118
|
|
119
|
+
sig { params(set: T.nilable(StringKeyHash), unset: T.nilable(T::Array[String])).returns(StreamChat::StreamResponse) }
|
92
120
|
def update_partial(set = nil, unset = nil)
|
93
121
|
raise StreamChannelException, 'set or unset is needed' if set.nil? && unset.nil?
|
94
122
|
|
@@ -96,96 +124,131 @@ module StreamChat
|
|
96
124
|
@client.patch(url, data: payload)
|
97
125
|
end
|
98
126
|
|
127
|
+
sig { returns(StreamChat::StreamResponse) }
|
99
128
|
def delete
|
100
129
|
@client.delete(url)
|
101
130
|
end
|
102
131
|
|
132
|
+
sig { params(options: T.untyped).returns(StreamChat::StreamResponse) }
|
103
133
|
def truncate(**options)
|
104
134
|
@client.post("#{url}/truncate", data: options)
|
105
135
|
end
|
106
136
|
|
137
|
+
sig { params(user_id: String, expiration: T.nilable(Integer)).returns(StreamChat::StreamResponse) }
|
107
138
|
def mute(user_id, expiration = nil)
|
108
139
|
data = { user_id: user_id, channel_cid: @cid }
|
109
140
|
data['expiration'] = expiration if expiration
|
110
141
|
@client.post('moderation/mute/channel', data: data)
|
111
142
|
end
|
112
143
|
|
144
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
113
145
|
def unmute(user_id)
|
114
146
|
@client.post('moderation/unmute/channel', data: { 'user_id' => user_id, 'channel_cid' => @cid })
|
115
147
|
end
|
116
148
|
|
149
|
+
sig { params(user_ids: T::Array[String], options: T.untyped).returns(StreamChat::StreamResponse) }
|
117
150
|
def add_members(user_ids, **options)
|
118
151
|
payload = options.merge({ add_members: user_ids })
|
119
|
-
|
152
|
+
update(nil, nil, **payload)
|
153
|
+
end
|
154
|
+
|
155
|
+
sig { params(user_ids: T::Array[String], options: T.untyped).returns(StreamChat::StreamResponse) }
|
156
|
+
def invite_members(user_ids, **options)
|
157
|
+
payload = options.merge({ invites: user_ids })
|
158
|
+
update(nil, nil, **payload)
|
159
|
+
end
|
160
|
+
|
161
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
162
|
+
def accept_invite(user_id, **options)
|
163
|
+
payload = options.merge({ user_id: user_id, accept_invite: true })
|
164
|
+
update(nil, nil, **payload)
|
120
165
|
end
|
121
166
|
|
122
|
-
|
123
|
-
|
167
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
168
|
+
def reject_invite(user_id, **options)
|
169
|
+
payload = options.merge({ user_id: user_id, reject_invite: true })
|
170
|
+
update(nil, nil, **payload)
|
124
171
|
end
|
125
172
|
|
173
|
+
sig { params(user_ids: T::Array[String]).returns(StreamChat::StreamResponse) }
|
126
174
|
def add_moderators(user_ids)
|
127
|
-
|
175
|
+
update(nil, nil, add_moderators: user_ids)
|
128
176
|
end
|
129
177
|
|
178
|
+
sig { params(user_ids: T::Array[String]).returns(StreamChat::StreamResponse) }
|
130
179
|
def remove_members(user_ids)
|
131
|
-
|
180
|
+
update(nil, nil, remove_members: user_ids)
|
132
181
|
end
|
133
182
|
|
183
|
+
sig { params(members: T::Array[StringKeyHash], message: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
134
184
|
def assign_roles(members, message = nil)
|
135
|
-
|
185
|
+
update(nil, message, assign_roles: members)
|
136
186
|
end
|
137
187
|
|
188
|
+
sig { params(user_ids: T::Array[String]).returns(StreamChat::StreamResponse) }
|
138
189
|
def demote_moderators(user_ids)
|
139
|
-
|
190
|
+
update(nil, nil, demote_moderators: user_ids)
|
140
191
|
end
|
141
192
|
|
193
|
+
sig { params(user_id: String, options: StringKeyHash).returns(StreamChat::StreamResponse) }
|
142
194
|
def mark_read(user_id, **options)
|
143
195
|
payload = add_user_id(options, user_id)
|
144
196
|
@client.post("#{url}/read", data: payload)
|
145
197
|
end
|
146
198
|
|
199
|
+
sig { params(parent_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
147
200
|
def get_replies(parent_id, **options)
|
148
201
|
@client.get("messages/#{parent_id}/replies", params: options)
|
149
202
|
end
|
150
203
|
|
204
|
+
sig { params(message_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
151
205
|
def get_reactions(message_id, **options)
|
152
206
|
@client.get("messages/#{message_id}/reactions", params: options)
|
153
207
|
end
|
154
208
|
|
209
|
+
sig { params(user_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
155
210
|
def ban_user(user_id, **options)
|
156
211
|
@client.ban_user(user_id, type: @channel_type, id: @id, **options)
|
157
212
|
end
|
158
213
|
|
214
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
159
215
|
def unban_user(user_id)
|
160
216
|
@client.unban_user(user_id, type: @channel_type, id: @id)
|
161
217
|
end
|
162
218
|
|
219
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
163
220
|
def hide(user_id)
|
164
221
|
@client.post("#{url}/hide", data: { user_id: user_id })
|
165
222
|
end
|
166
223
|
|
224
|
+
sig { params(user_id: String).returns(StreamChat::StreamResponse) }
|
167
225
|
def show(user_id)
|
168
226
|
@client.post("#{url}/show", data: { user_id: user_id })
|
169
227
|
end
|
170
228
|
|
229
|
+
sig { params(url: String, user: StringKeyHash, content_type: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
171
230
|
def send_file(url, user, content_type = nil)
|
172
231
|
@client.send_file("#{self.url}/file", url, user, content_type)
|
173
232
|
end
|
174
233
|
|
234
|
+
sig { params(url: String, user: StringKeyHash, content_type: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
175
235
|
def send_image(url, user, content_type = nil)
|
176
236
|
@client.send_file("#{self.url}/image", url, user, content_type)
|
177
237
|
end
|
178
238
|
|
239
|
+
sig { params(url: String).returns(StreamChat::StreamResponse) }
|
179
240
|
def delete_file(url)
|
180
241
|
@client.delete("#{self.url}/file", params: { url: url })
|
181
242
|
end
|
182
243
|
|
244
|
+
sig { params(url: String).returns(StreamChat::StreamResponse) }
|
183
245
|
def delete_image(url)
|
184
246
|
@client.delete("#{self.url}/image", params: { url: url })
|
185
247
|
end
|
186
248
|
|
187
249
|
private
|
188
250
|
|
251
|
+
sig { params(payload: StringKeyHash, user_id: String).returns(StringKeyHash) }
|
189
252
|
def add_user_id(payload, user_id)
|
190
253
|
payload.merge({ user: { id: user_id } })
|
191
254
|
end
|