stream-chat-ruby 1.1.3 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '079b1dd49ca55175f23ad66e3237cba1437a3b046db9631b1541ae630d31a996'
4
- data.tar.gz: 3728ef3fc6b4da313cdf0eb8c8aa8e76b5d2b2756f5f830a2f68f4e2edd7a76f
3
+ metadata.gz: ea550365bc302aeb9097c2f2819a0dd6c5ead1fd1064a7c12842de4670e871d4
4
+ data.tar.gz: b01a528a334338edfd9f05e8f3aa40e682cabd3de40e6356b162f9f0cc791e64
5
5
  SHA512:
6
- metadata.gz: a96841c65178ec69d31f3deb9744dd0afaf1173fe149a1be33c8234ae8ef8c8aaf9e337843d8afa01492f1c3aaae8374d7a9d11021dab37688f580d4c08b6616
7
- data.tar.gz: 5a7ac658a2757d90f3356824731c436225272951ab261eb19a5c15f6b82ab81076be58808d12fb23c596f22bebf562b31e187b1c8493e2aca79cebc668456b4e
6
+ metadata.gz: 3f12aa7bec1853b9a91e3b9a63a6f296aca373bb8f24a719a0728959e68cbe10e4b440bc7056d730bfa36f3e2a0c5c1b4db1b566cc51159a09bad3eac4694747
7
+ data.tar.gz: 9982645b54641b15fd7d8deae0049d90aca66defcaba509e19be7f0c27dfd42fec8bba5221b0ca961251fc8c084c61a1793fcc689df853ae09a570b0358ac605
@@ -0,0 +1,25 @@
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
+ run: |
22
+ gem install bundler
23
+ bundle install --jobs 4 --retry 3
24
+ bundle exec rake rubocop
25
+ bundle exec rake test
@@ -0,0 +1,34 @@
1
+ AllCops:
2
+ DisabledByDefault: false
3
+ NewCops: enable
4
+ TargetRubyVersion: 2.5
5
+
6
+ Layout/LineLength:
7
+ Enabled: false
8
+
9
+ Lint/RedundantCopDisableDirective:
10
+ Enabled: false
11
+
12
+ Metrics/AbcSize:
13
+ Enabled: false
14
+ Metrics/BlockLength:
15
+ Enabled: false
16
+ Metrics/ClassLength:
17
+ Enabled: false
18
+ Metrics/MethodLength:
19
+ Enabled: false
20
+
21
+ Naming/AccessorMethodName:
22
+ Enabled: false
23
+
24
+ Security/Open:
25
+ Enabled: false
26
+
27
+ Style/AccessorGrouping:
28
+ Enabled: false
29
+ Style/Documentation:
30
+ Enabled: false
31
+ Style/DoubleCopDisableDirective:
32
+ Enabled: false
33
+ Style/FrozenStringLiteralComment:
34
+ Enabled: false
@@ -1,3 +1,25 @@
1
+ ## January 20th, 2021 - 2.4.0
2
+ - Add query_members to channel
3
+ - Use post endpoint for query channels instead of get
4
+ - Extract common code for sorting into a helper for query calls
5
+
6
+ ## January 5th, 2021 - 2.3.0
7
+ - Add check SQS helper
8
+
9
+ ## January 4th, 2021 - 2.2.0
10
+ - Add support for export channels
11
+ - Improve readme for blocklist and export channels
12
+ - Improve running tests for multiple versions of ruby
13
+ - Fix issues from the latest version of rubocop
14
+ - Move to GitHub Actions
15
+
16
+ ## October 5th, 2020 - 2.1.0
17
+ - Add support for blocklist
18
+
19
+ ## October 2nd, 2020 - 2.0.0
20
+ - Drop EOL Ruby versions: 2.3 && 2.4
21
+ - Setup Rubocop and mark string literals as frozen
22
+
1
23
  ## August 3rd, 2020 - 1.1.3
2
24
  - Fixed Argument Error on delete_user
3
25
 
@@ -8,13 +30,11 @@
8
30
  - Fixed few minor issues
9
31
 
10
32
  ## Oct 27th, 2019 - 1.1.0
11
-
12
33
  - Mark gems use for testing as development dependencies
13
34
  - Added `send_file`, `send_image`, `delete_file`, `delete_image`
