stream-chat-ruby 2.1.0 → 2.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b1c2b73dbb2e8e0e65aaa47da051ad41694ae5faf6c1d6d1de9e368d9f6bea6
4
- data.tar.gz: 45a43c071349a05ce38a9df5840182ce299f3c41942c351dfb033aad314bba32
3
+ metadata.gz: e7f6c91605363e141dcbaeaf6818c8fb8b32266c6afc652a84785c488a4d5227
4
+ data.tar.gz: eeeaec08c0c1eb776010740264b056689c9bb32983dbdf89a434e2527c9c928e
5
5
  SHA512:
6
- metadata.gz: 37f5d1762e3185a5a92698b0e3ea9f8358d21a5d90c9683387b29a8b64e31e6548d1ac3090bf111b83175e1a228ecf6ed711123e9b080ea01332de5d8d33a9d4
7
- data.tar.gz: 68eb7fee75f01cae1d684fd4c9f51354914656193e4681d2d8a398659613f45bbf37f2322874d01e12f41a395f9a6f68431586a36b1c7094ccf770d85012c3eb
6
+ metadata.gz: a4e2fd98ecab0fb43f91141e175d71677248cb0e5869184b91e6d5d1b182610953f3e0762396cdc8a2f663d949fd26449e336157c58dcd8c0b3a4a0c96a9d2e2
7
+ data.tar.gz: 07f07ffd865cb2b9efbf89ca2827e7e49f949c1b045102a2ce70a6654590079217bc60d8f0709989d3cbc71ac109ec4cbacf32dc856aa43bc2c18bb60712d04f
@@ -0,0 +1,26 @@
1
+ name: build
2
+
3
+ on: [pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ ruby: [ '2.5', '2.6', '2.7' ]
11
+ name: Ruby ${{ matrix.ruby }} sample
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - uses: actions/setup-ruby@v1
15
+ with:
16
+ ruby-version: ${{ matrix.ruby }}
17
+
18
+ - env:
19
+ STREAM_CHAT_API_KEY: ${{ secrets.STREAM_CHAT_API_KEY }}
20
+ STREAM_CHAT_API_SECRET: ${{ secrets.STREAM_CHAT_API_SECRET }}
21
+ BLOCKLIST: ${{ matrix.ruby == '2.7' }}
22
+ run: |
23
+ gem install bundler
24
+ bundle install --jobs 4 --retry 3
25
+ bundle exec rake rubocop
26
+ bundle exec rake test
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## March 9th, 2021 - 2.6.0
2
+ - Add get_rate_limits endpoint
3
+
4
+ ## February 3rd, 2021 - 2.5.0
5
+ - Add channel partial update
6
+ - Increase convenience in query members
7
+ - Improve internal symbol conversions
8
+
9
+ ## January 20th, 2021 - 2.4.0
10
+ - Add query_members to channel
11
+ - Use post endpoint for query channels instead of get
12
+ - Extract common code for sorting into a helper for query calls
13
+
14
+ ## January 5th, 2021 - 2.3.0
15
+ - Add check SQS helper
16
+
17
+ ## January 4th, 2021 - 2.2.0
18
+ - Add support for export channels
19
+ - Improve readme for blocklist and export channels
20
+ - Improve running tests for multiple versions of ruby
21
+ - Fix issues from the latest version of rubocop
22
+ - Move to GitHub Actions
23
+
1
24
  ## October 5th, 2020 - 2.1.0
2
25
  - Add support for blocklist
3
26
 
@@ -15,13 +38,11 @@
15
38
  - Fixed few minor issues
16
39
 
17
40
  ## Oct 27th, 2019 - 1.1.0
18
-
19
41
  - Mark gems use for testing as development dependencies
20
42
  - Added `send_file`, `send_image`, `delete_file`, `delete_image`
21
43
  - Added `invite_members`
22
44
 
23
45
  ## Oct 19th, 2019 - 1.0.0
24
-
25
46
  - Added `channel.hide` and `channel.show`
26
47
  - Added `client.flag_message` and `client.unflag_message`
27
48
  - Added `client.flag_user` and `client.unflag_user`
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # stream-chat-ruby
2
2
 
3
- [![Build Status](https://travis-ci.com/GetStream/stream-chat-ruby.svg?branch=master)](https://travis-ci.com/GetStream/stream-chat-ruby) [![Gem Version](https://badge.fury.io/rb/stream-chat-ruby.svg)](http://badge.fury.io/rb/stream-chat-ruby)
3
+ [![build](https://github.com/GetStream/stream-chat-ruby/workflows/build/badge.svg)](https://github.com/GetStream/stream-chat-ruby/actions) [![Gem Version](https://badge.fury.io/rb/stream-chat-ruby.svg)](http://badge.fury.io/rb/stream-chat-ruby)
4
4
 
5
5
  stream-chat-ruby is the official Ruby client for [Stream chat](https://getstream.io/chat/) a service for building chat applications.
6
6
 
@@ -14,7 +14,7 @@ Android SDK libraries (https://getstream.io/chat/).
14
14
 
15
15
  stream-chat-ruby supports:
16
16
 
17
- - Ruby (2.6, 2.5, 2.4, 2.3)
17
+ - Ruby (2.7, 2.6, 2.5)
18
18
 
19
19
  #### Install
20
20
 
@@ -28,15 +28,16 @@ gem install stream-chat-ruby
28
28
 
29
29
  ### Supported features
30
30
 
31
- - Chat channels
31
+ - Chat channel type, channels and members
32
32
  - Messages
33
- - Chat channel types
34
33
  - User management
35
34
  - Moderation API
36
35
  - Push configuration
37
36
  - User devices
38
37
  - User search
39
38
  - Channel search
39
+ - Blocklists
40
+ - Export channels
40
41
 
41
42
  ### Import
42
43
 
@@ -129,6 +130,17 @@ chan.unban_user('bob-1')
129
130
 
130
131
  # Query channel state
131
132
  chan.query({'messages' => { 'limit' => 10, 'id_lte' => m1['id']}})
133
+
134
+ # Update metadata (overwrite)
135
+ chan.update({'motd' => 'one apple a day....'})
136
+
137
+ # Update partial
138
+ # 1. key-value pairs to set
139
+ # 2. keys to unset (remove)
140
+ chan.update_partial({color: 'blue', age: 30}, ['motd'])
141
+
142
+ # Query channel members
143
+ chan.query_members({name: {'$autocomplete': 'test'}}, sort: {last_created_at: -1}, offset: 5, limit: 5)
132
144
  ```
133
145
 
134
146
  ### Messages
@@ -152,6 +164,43 @@ client.get_devices('jane-77')
152
164
  client.remove_device(jane_phone['id'], jane_phone['user_id'])
153
165
  ```
154
166
 
167
+ ### Blocklists
168
+ ```ruby
169
+ # Create a blocklist
170
+ client.create_blocklist('my_blocker', %w[fudge cream sugar])
171
+
172
+ # Enable it on messaging channel type
173
+ client.update_channel_type('messaging', blocklist: 'my_blocker', blocklist_behavior: 'block')
174
+
175
+ # Get the details of the blocklist
176
+ client.get_blocklist('my_blocker')
177
+
178
+ # Delete the blocklist
179
+ client.delete_blocklist('my_blocker')
180
+ ```
181
+
182
+ ### Export Channels
183
+ ```ruby
184
+ # Register an export
185
+ response = client.export_channels({type: 'messaging', id: 'jane'})
186
+
187
+ # Check completion
188
+ status_response = client.get_export_channel_status(response['task_id'])
189
+ # status_response['status'] == 'pending', 'completed'
190
+ ```
191
+
192
+ ### Rate limits
193
+ ```ruby
194
+ # Get all rate limits
195
+ limits = client.get_rate_limits
196
+
197
+ # Get rate limits for specific platform(s)
198
+ limits = client.get_rate_limits(server_side: true)
199
+
200
+ # Get rate limits for specific platforms and endpoints
201
+ limits = client.get_rate_limits(android: true, ios: true, endpoints: ['QueryChannels', 'SendMessage'])
202
+ ```
203
+
155
204
  ### Example Rails application
156
205
 
157
206
  See [an example rails application using the Ruby SDK](https://github.com/GetStream/rails-chat-example).
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'stream-chat/errors'
4
+ require 'stream-chat/util'
4
5
 
5
6
  module StreamChat
6
7
  class Channel # rubocop:todo Metrics/ClassLength # rubocop:todo Style/Documentation
7
8
  attr_reader :id
8
9
  attr_reader :channel_type
9
10
  attr_reader :custom_data
11
+ attr_reader :members
10
12
 
11
13
  def initialize(client, channel_type, channel_id = nil, custom_data = nil)
12
14
  @channel_type = channel_type
@@ -23,7 +25,7 @@ module StreamChat
23
25
  end
24
26
 
25
27
  def send_message(message, user_id)
26
- payload = { "message": add_user_id(message, user_id) }
28
+ payload = { message: add_user_id(message, user_id) }
27
29
  @client.post("#{url}/message", data: payload)
28
30
  end
29
31
 
@@ -33,24 +35,24 @@ module StreamChat
33
35
  end
34
36
 
35
37
  def send_reaction(message_id, reaction, user_id)
36
- payload = { "reaction": add_user_id(reaction, user_id) }
38
+ payload = { reaction: add_user_id(reaction, user_id) }
37
39
  @client.post("messages/#{message_id}/reaction", data: payload)
38
40
  end
39
41
 
40
42
  def delete_reaction(message_id, reaction_type, user_id)
41
43
  @client.delete(
42
44
  "messages/#{message_id}/reaction/#{reaction_type}",
43
- params: { "user_id": user_id }
45
+ params: { user_id: user_id }
44
46
  )
45
47
  end
46
48
 
47
49
  def create(user_id)
48
- @custom_data['created_by'] = { "id": user_id }
50
+ @custom_data['created_by'] = { id: user_id }
49
51
  query(watch: false, state: false, presence: false)
50
52
  end
51
53
 
52
54
  def query(**options)
53
- payload = { "state": true, "data": @custom_data }.merge(options)
55
+ payload = { state: true, data: @custom_data }.merge(options)
54
56
  url = "channels/#{@channel_type}"
55
57
  url = "#{url}/#{@id}" unless @id.nil?
56
58
 
@@ -59,11 +61,36 @@ module StreamChat
59
61
  state
60
62
  end
61
63
 
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
+
62
82
  def update(channel_data, update_message = nil)
63
- payload = { "data": channel_data, "message": update_message }
83
+ payload = { data: channel_data, message: update_message }
64
84
  @client.post(url, data: payload)
65
85
  end
66
86
 
87
+ def update_partial(set = nil, unset = nil)
88
+ raise StreamChannelException 'set or unset is needed' if set.nil? && unset.nil?
89
+
90
+ payload = { set: set, unset: unset }
91
+ @client.patch(url, data: payload)
92
+ end
93
+
67
94
  def delete
68
95
  @client.delete(url)
69
96
  end
@@ -73,23 +100,23 @@ module StreamChat
73
100
  end
74
101
 
75
102
  def add_members(user_ids)
76
- @client.post(url, data: { "add_members": user_ids })
103
+ @client.post(url, data: { add_members: user_ids })
77
104
  end
78
105
 
79
106
  def invite_members(user_ids)
80
- @client.post(url, data: { "invites": user_ids })
107
+ @client.post(url, data: { invites: user_ids })
81
108
  end
82
109
 
83
110
  def add_moderators(user_ids)
84
- @client.post(url, data: { "add_moderators": user_ids })
111
+ @client.post(url, data: { add_moderators: user_ids })
85
112
  end
86
113
 
87
114
  def remove_members(user_ids)
88
- @client.post(url, data: { "remove_members": user_ids })
115
+ @client.post(url, data: { remove_members: user_ids })
89
116
  end
90
117
 
91
118
  def demote_moderators(user_ids)
92
- @client.post(url, data: { "demote_moderators": user_ids })
119
+ @client.post(url, data: { demote_moderators: user_ids })
93
120
  end
94
121
 
95
122
  def mark_read(user_id, **options)
@@ -130,17 +157,17 @@ module StreamChat
130
157
  end
131
158
 
132
159
  def delete_file(url)
133
- @client.delete("#{self.url}/file", params: { "url": url })
160
+ @client.delete("#{self.url}/file", params: { url: url })
134
161
  end
135
162
 
136
163
  def delete_image(url)
137
- @client.delete("#{self.url}/image", params: { "url": url })
164
+ @client.delete("#{self.url}/image", params: { url: url })
138
165
  end
139
166
 
140
167
  private
141
168
 
142
169
  def add_user_id(payload, user_id)
143
- payload.merge({ "user": { "id": user_id } })
170
+ payload.merge({ user: { id: user_id } })
144
171
  end
145
172
  end
146
173
  end
@@ -7,8 +7,11 @@ require 'jwt'
7
7
  require 'stream-chat/channel'
8
8
  require 'stream-chat/errors'
9
9
  require 'stream-chat/version'
10
+ require 'stream-chat/util'
10
11
 
11
12
  module StreamChat
13
+ DEFAULT_BLOCKLIST = 'profanity_en_2020_v1'
14
+
12
15
  class Client
13
16
  BASE_URL = 'https://chat-us-east-1.stream-io-api.com'
14
17
 
@@ -57,22 +60,22 @@ module StreamChat
57
60
  end
58
61
 
59
62
  def flag_message(id, **options)
60
- payload = { 'target_message_id': id }.merge(options)
63
+ payload = { target_message_id: id }.merge(options)
61
64
  post('moderation/flag', data: payload)
62
65
  end
63
66
 
64
67
  def unflag_message(id, **options)
65
- payload = { 'target_message_id': id }.merge(options)
68
+ payload = { target_message_id: id }.merge(options)
66
69
  post('moderation/unflag', data: payload)
67
70
  end
68
71
 
69
72
  def flag_user(id, **options)
70
- payload = { 'target_user_id': id }.merge(options)
73
+ payload = { target_user_id: id }.merge(options)
71
74
  post('moderation/flag', data: payload)
72
75
  end
73
76
 
74
77
  def unflag_user(id, **options)
75
- payload = { 'target_user_id': id }.merge(options)
78
+ payload = { target_user_id: id }.merge(options)
76
79
  post('moderation/unflag', data: payload)
77
80
  end
78
81
 
@@ -82,11 +85,11 @@ module StreamChat
82
85
 
83
86
  def search(filter_conditions, query, **options)
84
87
  params = options.merge({
85
- "filter_conditions": filter_conditions,
86
- "query": query
88
+ filter_conditions: filter_conditions,
89
+ query: query
87
90
  })
88
91
 
89
- get('search', params: { "payload": params.to_json })
92
+ get('search', params: { payload: params.to_json })
90
93
  end
91
94
 
92
95
  def update_users(users)
@@ -97,7 +100,7 @@ module StreamChat
97
100
 
98
101
  payload[id] = user
99
102
  end
100
- post('users', data: { 'users': payload })
103
+ post('users', data: { users: payload })
101
104
  end
102
105
 
103
106
  def update_user(user)
@@ -105,7 +108,7 @@ module StreamChat
105
108
  end
106
109
 
107
110
  def update_users_partial(updates)
108
- patch('users', data: { 'users': updates })
111
+ patch('users', data: { users: updates })
109
112
  end
110
113
 
111
114
  def update_user_partial(update)
@@ -129,34 +132,34 @@ module StreamChat
129
132
  end
130
133
 
131
134
  def ban_user(target_id, **options)
132
- payload = { 'target_user_id': target_id }.merge(options)
135
+ payload = { target_user_id: target_id }.merge(options)
133
136
  post('moderation/ban', data: payload)
134
137
  end
135
138
 
136
139
  def unban_user(target_id, **options)
137
- params = { 'target_user_id': target_id }.merge(options)
140
+ params = { target_user_id: target_id }.merge(options)
138
141
  delete('moderation/ban', params: params)
139
142
  end
140
143
 
141
144
  def mute_user(target_id, user_id)
142
- payload = { 'target_id': target_id, 'user_id': user_id }
145
+ payload = { target_id: target_id, user_id: user_id }
143
146
  post('moderation/mute', data: payload)
144
147
  end
145
148
 
146
149
  def unmute_user(target_id, user_id)
147
- payload = { 'target_id': target_id, 'user_id': user_id }
150
+ payload = { target_id: target_id, user_id: user_id }
148
151
  post('moderation/unmute', data: payload)
149
152
  end
150
153
 
151
154
  def mark_all_read(user_id)
152
- payload = { 'user': { 'id': user_id } }
155
+ payload = { user: { id: user_id } }
153
156
  post('channels/read', data: payload)
154
157
  end
155
158
 
156
159
  def update_message(message)
157
160
  raise ArgumentError 'message must have an id' unless message.key? 'id'
158
161
 
159
- post("messages/#{message['id']}", data: { 'message': message })
162
+ post("messages/#{message['id']}", data: { message: message })
160
163
  end
161
164
 
162
165
  def delete_message(message_id)
@@ -164,28 +167,20 @@ module StreamChat
164
167
  end
165
168
 
166
169
  def query_users(filter_conditions, sort: nil, **options)
167
- sort_fields = []
168
- sort&.each do |k, v|
169
- sort_fields << { "field": k, "direction": v }
170
- end
171
170
  params = options.merge({
172
- "filter_conditions": filter_conditions,
173
- "sort": sort_fields
171
+ filter_conditions: filter_conditions,
172
+ sort: get_sort_fields(sort)
174
173
  })
175
- get('users', params: { "payload": params.to_json })
174
+ get('users', params: { payload: params.to_json })
176
175
  end
177
176
 
178
177
  def query_channels(filter_conditions, sort: nil, **options)
179
- params = { "state": true, "watch": false, "presence": false }
180
- sort_fields = []
181
- sort&.each do |k, v|
182
- sort_fields << { "field": k, "direction": v }
183
- end
184
- params = params.merge(options).merge({
185
- "filter_conditions": filter_conditions,
186
- "sort": sort_fields
187
- })
188
- get('channels', params: { "payload": params.to_json })
178
+ data = { state: true, watch: false, presence: false }
179
+ data = data.merge(options).merge({
180
+ filter_conditions: filter_conditions,
181
+ sort: get_sort_fields(sort)
182
+ })
183
+ post('channels', data: data)
189
184
  end
190
185
 
191
186
  def create_channel_type(data)
@@ -223,18 +218,29 @@ module StreamChat
223
218
 
224
219
  def add_device(device_id, push_provider, user_id)
225
220
  post('devices', data: {
226
- "id": device_id,
227
- "push_provider": push_provider,
228
- "user_id": user_id
221
+ id: device_id,
222
+ push_provider: push_provider,
223
+ user_id: user_id
229
224
  })
230
225
  end
231
226
 
232
227
  def delete_device(device_id, user_id)
233
- delete('devices', params: { "id": device_id, "user_id": user_id })
228
+ delete('devices', params: { id: device_id, user_id: user_id })
234
229
  end
235
230
 
236
231
  def get_devices(user_id)
237
- get('devices', params: { "user_id": user_id })
232
+ get('devices', params: { user_id: user_id })
233
+ end
234
+
235
+ def get_rate_limits(server_side: false, android: false, ios: false, web: false, endpoints: [])
236
+ params = {}
237
+ params['server_side'] = server_side if server_side
238
+ params['android'] = android if android
239
+ params['ios'] = ios if ios
240
+ params['web'] = web if web
241
+ params['endpoints'] = endpoints.join(',') unless endpoints.empty?
242
+
243
+ get('rate_limits', params: params)
238
244
  end
239
245
 
240
246
  def verify_webhook(request_body, x_signature)
@@ -251,17 +257,25 @@ module StreamChat
251
257
  end
252
258
 
253
259
  def create_blocklist(name, words)
254
- post('blocklists', data: { "name": name, "words": words })
260
+ post('blocklists', data: { name: name, words: words })
255
261
  end
256
262
 
257
263
  def update_blocklist(name, words)
258
- put("blocklists/#{name}", data: { "words": words })
264
+ put("blocklists/#{name}", data: { words: words })
259
265
  end
260
266
 
261
267
  def delete_blocklist(name)
262
268
  delete("blocklists/#{name}")
263
269
  end
264
270
 
271
+ def export_channels(*channels)
272
+ post('export_channels', data: { channels: channels })
273
+ end
274
+
275
+ def get_export_channel_status(task_id)
276
+ get("export_channels/#{task_id}")
277
+ end
278
+
265
279
  def put(relative_url, params: nil, data: nil)
266
280
  make_http_request(:put, relative_url, params: params, data: data)
267
281
  end
@@ -301,6 +315,10 @@ module StreamChat
301
315
  parse_response(response)
302
316
  end
303
317
 
318
+ def check_sqs(sqs_key = nil, sqs_secret = nil, sqs_url = nil)
319
+ post('check_sqs', data: { sqs_key: sqs_key, sqs_secret: sqs_secret, sqs_url: sqs_url })
320
+ end
321
+
304
322
  private
305
323
 
306
324
  def get_default_params
@@ -334,8 +352,8 @@ module StreamChat
334
352
  headers['Authorization'] = @auth_token
335
353
  headers['stream-auth-type'] = 'jwt'
336
354
  url = [@base_url, relative_url].join('/')
337
- params = !params.nil? ? params : {}
338
- params = Hash[get_default_params.merge(params).sort_by { |k, _v| k.to_s }]
355
+ params = params.nil? ? {} : params
356
+ params = (get_default_params.merge(params).sort_by { |k, _v| k.to_s }).to_h
339
357
  url = "#{url}?#{URI.encode_www_form(params)}"
340
358
 
341
359
  body = data.to_json if %w[patch post put].include? method.to_s
@@ -26,5 +26,6 @@ module StreamChat
26
26
  end
27
27
  end
28
28
  end
29
+
29
30
  class StreamChannelException < StandardError; end
30
31
  end
@@ -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
@@ -3,5 +3,5 @@
3
3
  # lib/version.rb
4
4
 
5
5
  module StreamChat
6
- VERSION = '2.1.0'
6
+ VERSION = '2.6.0'
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stream-chat-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mircea Cosbuc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-05 00:00:00.000000000 Z
11
+ date: 2021-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -86,9 +86,9 @@ executables: []
86
86
  extensions: []
87
87
  extra_rdoc_files: []
88
88
  files:
89
+ - ".github/workflows/ci.yml"
89
90
  - ".gitignore"
90
91
  - ".rubocop.yml"
91
- - ".travis.yml"
92
92
  - CHANGELOG.md
93
93
  - Gemfile
94
94
  - LICENSE
@@ -99,6 +99,7 @@ files:
99
99
  - lib/stream-chat/channel.rb
100
100
  - lib/stream-chat/client.rb
101
101
  - lib/stream-chat/errors.rb
102
+ - lib/stream-chat/util.rb
102
103
  - lib/stream-chat/version.rb
103
104
  - stream-chat.gemspec
104
105
  homepage: http://github.com/GetStream/stream-chat-ruby
data/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- language: ruby
2
- before_install:
3
- - gem update bundler
4
- rvm:
5
- - 2.5
6
- - 2.6
7
- - 2.7
8
- script:
9
- - bundle exec rake rubocop
10
- - bundle exec rake test