Skip to content

Commit 045291c

Browse files
authored
[CHAT-2598] Add shadow_ban, remove_shadow_ban, update_message_partial, pin_message & unpin_message methods (#58)
* added update_message_partial * pin and unpin message methods * add shadow_ban and remove_shadow_ban methods * rubocop * more linting * more linting * set rubygems_mfa_required
1 parent 1dbebce commit 045291c

File tree

3 files changed

+93
-0
lines changed

3 files changed

+93
-0
lines changed

lib/stream-chat/client.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,16 @@ def unban_user(target_id, **options)
160160
delete('moderation/ban', params: params)
161161
end
162162

163+
def shadow_ban(target_id, **options)
164+
payload = { target_user_id: target_id, shadow: true }.merge(options)
165+
post('moderation/ban', data: payload)
166+
end
167+
168+
def remove_shadow_ban(target_id, **options)
169+
params = { target_user_id: target_id, shadow: true }.merge(options)
170+
delete('moderation/ban', params: params)
171+
end
172+
163173
def mute_user(target_id, user_id)
164174
payload = { target_id: target_id, user_id: user_id }
165175
post('moderation/mute', data: payload)
@@ -175,12 +185,37 @@ def mark_all_read(user_id)
175185
post('channels/read', data: payload)
176186
end
177187

188+
def pin_message(message_id, user_id, expiration: nil)
189+
updates = {
190+
set: {
191+
pinned: true,
192+
pin_expires: expiration
193+
}
194+
}
195+
update_message_partial(message_id, updates, user_id: user_id)
196+
end
197+
198+
def unpin_message(message_id, user_id)
199+
updates = {
200+
set: {
201+
pinned: false
202+
}
203+
}
204+
update_message_partial(message_id, updates, user_id: user_id)
205+
end
206+
178207
def update_message(message)
179208
raise ArgumentError 'message must have an id' unless message.key? 'id'
180209

181210
post("messages/#{message['id']}", data: { message: message })
182211
end
183212

213+
def update_message_partial(message_id, updates, user_id: nil, **options)
214+
params = updates.merge(options)
215+
params['user'] = { id: user_id } if user_id
216+
put("messages/#{message_id}", data: params)
217+
end
218+
184219
def delete_message(message_id)
185220
delete("messages/#{message_id}")
186221
end

spec/client_spec.rb

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,30 @@
120120
expect(response['user']['name']).to eq('Gandalf the Grey')
121121
end
122122

123+
it 'shadow bans a user' do
124+
@client.shadow_ban(@random_user[:id], user_id: @random_users[0][:id])
125+
126+
msg_id = SecureRandom.uuid
127+
response = @channel.send_message({
128+
id: msg_id,
129+
text: 'Hello world'
130+
}, @random_user[:id])
131+
expect(response['message']['shadowed']).to eq(false)
132+
response = @client.get_message(msg_id)
133+
expect(response['message']['shadowed']).to eq(true)
134+
135+
@client.remove_shadow_ban(@random_user[:id], user_id: @random_users[0][:id])
136+
137+
msg_id = SecureRandom.uuid
138+
response = @channel.send_message({
139+
id: msg_id,
140+
text: 'Hello world'
141+
}, @random_user[:id])
142+
expect(response['message']['shadowed']).to eq(false)
143+
response = @client.get_message(msg_id)
144+
expect(response['message']['shadowed']).to eq(false)
145+
end
146+
123147
it 'bans a user' do
124148
@client.ban_user(@random_user[:id], user_id: @random_users[0][:id])
125149
end
@@ -171,6 +195,19 @@
171195
expect(@client.get_message(msg_id)[:message]).to eq(message)
172196
end
173197

198+
it 'pins and unpins a message' do
199+
msg_id = SecureRandom.uuid
200+
response = @channel.send_message({
201+
'id' => msg_id,
202+
'text' => 'Hello world'
203+
}, @random_user[:id])
204+
response = @client.pin_message(response['message']['id'], @random_user[:id])
205+
expect(response['message']['pinned_by']['id']).to eq(@random_user[:id])
206+
207+
response = @client.unpin_message(response['message']['id'], @random_user[:id])
208+
expect(response['message']['pinned_by']).to eq(nil)
209+
end
210+
174211
it 'updates a message' do
175212
msg_id = SecureRandom.uuid
176213
response = @channel.send_message({
@@ -186,6 +223,26 @@
186223
})
187224
end
188225

226+
it 'updates a message partially' do
227+
msg_id = SecureRandom.uuid
228+
response = @channel.send_message(
229+
{
230+
id: msg_id,
231+
text: 'Hello world'
232+
}, @random_user[:id]
233+
)
234+
expect(response['message']['text']).to eq('Hello world')
235+
response = @client.update_message_partial(msg_id,
236+
{
237+
set: {
238+
awesome: true,
239+
text: 'helloworld'
240+
}
241+
}, user_id: @random_user[:id])
242+
expect(response['message']['text']).to eq('helloworld')
243+
expect(response['message']['awesome']).to eq(true)
244+
end
245+
189246
it 'deletes a message' do
190247
msg_id = SecureRandom.uuid
191248
@channel.send_message({

stream-chat.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ Gem::Specification.new do |gem|
2323
gem.add_development_dependency 'rake'
2424
gem.add_development_dependency 'rspec'
2525
gem.add_development_dependency 'simplecov'
26+
gem.metadata['rubygems_mfa_required'] = 'true'
2627
end

0 commit comments

Comments
 (0)