14
35
  - Added `invite_members`
15
36
 
16
37
  ## Oct 19th, 2019 - 1.0.0
17
-
18
38
  - Added `channel.hide` and `channel.show`
19
39
  - Added `client.flag_message` and `client.unflag_message`
20
40
  - Added `client.flag_user` and `client.unflag_user`
data/Gemfile CHANGED
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
4
6
 
5
7
  group :dev do
6
- gem "pry"
7
- gem "pry-doc"
8
- gem "method_source"
8
+ gem 'method_source'
9
+ gem 'pry'
10
+ gem 'pry-doc'
11
+ gem 'rubocop', require: false
9
12
  end
10
13
 
11
14
  group :test do
12
- gem "faraday"
13
- gem "rack"
14
- gem "simplecov"
15
+ gem 'faraday'
16
+ gem 'rack'
17
+ gem 'simplecov'
15
18
  end
16
-
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,9 @@ 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
+ # Query channel members
135
+ chan.query_members({name: {'$autocomplete': 'test'}}, {last_created_at: -1}, offset: 5, limit: 5)
132
136
  ```
133
137
 
134
138
  ### Messages
@@ -152,6 +156,31 @@ client.get_devices('jane-77')
152
156
  client.remove_device(jane_phone['id'], jane_phone['user_id'])
153
157
  ```
154
158
 
159
+ ### Blocklists
160
+ ```ruby
161
+ # Create a blocklist
162
+ client.create_blocklist('my_blocker', %w[fudge cream sugar])
163
+
164
+ # Enable it on messaging channel type
165
+ client.update_channel_type('messaging', blocklist: 'my_blocker', blocklist_behavior: 'block')
166
+
167
+ # Get the details of the blocklist
168
+ client.get_blocklist('my_blocker')
169
+
170
+ # Delete the blocklist
171
+ client.delete_blocklist('my_blocker')
172
+ ```
173
+
174
+ ### Export Channels
175
+ ```ruby
176
+ # Register an export
177
+ response = client.export_channels({type: 'messaging', id: 'jane'})
178
+
179
+ # Check completion
180
+ status_response = client.get_export_channel_status(response['task_id'])
181
+ # status_response['status'] == 'pending', 'completed'
182
+ ```
183
+
155
184
  ### Example Rails application
156
185
 
