Skip to content

Commit 24378a5

Browse files
authored
Add query members (#33)
1 parent bff6591 commit 24378a5

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

lib/stream-chat/channel.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# frozen_string_literal: true
22

33
require 'stream-chat/errors'
4+
require 'stream-chat/util'
45

56
module StreamChat
67
class Channel # rubocop:todo Metrics/ClassLength # rubocop:todo Style/Documentation
78
attr_reader :id
89
attr_reader :channel_type
910
attr_reader :custom_data
11+
attr_reader :members
1012

1113
def initialize(client, channel_type, channel_id = nil, custom_data = nil)
1214
@channel_type = channel_type
@@ -59,6 +61,24 @@ def query(**options)
5961
state
6062
end
6163

64+
def query_members(filter_conditions: {}, sort: nil, **options)
65+
params = {}.merge(options).merge({
66+
id: @id,
67+
type: @channel_type,
68+
filter_conditions: filter_conditions,
69+
sort: get_sort_fields(sort)
70+
})
71+
72+
if @id == '' && @members.length.positive?
73+
params['members'] = []
74+
@members&.each do |m|
75+
params['members'] << m['user'].nil? ? m['user_id'] : m['user']['id']
76+
end
77+
end
78+
79+
@client.get('members', params: { payload: params.to_json })
80+
end
81+
6282
def update(channel_data, update_message = nil)
6383
payload = { "data": channel_data, "message": update_message }
6484
@client.post(url, data: payload)

lib/stream-chat/util.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# frozen_string_literal: true
2+
3+
# lib/util.rb
4+
5+
def get_sort_fields(sort)
6+
sort_fields = []
7+
sort&.each do |k, v|
8+
sort_fields << { field: k, direction: v }
9+
end
10+
sort_fields
11+
end

spec/channel_spec.rb

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
end
1010

1111
before(:each) do
12-
@random_users = [{ id: SecureRandom.uuid }, { id: SecureRandom.uuid }]
12+
@random_users = [{ id: SecureRandom.uuid, name: 'b' }, { id: SecureRandom.uuid, name: 'a' }]
1313
@client.update_users(@random_users)
1414

1515
@random_user = { id: SecureRandom.uuid }
@@ -57,7 +57,7 @@
5757
expect(response['channel']['motd']).to eq 'one apple a day...'
5858
end
5959

60-
it 'can delete ' do
60+
it 'can delete' do
6161
response = @channel.delete
6262
expect(response).to include 'channel'
6363
expect(response['channel'].fetch('deleted_at')).not_to eq nil
@@ -159,4 +159,27 @@
159159
it 'delete image' do
160160
@channel.delete_image(image)
161161
end
162+
163+
it 'query members' do
164+
response = @channel.query_members
165+
expect(response['members'].length).to eq 0
166+
167+
members = []
168+
@random_users&.each do |u|
169+
members << u[:id]
170+
end
171+
@channel.add_members(members)
172+
173+
response = @channel.query_members(sort: { name: 1 })
174+
expect(response['members'].length).to eq 2
175+
176+
got_members = []
177+
response['members']&.each do |m|
178+
got_members << m['user']['id']
179+
end
180+
expect(got_members).to eq members.reverse
181+
182+
response = @channel.query_members(limit: 1)
183+
expect(response['members'].length).to eq 1
184+
end
162185
end

0 commit comments

Comments
 (0)