stream-chat-ruby 2.18.0 → 2.19.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: af3ba47a48c7b729201b5db3401986f5d45007030b4caa86053399f5faf12aba
4
- data.tar.gz: ba8243a507b81682a5f283f09e5075dd21a9c345c9043c8bf118ea423db1a1da
3
+ metadata.gz: 5789a9c18bf5d3508b754a0a3931b647d441dd48057fe0ff4209092d31a985c1
4
+ data.tar.gz: 86f540d7f3dc23e481314757efa3f6bac1746218f8e7686448da197c373a6b7b
5
5
  SHA512:
6
- metadata.gz: b004af8b95616a958803f632a434ae0ac1a6cd7504725faeceb76a2b27e75cdee45541ad876f598dc465ff02edee5662f4521437a9a74c5db3ef84c08dee6845
7
- data.tar.gz: ca7d458fe80c3417f4058e7c876ea4984818e3c0b072f4bedd962f96a5b556d7835a36748f5da9e1ed968fe52e8711ca2c4011b463eec4108590d9b384ecb047
6
+ metadata.gz: c4984f7402280cd7484a7687a6a940ef6c7662bcda3684da6e05d3e9cef8271f677221e11df4c0e865a4a3910dcdb5423a9adac479648f30d0eb1341effbb515
7
+ data.tar.gz: 0d89825ed4fae41d47a4daeb80d0192aad1c8e2d381d89384eed4076820fd7ce6538e278fd905a04e657e9f719910166f6b10dc6e1ae33fcc59d5988b3907ffe
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [2.19.0](https://github.com/GetStream/stream-chat-ruby/compare/v2.18.0...v2.19.0) (2022-02-02)
6
+
7
+
8
+ ### Features
9
+
10
+ * ability to provide custom http client ([#75](https://github.com/GetStream/stream-chat-ruby/issues/75)) ([bfff20d](https://github.com/GetStream/stream-chat-ruby/commit/bfff20d06232c49a1a8d0eee255a718bfffbb351))
11
+ * add connection pooling and idle timeout ([#74](https://github.com/GetStream/stream-chat-ruby/issues/74)) ([7891005](https://github.com/GetStream/stream-chat-ruby/commit/78910053b3a15b1efa3183a71299068e63b128e3))
12
+ * env var handling enhancement ([#76](https://github.com/GetStream/stream-chat-ruby/issues/76)) ([0cdc38a](https://github.com/GetStream/stream-chat-ruby/commit/0cdc38abd671bfaa8cefa7f403b9e2ac8b642272))
13
+ > 🚨 Note: if you used `STREAM_CHAT_URL` env var, you'll need to provide it manually in the `**options` as `base_url`. See the initializer of `Client` class for more information.
14
+
5
15
  ## [2.18.0](https://github.com/GetStream/stream-chat-ruby/compare/v2.17.2...v2.18.0) (2022-01-26)
6
16
 
7
17
 
@@ -4,6 +4,7 @@
4
4
  require 'open-uri'
5
5
  require 'faraday'
6
6
  require 'faraday/multipart'
7
+ require 'faraday/net_http_persistent'
7
8
  require 'jwt'
8
9
  require 'time'
9
10
  require 'stream-chat/channel'
@@ -18,7 +19,8 @@ module StreamChat
18
19
  HARD_DELETE = 'hard'
19
20
 
20
21
  class Client
21
- BASE_URL = 'https://chat.stream-io-api.com'
22
+ DEFAULT_BASE_URL = 'https://chat.stream-io-api.com'
23
+ DEFAULT_TIMEOUT = 6.0
22
24
 
23
25
  attr_reader :api_key
24
26
  attr_reader :api_secret
@@ -29,27 +31,50 @@ module StreamChat
29
31
  #
30
32
  # @param [string] api_key your application api_key
31
33
  # @param [string] api_secret your application secret
32
- # @param [string]
33
- # @param [hash] options extra options
34
+ # @param [float] timeout the timeout for the http requests
35
+ # @param [hash] options extra options such as base_url
34
36
  #
35
37
  # @example initialized the client with a timeout setting
36
38
  # StreamChat::Client.new('my_key', 'my_secret', 3.0)
37
39
  #
38
- def initialize(api_key = '', api_secret = '', timeout = 6.0, **options)
39
- @api_key = api_key || ENV['STREAM_KEY']
40
- @api_secret = api_secret || ENV['STREAM_SECRET']
41
- @timeout = timeout || ENV['STREAM_CHAT_TIMEOUT']
40
+ def initialize(api_key, api_secret, timeout = nil, **options)
41
+ raise ArgumentError, 'api_key and api_secret are required' if api_key.to_s.empty? || api_secret.to_s.empty?
42
+
43
+ @api_key = api_key
44
+ @api_secret = api_secret
45
+ @timeout = timeout || DEFAULT_TIMEOUT
42
46
  @options = options
43
47
  @auth_token = JWT.encode({ server: true }, @api_secret, 'HS256')
44
- @base_url = options[:base_url] || ENV['STREAM_CHAT_URL'] || BASE_URL
48
+ @base_url = options[:base_url] || DEFAULT_BASE_URL
45
49
  @conn = Faraday.new(url: @base_url) do |faraday|
46
50
  faraday.options[:open_timeout] = @timeout
47
51
  faraday.options[:timeout] = @timeout
48
52
  faraday.request :multipart
49
- faraday.adapter :net_http
53
+ faraday.adapter :net_http_persistent, pool_size: 5 do |http|
54
+ # AWS load balancer idle timeout is 60 secs, so let's make it 59
55
+ http.idle_timeout = 59
56
+ end
50
57
  end
51
58
  end
52
59
 
60
+ # initializes a Stream Chat API Client from STREAM_KEY and STREAM_SECRET
61
+ # environmental variables. STREAM_CHAT_TIMEOUT and STREAM_CHAT_URL
62
+ # variables are optional.
63
+ # @param [hash] options extra options
64
+ def self.from_env(**options)
65
+ Client.new(ENV['STREAM_KEY'],
66
+ ENV['STREAM_SECRET'],
67
+ ENV['STREAM_CHAT_TIMEOUT'],
68
+ **{ base_url: ENV['STREAM_CHAT_URL'] }.merge(options))
69
+ end
70
+
71
+ # Sets the underlying Faraday http client.
72
+ #
73
+ # @param [client] an instance of Faraday::Connection
74
+ def set_http_client(client)
75
+ @conn = client
76
+ end
77
+
53
78
  def create_token(user_id, exp = nil, iat = nil)
54
79
  payload = { user_id: user_id }
55
80
  payload['exp'] = exp unless exp.nil?
@@ -522,10 +547,9 @@ module StreamChat
522
547
  headers = get_default_headers
523
548
  headers['Authorization'] = @auth_token
524
549
  headers['stream-auth-type'] = 'jwt'
525
- url = [@base_url, relative_url].join('/')
526
550
  params = {} if params.nil?
527
551
  params = (get_default_params.merge(params).sort_by { |k, _v| k.to_s }).to_h
528
- url = "#{url}?#{URI.encode_www_form(params)}"
552
+ url = "#{relative_url}?#{URI.encode_www_form(params)}"
529
553
 
530
554
  body = data.to_json if %w[patch post put].include? method.to_s
531
555
 
@@ -3,5 +3,5 @@
3
3
  # lib/version.rb
4
4
 
5
5
  module StreamChat
6
- VERSION = '2.18.0'
6
+ VERSION = '2.19.0'
7
7
  end
data/stream-chat.gemspec CHANGED
@@ -28,7 +28,9 @@ Gem::Specification.new do |gem|
28
28
 
29
29
  gem.add_dependency 'faraday'
30
30
  gem.add_dependency 'faraday-multipart'
31
+ gem.add_dependency 'faraday-net_http_persistent'
31
32
  gem.add_dependency 'jwt'
33
+ gem.add_dependency 'net-http-persistent'
32
34
  gem.add_development_dependency 'rake'
33
35
  gem.add_development_dependency 'rspec'
34
36
  gem.add_development_dependency 'simplecov'
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.18.0
4
+ version: 2.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - getstream.io
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-26 00:00:00.000000000 Z
11
+ date: 2022-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday-net_http_persistent
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: jwt
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: net-http-persistent
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rake
57
85
  requirement: !ruby/object:Gem::Requirement