157
186
  See [an example rails application using the Ruby SDK](https://github.com/GetStream/rails-chat-example).
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  # rake spec
3
5
  require 'rspec/core/rake_task'
4
- RSpec::Core::RakeTask.new(:spec) { |t| t.verbose = false }
6
+ RSpec::Core::RakeTask.new(:spec) { |t| t.verbose = false }
5
7
 
6
8
  # rake console
7
9
  task :console do
@@ -11,6 +13,10 @@ task :console do
11
13
  Pry.start
12
14
  end
13
15
 
14
- task :default => [:spec]
15
- task :test => [:spec]
16
+ require 'rubocop/rake_task'
17
+ RuboCop::RakeTask.new(:rubocop) do |t|
18
+ t.options = ['--display-cop-names']
19
+ end
16
20
 
21
+ task default: [:spec]
22
+ task test: [:spec]
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true # rubocop:todo Naming/FileName
2
+
1
3
  require 'stream-chat/client'
@@ -1,72 +1,86 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'stream-chat/errors'
4
+ require 'stream-chat/util'
2
5
 
3
6
  module StreamChat
4
-
5
- class Channel
7
+ class Channel # rubocop:todo Metrics/ClassLength # rubocop:todo Style/Documentation
6
8
  attr_reader :id
7
9
  attr_reader :channel_type
8
10
  attr_reader :custom_data
11
+ attr_reader :members
9
12
 
10
- def initialize(client, channel_type, channel_id=nil, custom_data=nil)
13
+ def initialize(client, channel_type, channel_id = nil, custom_data = nil)
11
14
  @channel_type = channel_type
12
15
  @id = channel_id
13
16
  @client = client
14
17
  @custom_data = custom_data
15
- if @custom_data == nil
16
- @custom_data = {}
17
- end
18
+ @custom_data = {} if @custom_data.nil?
18
19
  end
19
20
 
20
21
  def url
21
- if @id == nil
22
- raise StreamChannelException "channel does not have an id"
23
- end
22
+ raise StreamChannelException 'channel does not have an id' if @id.nil?
23
+
24
24
  "channels/#{@channel_type}/#{@id}"
25
25
  end
26
26
 
27
27
  def send_message(message, user_id)
28
- payload = {"message": add_user_id(message, user_id)}
28
+ payload = { "message": add_user_id(message, user_id) }
29
29
  @client.post("#{url}/message", data: payload)
30
30
  end
31
31
 
32
32
  def send_event(event, user_id)
33
- payload = {'event' => add_user_id(event, user_id)}
33
+ payload = { 'event' => add_user_id(event, user_id) }
34
34
  @client.post("#{url}/event", data: payload)
35
35
  end
36
36
 
37
37
  def send_reaction(message_id, reaction, user_id)
38
- payload = {"reaction": add_user_id(reaction, user_id)}
38
+ payload = { "reaction": add_user_id(reaction, user_id) }
39
39
  @client.post("messages/#{message_id}/reaction", data: payload)
40
40
  end
41
41
 
42
42
  def delete_reaction(message_id, reaction_type, user_id)
43
43
  @client.delete(
44
44
  "messages/#{message_id}/reaction/#{reaction_type}",
45
- params: {"user_id": user_id}
45
+ params: { "user_id": user_id }
46
46
  )
47
47
  end
48
48
 
49
49
  def create(user_id)
50
- @custom_data["created_by"] = {"id": user_id}
50
+ @custom_data['created_by'] = { "id": user_id }
51
51
  query(watch: false, state: false, presence: false)
52
52
  end
53
53
 
54
54
  def query(**options)
55
- payload = {"state": true, "data": @custom_data}.merge(options)
55
+ payload = { "state": true, "data": @custom_data }.merge(options)
56
56
  url = "channels/#{@channel_type}"
57
- if @id != nil
58
- url = "#{url}/#{@id}"
59
- end
57
+ url = "#{url}/#{@id}" unless @id.nil?
60
58
 
61
59
  state = @client.post("#{url}/query", data: payload)
62
- if @id == nil
63
- @id = state["channel"]["id"]
64
- end
60
+ @id = state['channel']['id'] if @id.nil?
65
61
  state
66
62
  end
67
63
 
68
- def update(channel_data, update_message=nil)
69
- payload = {"data": channel_data, "message": update_message}
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
+
82
+ def update(channel_data, update_message = nil)
83
+ payload = { "data": channel_data, "message": update_message }
70
84
  @client.post(url, data: payload)
71
85
  end
72
86
 
@@ -79,23 +93,23 @@ module StreamChat
79
93
  end
80
94
 
81
95
  def add_members(user_ids)
82
- @client.post(url, data: {"add_members": user_ids})
96
+ @client.post(url, data: { "add_members": user_ids })
83
97
  end
84
98
 
85
99
  def invite_members(user_ids)
86
- @client.post(url, data: {"invites": user_ids})
100
+ @client.post(url, data: { "invites": user_ids })
87
101
  end
88
102
 
89
103
  def add_moderators(user_ids)
90
- @client.post(url, data: {"add_moderators": user_ids})
104
+ @client.post(url, data: { "add_moderators": user_ids })
91
105
  end
92
106
 
93
107
  def remove_members(user_ids)
94
- @client.post(url, data: {"remove_members": user_ids})
108
+ @client.post(url, data: { "remove_members": user_ids })
95
109
  end
96
110
 
97
111
  def demote_moderators(user_ids)
98
- @client.post(url, data: {"demote_moderators": user_ids})
112
+ @client.post(url, data: { "demote_moderators": user_ids })
99
113
  end
100
114
 
101
115
  def mark_read(user_id, **options)
@@ -120,11 +134,11 @@ module StreamChat
120
134
  end
121
135
 
122
136
  def hide(user_id)
123
- @client.post("#{url}/hide", data: {user_id: user_id})
137
+ @client.post("#{url}/hide", data: { user_id: user_id })
124
138
  end
125
139
 
126
140
  def show(user_id)
127
- @client.post("#{url}/show", data: {user_id: user_id})
141
+ @client.post("#{url}/show", data: { user_id: user_id })
128
142
  end
129
143
 
130
144
  def send_file(url, user, content_type = nil)
@@ -136,18 +150,17 @@ module StreamChat
136
150
  end
137
151
 
138
152
  def delete_file(url)
139
- @client.delete("#{self.url}/file", params: {"url": url})
153
+ @client.delete("#{self.url}/file", params: { "url": url })
140
154
  end
141
155
 
142
156
  def delete_image(url)
143
- @client.delete("#{self.url}/image", params: {"url": url})
157
+ @client.delete("#{self.url}/image", params: { "url": url })
144
158
  end
145
159
 
146
160
  private
147
161
 
148
162
  def add_user_id(payload, user_id)
149
- payload.merge({"user": {"id": user_id}})
163
+ payload.merge({ "user": { "id": user_id } })
150
164
  end
151
-
152
165
  end
153
166
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # lib/client.rb
2
4
  require 'open-uri'
3
5
  require 'faraday'
@@ -5,8 +7,11 @@ require 'jwt'
5
7
  require 'stream-chat/channel'
6
8
  require 'stream-chat/errors'
7
9
  require 'stream-chat/version'
10
+ require 'stream-chat/util'
8
11
 
9
12
  module StreamChat
13
+ DEFAULT_BLOCKLIST = 'profanity_en_2020_v1'
14
+
10
15
  class Client
11
16
  BASE_URL = 'https://chat-us-east-1.stream-io-api.com'
12
17
 
@@ -30,7 +35,7 @@ module StreamChat
30
35
  @api_secret = api_secret
31
36
  @timeout = timeout
32
37
  @options = options
33
- @auth_token = JWT.encode({server: true}, @api_secret, 'HS256')
38
+ @auth_token = JWT.encode({ server: true }, @api_secret, 'HS256')
34
39
  @base_url = options[:base_url] || BASE_URL
35
40
  @conn = Faraday.new(url: @base_url) do |faraday|
36
41
  faraday.options[:open_timeout] = @timeout
@@ -41,10 +46,8 @@ module StreamChat
41
46
  end
42
47
 
43
48
  def create_token(user_id, exp = nil)
44
- payload = {user_id: user_id}
45
- if exp != nil
46
- payload['exp'] = exp
47
- end
49
+ payload = { user_id: user_id }
50
+ payload['exp'] = exp unless exp.nil?
48
51
  JWT.encode(payload, @api_secret, 'HS256')
49
52
  end
50
53
 
@@ -57,23 +60,23 @@ module StreamChat
57
60
  end
58
61
 
59
62
  def flag_message(id, **options)
60
- payload = {'target_message_id': id}.merge(options)
61
- post("moderation/flag", data: payload)
63
+ payload = { 'target_message_id': id }.merge(options)
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)
66
- post("moderation/unflag", data: payload)
68
+ payload = { 'target_message_id': id }.merge(options)
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)
71
- post("moderation/flag", data: payload)
73
+ payload = { 'target_user_id': id }.merge(options)
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)
76
- post("moderation/unflag", data: payload)
78
+ payload = { 'target_user_id': id }.merge(options)
79
+ post('moderation/unflag', data: payload)
77
80
  end
