stream-chat-ruby 1.0.0 → 2.0.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 +5 -5
- data/.gitignore +1 -1
- data/.rubocop.yml +34 -0
- data/.travis.yml +6 -4
- data/CHANGELOG.md +19 -0
- data/Gemfile +9 -7
- data/README.md +4 -4
- data/Rakefile +9 -3
- data/lib/stream-chat.rb +2 -0
- data/lib/stream-chat/channel.rb +44 -31
- data/lib/stream-chat/client.rb +90 -75
- data/lib/stream-chat/errors.rb +5 -5
- data/lib/stream-chat/version.rb +3 -1
- data/stream-chat.gemspec +9 -6
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c7a819d41561a5fe8bf986b1ddcdc093a985a6de19bd256071a88efb4d790d58
|
4
|
+
data.tar.gz: e5cdc6e77fa5e453afbbbdf482c61f791a6896c47fe903f56acdca9794f662a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97fce2a3420903a2b9a88e7197a58683a5e3d0d54139350aec0d7c5029fd657352e2102be57fb398f5e389f5d97a500c5a88fce744f19ae2ffab2c5410ce297e
|
7
|
+
data.tar.gz: c9c2c76a61e874e43778b6181e1a2f68191aec1e0444272f043f6086f83f9151ae5a29d7c1255a60bf695520cdbe6e09bc5f87becda1dac93c461468a8b50539
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -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
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
## October 2nd, 2020 - 2.0.0
|
2
|
+
- Drop EOL Ruby versions: 2.3 && 2.4
|
3
|
+
- Setup Rubocop and mark string literals as frozen
|
4
|
+
|
5
|
+
## August 3rd, 2020 - 1.1.3
|
6
|
+
- Fixed Argument Error on delete_user
|
7
|
+
|
8
|
+
## April 23th, 2020 - 1.1.2
|
9
|
+
- Fixed ArgumentError when no users was passed
|
10
|
+
|
11
|
+
## March 30th, 2020 - 1.1.1
|
12
|
+
- Fixed few minor issues
|
13
|
+
|
14
|
+
## Oct 27th, 2019 - 1.1.0
|
15
|
+
|
16
|
+
- Mark gems use for testing as development dependencies
|
17
|
+
- Added `send_file`, `send_image`, `delete_file`, `delete_image`
|
18
|
+
- Added `invite_members`
|
19
|
+
|
1
20
|
## Oct 19th, 2019 - 1.0.0
|
2
21
|
|
3
22
|
- Added `channel.hide` and `channel.show`
|
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
|
7
|
-
gem
|
8
|
-
gem
|
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
|
13
|
-
gem
|
14
|
-
gem
|
15
|
+
gem 'faraday'
|
16
|
+
gem 'rack'
|
17
|
+
gem 'simplecov'
|
15
18
|
end
|
16
|
-
|
data/README.md
CHANGED
@@ -60,9 +60,9 @@ client.create_token('bob-1')
|
|
60
60
|
|
61
61
|
```ruby
|
62
62
|
client.update_user({
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
:id => 'bob-1',
|
64
|
+
:role => 'admin',
|
65
|
+
:name => 'Robert Tables'
|
66
66
|
})
|
67
67
|
|
68
68
|
# batch update is also supported
|
@@ -161,7 +161,7 @@ See [an example rails application using the Ruby SDK](https://github.com/GetStre
|
|
161
161
|
First, make sure you can run the test suite. Tests are run via rspec
|
162
162
|
|
163
163
|
```bash
|
164
|
-
|
164
|
+
STREAM_CHAT_API_KEY=my_api_key STREAM_CHAT_API_SECRET=my_api_secret bundle exec rake spec
|
165
165
|
```
|
166
166
|
|
167
167
|
### Releasing a new version
|
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
|
-
|
15
|
-
|
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]
|
data/lib/stream-chat.rb
CHANGED
data/lib/stream-chat/channel.rb
CHANGED
@@ -1,72 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'stream-chat/errors'
|
2
4
|
|
3
5
|
module StreamChat
|
4
|
-
|
5
|
-
class Channel
|
6
|
+
class Channel # rubocop:todo Metrics/ClassLength # rubocop:todo Style/Documentation
|
6
7
|
attr_reader :id
|
7
8
|
attr_reader :channel_type
|
8
9
|
attr_reader :custom_data
|
9
10
|
|
10
|
-
def initialize(client, channel_type, channel_id=nil, custom_data=nil)
|
11
|
+
def initialize(client, channel_type, channel_id = nil, custom_data = nil)
|
11
12
|
@channel_type = channel_type
|
12
13
|
@id = channel_id
|
13
14
|
@client = client
|
14
15
|
@custom_data = custom_data
|
15
|
-
if @custom_data
|
16
|
-
@custom_data = {}
|
17
|
-
end
|
16
|
+
@custom_data = {} if @custom_data.nil?
|
18
17
|
end
|
19
18
|
|
20
19
|
def url
|
21
|
-
if @id
|
22
|
-
|
23
|
-
end
|
20
|
+
raise StreamChannelException 'channel does not have an id' if @id.nil?
|
21
|
+
|
24
22
|
"channels/#{@channel_type}/#{@id}"
|
25
23
|
end
|
26
24
|
|
27
25
|
def send_message(message, user_id)
|
28
|
-
payload = {"message": add_user_id(message, user_id)}
|
26
|
+
payload = { "message": add_user_id(message, user_id) }
|
29
27
|
@client.post("#{url}/message", data: payload)
|
30
28
|
end
|
31
29
|
|
32
30
|
def send_event(event, user_id)
|
33
|
-
payload = {'event' => add_user_id(event, user_id)}
|
31
|
+
payload = { 'event' => add_user_id(event, user_id) }
|
34
32
|
@client.post("#{url}/event", data: payload)
|
35
33
|
end
|
36
34
|
|
37
35
|
def send_reaction(message_id, reaction, user_id)
|
38
|
-
payload = {"reaction": add_user_id(reaction, user_id)}
|
36
|
+
payload = { "reaction": add_user_id(reaction, user_id) }
|
39
37
|
@client.post("messages/#{message_id}/reaction", data: payload)
|
40
38
|
end
|
41
39
|
|
42
40
|
def delete_reaction(message_id, reaction_type, user_id)
|
43
41
|
@client.delete(
|
44
42
|
"messages/#{message_id}/reaction/#{reaction_type}",
|
45
|
-
params: {"user_id": user_id}
|
43
|
+
params: { "user_id": user_id }
|
46
44
|
)
|
47
45
|
end
|
48
46
|
|
49
47
|
def create(user_id)
|
50
|
-
@custom_data[
|
48
|
+
@custom_data['created_by'] = { "id": user_id }
|
51
49
|
query(watch: false, state: false, presence: false)
|
52
50
|
end
|
53
51
|
|
54
52
|
def query(**options)
|
55
|
-
payload = {"state": true, "data": @custom_data}.merge(options)
|
53
|
+
payload = { "state": true, "data": @custom_data }.merge(options)
|
56
54
|
url = "channels/#{@channel_type}"
|
57
|
-
|
58
|
-
url = "#{url}/#{@id}"
|
59
|
-
end
|
55
|
+
url = "#{url}/#{@id}" unless @id.nil?
|
60
56
|
|
61
57
|
state = @client.post("#{url}/query", data: payload)
|
62
|
-
if @id
|
63
|
-
@id = state["channel"]["id"]
|
64
|
-
end
|
58
|
+
@id = state['channel']['id'] if @id.nil?
|
65
59
|
state
|
66
60
|
end
|
67
61
|
|
68
|
-
def update(channel_data, update_message=nil)
|
69
|
-
payload = {"data": channel_data, "message": update_message}
|
62
|
+
def update(channel_data, update_message = nil)
|
63
|
+
payload = { "data": channel_data, "message": update_message }
|
70
64
|
@client.post(url, data: payload)
|
71
65
|
end
|
72
66
|
|
@@ -79,19 +73,23 @@ module StreamChat
|
|
79
73
|
end
|
80
74
|
|
81
75
|
def add_members(user_ids)
|
82
|
-
@client.post(url, data: {"add_members": user_ids})
|
76
|
+
@client.post(url, data: { "add_members": user_ids })
|
77
|
+
end
|
78
|
+
|
79
|
+
def invite_members(user_ids)
|
80
|
+
@client.post(url, data: { "invites": user_ids })
|
83
81
|
end
|
84
82
|
|
85
83
|
def add_moderators(user_ids)
|
86
|
-
@client.post(url, data: {"add_moderators": user_ids})
|
84
|
+
@client.post(url, data: { "add_moderators": user_ids })
|
87
85
|
end
|
88
86
|
|
89
87
|
def remove_members(user_ids)
|
90
|
-
@client.post(url, data: {"remove_members": user_ids})
|
88
|
+
@client.post(url, data: { "remove_members": user_ids })
|
91
89
|
end
|
92
90
|
|
93
91
|
def demote_moderators(user_ids)
|
94
|
-
@client.post(url, data: {"demote_moderators": user_ids})
|
92
|
+
@client.post(url, data: { "demote_moderators": user_ids })
|
95
93
|
end
|
96
94
|
|
97
95
|
def mark_read(user_id, **options)
|
@@ -116,18 +114,33 @@ module StreamChat
|
|
116
114
|
end
|
117
115
|
|
118
116
|
def hide(user_id)
|
119
|
-
@client.post("#{url}/hide", data: {user_id: user_id})
|
117
|
+
@client.post("#{url}/hide", data: { user_id: user_id })
|
120
118
|
end
|
121
119
|
|
122
120
|
def show(user_id)
|
123
|
-
@client.post("#{url}/show", data: {user_id: user_id})
|
121
|
+
@client.post("#{url}/show", data: { user_id: user_id })
|
122
|
+
end
|
123
|
+
|
124
|
+
def send_file(url, user, content_type = nil)
|
125
|
+
@client.send_file("#{self.url}/file", url, user, content_type)
|
126
|
+
end
|
127
|
+
|
128
|
+
def send_image(url, user, content_type = nil)
|
129
|
+
@client.send_file("#{self.url}/image", url, user, content_type)
|
130
|
+
end
|
131
|
+
|
132
|
+
def delete_file(url)
|
133
|
+
@client.delete("#{self.url}/file", params: { "url": url })
|
134
|
+
end
|
135
|
+
|
136
|
+
def delete_image(url)
|
137
|
+
@client.delete("#{self.url}/image", params: { "url": url })
|
124
138
|
end
|
125
139
|
|
126
140
|
private
|
127
141
|
|
128
142
|
def add_user_id(payload, user_id)
|
129
|
-
payload.merge({"user": {"id": user_id}})
|
143
|
+
payload.merge({ "user": { "id": user_id } })
|
130
144
|
end
|
131
|
-
|
132
145
|
end
|
133
146
|
end
|
data/lib/stream-chat/client.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# lib/client.rb
|
4
|
+
require 'open-uri'
|
2
5
|
require 'faraday'
|
3
6
|
require 'jwt'
|
4
7
|
require 'stream-chat/channel'
|
@@ -29,20 +32,19 @@ module StreamChat
|
|
29
32
|
@api_secret = api_secret
|
30
33
|
@timeout = timeout
|
31
34
|
@options = options
|
32
|
-
@auth_token = JWT.encode({server: true}, @api_secret, 'HS256')
|
35
|
+
@auth_token = JWT.encode({ server: true }, @api_secret, 'HS256')
|
33
36
|
@base_url = options[:base_url] || BASE_URL
|
34
37
|
@conn = Faraday.new(url: @base_url) do |faraday|
|
35
38
|
faraday.options[:open_timeout] = @timeout
|
36
39
|
faraday.options[:timeout] = @timeout
|
37
|
-
faraday.
|
40
|
+
faraday.request :multipart
|
41
|
+
faraday.adapter :net_http
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
41
45
|
def create_token(user_id, exp = nil)
|
42
|
-
payload = {user_id: user_id}
|
43
|
-
|
44
|
-
payload['exp'] = exp
|
45
|
-
end
|
46
|
+
payload = { user_id: user_id }
|
47
|
+
payload['exp'] = exp unless exp.nil?
|
46
48
|
JWT.encode(payload, @api_secret, 'HS256')
|
47
49
|
end
|
48
50
|
|
@@ -55,23 +57,23 @@ module StreamChat
|
|
55
57
|
end
|
56
58
|
|
57
59
|
def flag_message(id, **options)
|
58
|
-
payload = {'target_message_id': id}.merge(options)
|
59
|
-
post(
|
60
|
+
payload = { 'target_message_id': id }.merge(options)
|
61
|
+
post('moderation/flag', data: payload)
|
60
62
|
end
|
61
63
|
|
62
64
|
def unflag_message(id, **options)
|
63
|
-
payload = {'target_message_id': id}.merge(options)
|
64
|
-
post(
|
65
|
+
payload = { 'target_message_id': id }.merge(options)
|
66
|
+
post('moderation/unflag', data: payload)
|
65
67
|
end
|
66
68
|
|
67
69
|
def flag_user(id, **options)
|
68
|
-
payload = {'target_user_id': id}.merge(options)
|
69
|
-
post(
|
70
|
+
payload = { 'target_user_id': id }.merge(options)
|
71
|
+
post('moderation/flag', data: payload)
|
70
72
|
end
|
71
73
|
|
72
74
|
def unflag_user(id, **options)
|
73
|
-
payload = {'target_user_id': id}.merge(options)
|
74
|
-
post(
|
75
|
+
payload = { 'target_user_id': id }.merge(options)
|
76
|
+
post('moderation/unflag', data: payload)
|
75
77
|
end
|
76
78
|
|
77
79
|
def get_message(id)
|
@@ -80,19 +82,22 @@ module StreamChat
|
|
80
82
|
|
81
83
|
def search(filter_conditions, query, **options)
|
82
84
|
params = options.merge({
|
83
|
-
|
84
|
-
|
85
|
-
|
85
|
+
"filter_conditions": filter_conditions,
|
86
|
+
"query": query
|
87
|
+
})
|
86
88
|
|
87
|
-
get(
|
89
|
+
get('search', params: { "payload": params.to_json })
|
88
90
|
end
|
89
91
|
|
90
92
|
def update_users(users)
|
91
93
|
payload = {}
|
92
94
|
users.each do |user|
|
93
|
-
|
95
|
+
id = user[:id] || user['id']
|
96
|
+
raise ArgumentError, 'user must have an id' unless id
|
97
|
+
|
98
|
+
payload[id] = user
|
94
99
|
end
|
95
|
-
post('users', data: {'users': payload})
|
100
|
+
post('users', data: { 'users': payload })
|
96
101
|
end
|
97
102
|
|
98
103
|
def update_user(user)
|
@@ -100,7 +105,7 @@ module StreamChat
|
|
100
105
|
end
|
101
106
|
|
102
107
|
def update_users_partial(updates)
|
103
|
-
patch('users', data: {'users': updates})
|
108
|
+
patch('users', data: { 'users': updates })
|
104
109
|
end
|
105
110
|
|
106
111
|
def update_user_partial(update)
|
@@ -108,7 +113,7 @@ module StreamChat
|
|
108
113
|
end
|
109
114
|
|
110
115
|
def delete_user(user_id, **options)
|
111
|
-
delete("users/#{user_id}",
|
116
|
+
delete("users/#{user_id}", params: options)
|
112
117
|
end
|
113
118
|
|
114
119
|
def deactivate_user(user_id, **options)
|
@@ -124,35 +129,34 @@ module StreamChat
|
|
124
129
|
end
|
125
130
|
|
126
131
|
def ban_user(target_id, **options)
|
127
|
-
payload = {'target_user_id': target_id}.merge(options)
|
128
|
-
post(
|
132
|
+
payload = { 'target_user_id': target_id }.merge(options)
|
133
|
+
post('moderation/ban', data: payload)
|
129
134
|
end
|
130
135
|
|
131
136
|
def unban_user(target_id, **options)
|
132
|
-
params = {'target_user_id': target_id}.merge(options)
|
133
|
-
delete(
|
137
|
+
params = { 'target_user_id': target_id }.merge(options)
|
138
|
+
delete('moderation/ban', params: params)
|
134
139
|
end
|
135
140
|
|
136
141
|
def mute_user(target_id, user_id)
|
137
|
-
payload = {'target_id': target_id, 'user_id': user_id}
|
142
|
+
payload = { 'target_id': target_id, 'user_id': user_id }
|
138
143
|
post('moderation/mute', data: payload)
|
139
144
|
end
|
140
145
|
|
141
146
|
def unmute_user(target_id, user_id)
|
142
|
-
payload = {'target_id': target_id, 'user_id': user_id}
|
147
|
+
payload = { 'target_id': target_id, 'user_id': user_id }
|
143
148
|
post('moderation/unmute', data: payload)
|
144
149
|
end
|
145
150
|
|
146
151
|
def mark_all_read(user_id)
|
147
|
-
payload = {'user': {'id': user_id}}
|
152
|
+
payload = { 'user': { 'id': user_id } }
|
148
153
|
post('channels/read', data: payload)
|
149
154
|
end
|
150
155
|
|
151
156
|
def update_message(message)
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
post("messages/#{message['id']}", data: {'message': message})
|
157
|
+
raise ArgumentError 'message must have an id' unless message.key? 'id'
|
158
|
+
|
159
|
+
post("messages/#{message['id']}", data: { 'message': message })
|
156
160
|
end
|
157
161
|
|
158
162
|
def delete_message(message_id)
|
@@ -161,38 +165,32 @@ module StreamChat
|
|
161
165
|
|
162
166
|
def query_users(filter_conditions, sort: nil, **options)
|
163
167
|
sort_fields = []
|
164
|
-
|
165
|
-
|
166
|
-
sort_fields << {"field": k, "direction": v}
|
167
|
-
end
|
168
|
+
sort&.each do |k, v|
|
169
|
+
sort_fields << { "field": k, "direction": v }
|
168
170
|
end
|
169
171
|
params = options.merge({
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
get(
|
172
|
+
"filter_conditions": filter_conditions,
|
173
|
+
"sort": sort_fields
|
174
|
+
})
|
175
|
+
get('users', params: { "payload": params.to_json })
|
174
176
|
end
|
175
177
|
|
176
178
|
def query_channels(filter_conditions, sort: nil, **options)
|
177
|
-
params = {"state": true, "watch": false, "presence": false}
|
179
|
+
params = { "state": true, "watch": false, "presence": false }
|
178
180
|
sort_fields = []
|
179
|
-
|
180
|
-
|
181
|
-
sort_fields << {"field": k, "direction": v}
|
182
|
-
end
|
181
|
+
sort&.each do |k, v|
|
182
|
+
sort_fields << { "field": k, "direction": v }
|
183
183
|
end
|
184
184
|
params = params.merge(options).merge({
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
get(
|
185
|
+
"filter_conditions": filter_conditions,
|
186
|
+
"sort": sort_fields
|
187
|
+
})
|
188
|
+
get('channels', params: { "payload": params.to_json })
|
189
189
|
end
|
190
190
|
|
191
191
|
def create_channel_type(data)
|
192
|
-
|
193
|
-
|
194
|
-
end
|
195
|
-
post("channeltypes", data: data)
|
192
|
+
data['commands'] = ['all'] unless data.key?('commands') || data['commands'].nil? || data['commands'].empty?
|
193
|
+
post('channeltypes', data: data)
|
196
194
|
end
|
197
195
|
|
198
196
|
def get_channel_type(channel_type)
|
@@ -200,7 +198,7 @@ module StreamChat
|
|
200
198
|
end
|
201
199
|
|
202
200
|
def list_channel_types
|
203
|
-
get(
|
201
|
+
get('channeltypes')
|
204
202
|
end
|
205
203
|
|
206
204
|
def update_channel_type(channel_type, **options)
|
@@ -224,23 +222,23 @@ module StreamChat
|
|
224
222
|
end
|
225
223
|
|
226
224
|
def add_device(device_id, push_provider, user_id)
|
227
|
-
post(
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
225
|
+
post('devices', data: {
|
226
|
+
"id": device_id,
|
227
|
+
"push_provider": push_provider,
|
228
|
+
"user_id": user_id
|
229
|
+
})
|
232
230
|
end
|
233
231
|
|
234
232
|
def delete_device(device_id, user_id)
|
235
|
-
delete(
|
233
|
+
delete('devices', params: { "id": device_id, "user_id": user_id })
|
236
234
|
end
|
237
235
|
|
238
236
|
def get_devices(user_id)
|
239
|
-
get(
|
237
|
+
get('devices', params: { "user_id": user_id })
|
240
238
|
end
|
241
239
|
|
242
240
|
def verify_webhook(request_body, x_signature)
|
243
|
-
signature = OpenSSL::HMAC.hexdigest(
|
241
|
+
signature = OpenSSL::HMAC.hexdigest('SHA256', @api_secret, request_body)
|
244
242
|
signature == x_signature
|
245
243
|
end
|
246
244
|
|
@@ -264,10 +262,29 @@ module StreamChat
|
|
264
262
|
make_http_request(:patch, relative_url, params: params, data: data)
|
265
263
|
end
|
266
264
|
|
265
|
+
def send_file(relative_url, file_url, user, content_type = 'application/octet-stream')
|
266
|
+
url = [@base_url, relative_url].join('/')
|
267
|
+
|
268
|
+
file = open(file_url)
|
269
|
+
body = { user: user.to_json }
|
270
|
+
|
271
|
+
body[:file] = Faraday::UploadIO.new(file, content_type)
|
272
|
+
|
273
|
+
response = @conn.post url do |req|
|
274
|
+
req.headers['X-Stream-Client'] = get_user_agent
|
275
|
+
req.headers['Authorization'] = @auth_token
|
276
|
+
req.headers['stream-auth-type'] = 'jwt'
|
277
|
+
req.params = get_default_params
|
278
|
+
req.body = body
|
279
|
+
end
|
280
|
+
|
281
|
+
parse_response(response)
|
282
|
+
end
|
283
|
+
|
267
284
|
private
|
268
285
|
|
269
286
|
def get_default_params
|
270
|
-
{api_key: @api_key}
|
287
|
+
{ api_key: @api_key }
|
271
288
|
end
|
272
289
|
|
273
290
|
def get_user_agent
|
@@ -276,7 +293,7 @@ module StreamChat
|
|
276
293
|
|
277
294
|
def get_default_headers
|
278
295
|
{
|
279
|
-
"Content-Type":
|
296
|
+
"Content-Type": 'application/json',
|
280
297
|
"X-Stream-Client": get_user_agent
|
281
298
|
}
|
282
299
|
end
|
@@ -285,22 +302,22 @@ module StreamChat
|
|
285
302
|
begin
|
286
303
|
parsed_result = JSON.parse(response.body)
|
287
304
|
rescue JSON::ParserError
|
288
|
-
raise StreamAPIException
|
305
|
+
raise StreamAPIException, response
|
289
306
|
end
|
290
|
-
if response.status >= 399
|
291
|
-
|
292
|
-
|
293
|
-
return parsed_result
|
307
|
+
raise StreamAPIException, response if response.status >= 399
|
308
|
+
|
309
|
+
parsed_result
|
294
310
|
end
|
295
311
|
|
296
312
|
def make_http_request(method, relative_url, params: nil, data: nil)
|
297
313
|
headers = get_default_headers
|
298
314
|
headers['Authorization'] = @auth_token
|
299
|
-
headers[
|
315
|
+
headers['stream-auth-type'] = 'jwt'
|
300
316
|
url = [@base_url, relative_url].join('/')
|
301
|
-
params = params
|
302
|
-
params = Hash[get_default_params.merge(params).sort_by { |k,
|
317
|
+
params = !params.nil? ? params : {}
|
318
|
+
params = Hash[get_default_params.merge(params).sort_by { |k, _v| k.to_s }]
|
303
319
|
url = "#{url}?#{URI.encode_www_form(params)}"
|
320
|
+
|
304
321
|
body = data.to_json if %w[patch post put].include? method.to_s
|
305
322
|
|
306
323
|
response = @conn.run_request(
|
@@ -311,7 +328,5 @@ module StreamChat
|
|
311
328
|
)
|
312
329
|
parse_response(response)
|
313
330
|
end
|
314
|
-
|
315
331
|
end
|
316
332
|
end
|
317
|
-
|
data/lib/stream-chat/errors.rb
CHANGED
@@ -1,18 +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(
|
13
|
-
|
14
|
-
@error_message = parsed_response.fetch("data", {})
|
15
|
-
.fetch("message", "unknown")
|
14
|
+
@error_code = parsed_response.fetch('code', 'unknown')
|
15
|
+
@error_message = parsed_response.fetch('message', 'unknown')
|
16
16
|
rescue JSON::ParserError
|
17
17
|
@json_response = false
|
18
18
|
end
|
data/lib/stream-chat/version.rb
CHANGED
data/stream-chat.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
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,13 +13,14 @@ 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(
|
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
|
17
|
-
|
19
|
+
gem.required_ruby_version = '>=2.5.0'
|
20
|
+
|
18
21
|
gem.add_dependency 'faraday'
|
19
22
|
gem.add_dependency 'jwt'
|
20
|
-
gem.
|
21
|
-
gem.
|
22
|
-
gem.
|
23
|
+
gem.add_development_dependency 'rake'
|
24
|
+
gem.add_development_dependency 'rspec'
|
25
|
+
gem.add_development_dependency 'simplecov'
|
23
26
|
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:
|
4
|
+
version: 2.0.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:
|
11
|
+
date: 2020-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -45,7 +45,7 @@ dependencies:
|
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
type: :
|
62
|
+
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
@@ -73,7 +73,7 @@ dependencies:
|
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
|
-
type: :
|
76
|
+
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
@@ -87,6 +87,7 @@ extensions: []
|
|
87
87
|
extra_rdoc_files: []
|
88
88
|
files:
|
89
89
|
- ".gitignore"
|
90
|
+
- ".rubocop.yml"
|
90
91
|
- ".travis.yml"
|
91
92
|
- CHANGELOG.md
|
92
93
|
- Gemfile
|
@@ -111,15 +112,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
112
|
requirements:
|
112
113
|
- - ">="
|
113
114
|
- !ruby/object:Gem::Version
|
114
|
-
version:
|
115
|
+
version: 2.5.0
|
115
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
117
|
requirements:
|
117
118
|
- - ">="
|
118
119
|
- !ruby/object:Gem::Version
|
119
120
|
version: '0'
|
120
121
|
requirements: []
|
121
|
-
|
122
|
-
rubygems_version: 2.4.7
|
122
|
+
rubygems_version: 3.1.2
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: The low level client for serverside calls for Stream Chat.
|