This guide shows how to migrate channel operations from stream-chat-ruby to getstream-ruby.
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
chan = client.channel('messaging', channel_id: 'general', data: { members: ['bob-1', 'jane-1'] })
chan.create('bob-1')After (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
client.chat.get_or_create_channel(
'messaging',
'general',
GetStream::Generated::Models::ChannelGetOrCreateRequest.new(
data: {
created_by_id: 'bob-1',
members: [{ user_id: 'bob-1' }, { user_id: 'jane-1' }],
},
),
)Key changes:
- Old SDK uses a two-step pattern:
client.channel(...)returns aChannelobject, thenchan.create(user_id)sends the request - New SDK calls
client.chat.get_or_create_channeldirectly with channel type, ID, and a request body - Members in the new SDK are hashes with
user_idkeys instead of plain string arrays
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
response = client.query_channels(
{ 'type' => 'messaging', 'members' => { '$in' => ['bob-1'] } },
sort: { 'last_message_at' => -1 },
limit: 10,
)
channels = response['channels']After (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
response = client.chat.query_channels(
GetStream::Generated::Models::QueryChannelsRequest.new(
filter_conditions: { type: 'messaging', members: { '$in' => ['bob-1'] } },
sort: [{ field: 'last_message_at', direction: -1 }],
limit: 10,
),
)
channels = response['channels']Key changes:
- Old SDK uses positional filter argument with keyword args for sort/limit
- New SDK wraps everything in a
QueryChannelsRequestwithfilter_conditions,sort(array of hashes), andlimit
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
chan = client.channel('messaging', channel_id: 'general')
chan.add_members(['bob-1', 'jane-1'])After (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
client.chat.update_channel(
'messaging',
'general',
GetStream::Generated::Models::UpdateChannelRequest.new(
add_members: [{ user_id: 'bob-1' }, { user_id: 'jane-1' }],
),
)Key changes:
- Old SDK has a dedicated
add_membersmethod on theChannelobject - New SDK uses
update_channelwithadd_membersas a parameter onUpdateChannelRequest
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
chan = client.channel('messaging', channel_id: 'general')
chan.remove_members(['bob-1'])After (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
client.chat.update_channel(
'messaging',
'general',
GetStream::Generated::Models::UpdateChannelRequest.new(
remove_members: ['bob-1'],
),
)Key changes:
- Old SDK has
remove_memberson theChannelobject taking an array of user IDs - New SDK passes
remove_membersas a parameter onUpdateChannelRequest
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
chan = client.channel('messaging', channel_id: 'general')
chan.update({ 'name' => 'General Chat', 'description' => 'Main channel' })After (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
client.chat.update_channel(
'messaging',
'general',
GetStream::Generated::Models::UpdateChannelRequest.new(
data: { name: 'General Chat', description: 'Main channel' },
),
)Key changes:
- Old SDK calls
chan.update(data_hash)on theChannelobject - New SDK calls
client.chat.update_channelwith channel type, ID, and anUpdateChannelRequest
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
chan = client.channel('messaging', channel_id: 'general')
chan.update_partial(
set: { color: 'blue', description: 'Updated' },
unset: ['old_field'],
)After (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
client.chat.update_channel_partial(
'messaging',
'general',
GetStream::Generated::Models::UpdateChannelPartialRequest.new(
set: { color: 'blue', description: 'Updated' },
unset: ['old_field'],
),
)Key changes:
- Old SDK calls
chan.update_partial(set:, unset:)on theChannelobject - New SDK calls
client.chat.update_channel_partialwith anUpdateChannelPartialRequest
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
chan = client.channel('messaging', channel_id: 'general')
chan.deleteAfter (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
client.chat.delete_channel('messaging', 'general', false)Key changes:
- Old SDK calls
chan.deleteon theChannelobject - New SDK calls
client.chat.delete_channelwith channel type, ID, and an optionalhard_deletepositional parameter
Before (stream-chat-ruby):
require 'stream-chat'
client = StreamChat::Client.new('STREAM_KEY', 'STREAM_SECRET')
response = client.delete_channels(
['messaging:general', 'messaging:random'],
hard_delete: false,
)
task_id = response['task_id']After (getstream-ruby):
require 'getstream_ruby'
client = GetStreamRuby.manual(api_key: 'STREAM_KEY', api_secret: 'STREAM_SECRET')
response = client.chat.delete_channels(
GetStream::Generated::Models::DeleteChannelsRequest.new(
cids: ['messaging:general', 'messaging:random'],
hard_delete: false,
),
)
task_id = response['task_id']Key changes:
- Both SDKs use CID format (
type:id) for batch deletion - New SDK wraps the parameters in a
DeleteChannelsRequestobject
| Operation | stream-chat-ruby | getstream-ruby |
|---|---|---|
| Create channel | client.channel(type, channel_id:, data:).create(uid) |
client.chat.get_or_create_channel(type, id, request) |
| Query channels | client.query_channels(filter, sort:, limit:) |
client.chat.query_channels(QueryChannelsRequest) |
| Add members | chan.add_members(user_ids) |
client.chat.update_channel(type, id, UpdateChannelRequest(add_members:)) |
| Remove members | chan.remove_members(user_ids) |
client.chat.update_channel(type, id, UpdateChannelRequest(remove_members:)) |
| Full update | chan.update(data) |
client.chat.update_channel(type, id, UpdateChannelRequest) |
| Partial update | chan.update_partial(set:, unset:) |
client.chat.update_channel_partial(type, id, UpdateChannelPartialRequest) |
| Delete channel | chan.delete |
client.chat.delete_channel(type, id, hard_delete) |
| Delete batch | client.delete_channels(cids) |
client.chat.delete_channels(DeleteChannelsRequest) |