78
81
 
79
82
  def get_message(id)
@@ -82,21 +85,22 @@ 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,
87
- })
88
+ "filter_conditions": filter_conditions,
89
+ "query": query
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)
93
96
  payload = {}
94
97
  users.each do |user|
95
- id = user[:id] || user["id"]
96
- raise ArgumentError, "user must have an id" unless id
98
+ id = user[:id] || user['id']
99
+ raise ArgumentError, 'user must have an id' unless id
100
+
97
101
  payload[id] = user
98
102
  end
99
- post('users', data: {'users': payload})
103
+ post('users', data: { 'users': payload })
100
104
  end
101
105
 
102
106
  def update_user(user)
@@ -104,7 +108,7 @@ module StreamChat
104
108
  end
105
109
 
106
110
  def update_users_partial(updates)
107
- patch('users', data: {'users': updates})
111
+ patch('users', data: { 'users': updates })
108
112
  end
109
113
 
110
114
  def update_user_partial(update)
@@ -128,35 +132,34 @@ module StreamChat
128
132
  end
129
133
 
130
134
  def ban_user(target_id, **options)
131
- payload = {'target_user_id': target_id}.merge(options)
132
- post("moderation/ban", data: payload)
135
+ payload = { 'target_user_id': target_id }.merge(options)
136
+ post('moderation/ban', data: payload)
133
137
  end
