diff --git a/lib/stream-chat/channel.rb b/lib/stream-chat/channel.rb index ed91ed7..19b2ec1 100644 --- a/lib/stream-chat/channel.rb +++ b/lib/stream-chat/channel.rb @@ -234,7 +234,9 @@ def update_member_partial(user_id, set: nil, unset: nil) # Adds members to the channel. sig { params(user_ids: T::Array[String], options: T.untyped).returns(StreamChat::StreamResponse) } def add_members(user_ids, **options) - payload = options.merge({ add_members: user_ids }) + payload = options.dup + payload[:hide_history_before] = StreamChat.normalize_timestamp(payload[:hide_history_before]) if payload[:hide_history_before] + payload = payload.merge({ add_members: user_ids }) update(nil, nil, **payload) end diff --git a/lib/stream-chat/client.rb b/lib/stream-chat/client.rb index 13a96f1..86291ae 100644 --- a/lib/stream-chat/client.rb +++ b/lib/stream-chat/client.rb @@ -738,7 +738,7 @@ def delete_channels(cids, hard_delete: false) # Revoke tokens for an application issued since the given date. sig { params(before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) } def revoke_tokens(before) - before = before.rfc3339 if before.instance_of?(DateTime) + before = StreamChat.normalize_timestamp(before) update_app_settings({ 'revoke_tokens_issued_before' => before }) end @@ -751,7 +751,7 @@ def revoke_user_token(user_id, before) # Revoke tokens for users issued since. sig { params(user_ids: T::Array[String], before: T.any(DateTime, String)).returns(StreamChat::StreamResponse) } def revoke_users_token(user_ids, before) - before = before.rfc3339 if before.instance_of?(DateTime) + before = StreamChat.normalize_timestamp(before) updates = [] user_ids.map do |user_id| @@ -1024,7 +1024,7 @@ def query_threads(filter, sort: nil, **options) sig { params(message_id: String, user_id: String, remind_at: T.nilable(DateTime)).returns(StreamChat::StreamResponse) } def create_reminder(message_id, user_id, remind_at = nil) data = { user_id: user_id } - data[:remind_at] = remind_at.rfc3339 if remind_at.instance_of?(DateTime) + data[:remind_at] = StreamChat.normalize_timestamp(remind_at) if remind_at post("messages/#{message_id}/reminders", data: data) end @@ -1036,7 +1036,7 @@ def create_reminder(message_id, user_id, remind_at = nil) sig { params(message_id: String, user_id: String, remind_at: T.nilable(DateTime)).returns(StreamChat::StreamResponse) } def update_reminder(message_id, user_id, remind_at = nil) data = { user_id: user_id } - data[:remind_at] = remind_at.rfc3339 if remind_at + data[:remind_at] = StreamChat.normalize_timestamp(remind_at) if remind_at patch("messages/#{message_id}/reminders", data: data) end diff --git a/lib/stream-chat/util.rb b/lib/stream-chat/util.rb index 4b343be..6842384 100644 --- a/lib/stream-chat/util.rb +++ b/lib/stream-chat/util.rb @@ -14,4 +14,14 @@ def self.get_sort_fields(sort) end sort_fields end + + # Normalizes a timestamp to RFC 3339 / ISO 8601 string format. + sig { params(timestamp: T.any(DateTime, Time, String)).returns(String) } + def self.normalize_timestamp(timestamp) + case timestamp + when DateTime then timestamp.rfc3339 + when Time then timestamp.iso8601 + else timestamp + end + end end diff --git a/spec/channel_spec.rb b/spec/channel_spec.rb index 0971ef3..1215c1c 100644 --- a/spec/channel_spec.rb +++ b/spec/channel_spec.rb @@ -145,7 +145,8 @@ def loop_times(times) response = @channel.remove_members([@random_users[0][:id], @random_users[1][:id]]) expect(response['members'].length).to eq 0 - @channel.add_members([@random_users[0][:id]]) + history_cutoff = DateTime.now - 1 + @channel.add_members([@random_users[0][:id]], hide_history_before: history_cutoff) response = @channel.add_members([@random_users[1][:id]], hide_history: true) expect(response['members'].length).to eq 2 response['members']&.each do |m|