134
138
 
135
139
  def unban_user(target_id, **options)
136
- params = {'target_user_id': target_id}.merge(options)
137
- delete("moderation/ban", params: params)
140
+ params = { 'target_user_id': target_id }.merge(options)
141
+ delete('moderation/ban', params: params)
138
142
  end
139
143
 
140
144
  def mute_user(target_id, user_id)
141
- payload = {'target_id': target_id, 'user_id': user_id}
145
+ payload = { 'target_id': target_id, 'user_id': user_id }
142
146
  post('moderation/mute', data: payload)
143
147
  end
144
148
 
145
149
  def unmute_user(target_id, user_id)
146
- payload = {'target_id': target_id, 'user_id': user_id}
150
+ payload = { 'target_id': target_id, 'user_id': user_id }
147
151
  post('moderation/unmute', data: payload)
148
152
  end
149
153
 
150
154
  def mark_all_read(user_id)
151
- payload = {'user': {'id': user_id}}
155
+ payload = { 'user': { 'id': user_id } }
152
156
  post('channels/read', data: payload)
153
157
  end
154
158
 
155
159
  def update_message(message)
156
- if !message.key? 'id'
157
- raise ArgumentError "message must have an id"
158
- end
159
- post("messages/#{message['id']}", data: {'message': message})
160
+ raise ArgumentError 'message must have an id' unless message.key? 'id'
161
+
162
+ post("messages/#{message['id']}", data: { 'message': message })
160
163
  end
161
164
 
162
165
  def delete_message(message_id)
@@ -164,39 +167,25 @@ module StreamChat
164
167
  end
165
168
 
166
169
  def query_users(filter_conditions, sort: nil, **options)
167
- sort_fields = []
168
- if sort != nil
169
- sort.each do |k ,v|
170
- sort_fields << {"field": k, "direction": v}
171
- end
172
- end
173
170
  params = options.merge({
174
- "filter_conditions": filter_conditions,
175
- "sort": sort_fields
176
- })
177
- get("users", params: {"payload": params.to_json})
171
+ "filter_conditions": filter_conditions,
172
+ "sort": get_sort_fields(sort)
173
+ })
174
+ get('users', params: { "payload": params.to_json })
178
175
  end
179
176
 
180
177
  def query_channels(filter_conditions, sort: nil, **options)
181
- params = {"state": true, "watch": false, "presence": false}
182
- sort_fields = []
183
- if sort != nil
184
- sort.each do |k, v|
185
- sort_fields << {"field": k, "direction": v}
186
- end
187
- end
188
- params = params.merge(options).merge({
189
- "filter_conditions": filter_conditions,
190
- "sort": sort_fields
191
- })
192
- 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)
193
184
  end
194
185
 
195
186
  def create_channel_type(data)
196
- if !data.key? "commands" || data["commands"].nil? || data["commands"].empty?
197
- data["commands"] = ["all"]
198
- end
199
- post("channeltypes", data: data)
187
+ data['commands'] = ['all'] unless data.key?('commands') || data['commands'].nil? || data['commands'].empty?
188
+ post('channeltypes', data: data)
200
189
  end
201
190
 
202
191
  def get_channel_type(channel_type)
@@ -204,11 +193,11 @@ module StreamChat
204
193
  end
205
194
 
206
195
  def list_channel_types
207
- get("channeltypes")
196
+ get('channeltypes')
208
197
  end
209
198
 
210
199
  def update_channel_type(channel_type, **options)
211
- put("channeltypes/#{channel_type}", **options)
200
+ put("channeltypes/#{channel_type}", data: options)
212
201
  end
213
202
 
214
203
  def delete_channel_type(channel_type)
@@ -228,26 +217,54 @@ module StreamChat
228
217
  end
229
218
 
230
219
  def add_device(device_id, push_provider, user_id)
231
- post("devices", data: {
232
- "id": device_id,
233
- "push_provider": push_provider,
234
- "user_id": user_id
235
- })
220
+ post('devices', data: {
221
+ "id": device_id,
222
+ "push_provider": push_provider,
223
+ "user_id": user_id
224
+ })
236
225
  end
237
226
 
238
227
  def delete_device(device_id, user_id)
239
- delete("devices", params: {"id": device_id, "user_id": user_id})
228
+ delete('devices', params: { "id": device_id, "user_id": user_id })
240
229
  end
241
230
 
242
231
  def get_devices(user_id)
243
- get("devices", params: {"user_id": user_id})
232
+ get('devices', params: { "user_id": user_id })
244
233
  end
245
234
 
246
235
  def verify_webhook(request_body, x_signature)
247
- signature = OpenSSL::HMAC.hexdigest("SHA256", @api_secret, request_body)
236
+ signature = OpenSSL::HMAC.hexdigest('SHA256', @api_secret, request_body)
248
237
  signature == x_signature
249
238
  end
250
239
 
240
+ def list_blocklists
241
+ get('blocklists')
242
+ end
243
+
244
+ def get_blocklist(name)
245
+ get("blocklists/#{name}")
246
+ end
247
+
248
+ def create_blocklist(name, words)
249
+ post('blocklists', data: { "name": name, "words": words })
250
+ end
251
+
252
+ def update_blocklist(name, words)
253
+ put("blocklists/#{name}", data: { "words": words })
254
+ end
255
+
256
+ def delete_blocklist(name)
257
+ delete("blocklists/#{name}")
258
+ end
259
+
260
+ def export_channels(*channels)
261
+ post('export_channels', data: { "channels": channels })
262
+ end
263
+
264
+ def get_export_channel_status(task_id)
265
+ get("export_channels/#{task_id}")
266
+ end
267
+
251
268
  def put(relative_url, params: nil, data: nil)
252
269
  make_http_request(:put, relative_url, params: params, data: data)
253
270
  end
@@ -272,14 +289,14 @@ module StreamChat
272
289
  url = [@base_url, relative_url].join('/')
273
290
 
274
291
  file = open(file_url)
275
- body = {user: user.to_json}
292
+ body = { user: user.to_json }
276
293
 
277
294
  body[:file] = Faraday::UploadIO.new(file, content_type)
278
295
 
279
296
  response = @conn.post url do |req|
280
- req.headers["X-Stream-Client"] = get_user_agent
297
+ req.headers['X-Stream-Client'] = get_user_agent
281
298
  req.headers['Authorization'] = @auth_token
282
- req.headers["stream-auth-type"] = "jwt"
299
+ req.headers['stream-auth-type'] = 'jwt'
283
300
  req.params = get_default_params
284
301
  req.body = body
285
302
  end
@@ -287,10 +304,14 @@ module StreamChat
287
304
  parse_response(response)
288
305
  end
289
306
 
307
+ def check_sqs(sqs_key = nil, sqs_secret = nil, sqs_url = nil)
308
+ post('check_sqs', data: { "sqs_key": sqs_key, "sqs_secret": sqs_secret, "sqs_url": sqs_url })
309
+ end
310
+
290
311
  private
291
312
 
292
313
  def get_default_params
293
- {api_key: @api_key}
314
+ { api_key: @api_key }
294
315
  end
295
316
 
296
317
  def get_user_agent
@@ -299,7 +320,7 @@ module StreamChat
299
320
 
300
321
  def get_default_headers
301
322
  {
302
- "Content-Type": "application/json",
323
+ "Content-Type": 'application/json',
303
324
  "X-Stream-Client": get_user_agent
304
325
  }
305
326
  end
@@ -308,26 +329,23 @@ module StreamChat
308
329
  begin
309
330
  parsed_result = JSON.parse(response.body)
310
331
  rescue JSON::ParserError
311
- raise StreamAPIException.new(response)
332
+ raise StreamAPIException, response
312
333
  end
313
- if response.status >= 399
314
- raise StreamAPIException.new(response)
315
- end
316
- return parsed_result
334
+ raise StreamAPIException, response if response.status >= 399
335
+
336
+ parsed_result
317
337
  end
318
338
 
319
339
  def make_http_request(method, relative_url, params: nil, data: nil)
320
340
  headers = get_default_headers
321
341
  headers['Authorization'] = @auth_token
322
- headers["stream-auth-type"] = "jwt"
342
+ headers['stream-auth-type'] = 'jwt'
323
343
  url = [@base_url, relative_url].join('/')
324
- params = params != nil ? params : {}
325
- params = Hash[get_default_params.merge(params).sort_by { |k, v| k.to_s }]
344
+ params = params.nil? ? {} : params
345
+ params = Hash[get_default_params.merge(params).sort_by { |k, _v| k.to_s }]
326
346
  url = "#{url}?#{URI.encode_www_form(params)}"
327
347
 
328
- if %w[patch post put].include? method.to_s
329
- body = data.to_json
330
- end
348
+ body = data.to_json if %w[patch post put].include? method.to_s
331
349
 
332
350
  response = @conn.run_request(
333
351
  method,
@@ -337,7 +355,5 @@ module StreamChat
337
355
  )
338
356
  parse_response(response)
339
357
  end
340
-
341
358
  end
342
359
  end
343
-
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # lib/errors.rb
2
4
 
3
5
  module StreamChat
4
6
  class StreamAPIException < StandardError
5
-
6
7
  def initialize(response)
8
+ super()
7
9
  @response = response
8
10
  p response
9
11
  begin
10
12
  parsed_response = JSON.parse(response.body)
11
13
  @json_response = true
12
- @error_code = parsed_response.fetch("code", "unknown")
13
- @error_message = parsed_response.fetch("message", "unknown")
14
+ @error_code = parsed_response.fetch('code', 'unknown')
15
+ @error_message = parsed_response.fetch('message', 'unknown')
14
16
  rescue JSON::ParserError
15
17
  @json_response = false
16
18
  end
@@ -24,5 +26,6 @@ module StreamChat
24
26
  end
25
27
  end
26
28
  end
29
+
27
30
  class StreamChannelException < StandardError; end
28
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
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # lib/version.rb
2
4
 
3
5
  module StreamChat
4
- VERSION = "1.1.3".freeze
6
+ VERSION = '2.4.0'
5
7
  end
@@ -1,4 +1,6 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'stream-chat/version'
4
6
 
@@ -11,9 +13,10 @@ Gem::Specification.new do |gem|
11
13
  gem.email = 'support@getstream.io'
12
14
  gem.homepage = 'http://github.com/GetStream/stream-chat-ruby'
13
15
  gem.authors = ['Mircea Cosbuc']
14
- gem.files = Dir.chdir(File.expand_path('..', __FILE__)) do
16
+ gem.files = Dir.chdir(File.expand_path(__dir__)) do
15
17
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
18
  end
19
+ gem.required_ruby_version = '>=2.5.0'
17
20
 
18
21
  gem.add_dependency 'faraday'
19
22
  gem.add_dependency 'jwt'
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: 1.1.3
4
+ version: 2.4.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-08-04 00:00:00.000000000 Z
11
+ date: 2021-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -86,8 +86,9 @@ executables: []
86
86
  extensions: []
87
87
  extra_rdoc_files: []
88
88
  files:
89
+ - ".github/workflows/ci.yml"
89
90
  - ".gitignore"
90
- - ".travis.yml"
91
+ - ".rubocop.yml"
91
92
  - CHANGELOG.md
92
93
  - Gemfile
93
94
  - LICENSE
@@ -98,6 +99,7 @@ files:
98
99
  - lib/stream-chat/channel.rb
99
100
  - lib/stream-chat/client.rb
100
101
  - lib/stream-chat/errors.rb
102
+ - lib/stream-chat/util.rb
101
103
  - lib/stream-chat/version.rb
102
104
  - stream-chat.gemspec
103
105
  homepage: http://github.com/GetStream/stream-chat-ruby
@@ -111,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
113
  requirements:
112
114
  - - ">="
113
115
  - !ruby/object:Gem::Version
114
- version: '0'
116
+ version: 2.5.0
115
117
  required_rubygems_version: !ruby/object:Gem::Requirement
116
118
  requirements:
117
119
  - - ">="
@@ -1,9 +0,0 @@
1
- language: ruby
2
- before_install:
3
- - gem update bundler
4
- rvm:
5
- - 2.3
6
- - 2.4
7
- - 2.5
8
- - 2.6
9
- - 2.7