matrix_sdk 0.1.0 → 1.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 +4 -4
- data/.gitlab-ci.yml +5 -1
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/lib/matrix_sdk.rb +2 -0
- data/lib/matrix_sdk/api.rb +10 -4
- data/lib/matrix_sdk/application_service.rb +3 -1
- data/lib/matrix_sdk/client.rb +13 -6
- data/lib/matrix_sdk/errors.rb +2 -0
- data/lib/matrix_sdk/extensions.rb +3 -1
- data/lib/matrix_sdk/mxid.rb +6 -2
- data/lib/matrix_sdk/protocols/as.rb +2 -0
- data/lib/matrix_sdk/protocols/cs.rb +3 -1
- data/lib/matrix_sdk/protocols/is.rb +2 -0
- data/lib/matrix_sdk/protocols/ss.rb +2 -0
- data/lib/matrix_sdk/response.rb +2 -0
- data/lib/matrix_sdk/room.rb +4 -2
- data/lib/matrix_sdk/user.rb +2 -0
- data/lib/matrix_sdk/version.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dee0d341f6962b850245ebbea4e85a9e4e3ac14d809a3f3bf1236d5458e9ef80
|
4
|
+
data.tar.gz: 9a1c731a321aee4f85ad4b6f39f85c975aa763308c069494448b200c7b88b1d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce68baa4997e7ba558c06458d3660d8c1429f352989c1dbef9b47943d77180bb646d45c8a727d29928318f3908ca51240335851b8ee66a345750bef71fd5bfd7
|
7
|
+
data.tar.gz: 51d7bb564f54c1f4f82700ea7f149837b24035859319be96357bfcb538d948a07b62dbe78e570ebc0090befcd099c5892422c71cc2ab3567296250772af70ae9
|
data/.gitlab-ci.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
---
|
2
|
-
image: "ruby:2.
|
2
|
+
image: "ruby:2.6"
|
3
3
|
|
4
4
|
# Cache gems in between builds
|
5
5
|
cache:
|
@@ -17,9 +17,13 @@ rubocop:
|
|
17
17
|
- rubocop lib
|
18
18
|
|
19
19
|
test:
|
20
|
+
coverage: '/\((\d+.\d+\%)\) covered/'
|
20
21
|
script:
|
21
22
|
- GENERATE_REPORTS=true CI_REPORTS=reports bundle exec rake test
|
22
23
|
artifacts:
|
24
|
+
expire_in: 1 week
|
25
|
+
paths:
|
26
|
+
- coverage/
|
23
27
|
reports:
|
24
28
|
junit: "reports/TEST-*.xml"
|
25
29
|
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## v1.0.0 - 2019-05-17
|
2
|
+
|
3
|
+
- Improves testing and code coverage of existing code
|
4
|
+
- Fixes a series of minor bugs found during the writing of tests
|
5
|
+
|
1
6
|
## v0.1.0 - 2019-05-10
|
2
7
|
|
3
8
|
- Adds code for handling member lazy load in the client abstraction, and activates it by default
|
data/lib/matrix_sdk.rb
CHANGED
data/lib/matrix_sdk/api.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'matrix_sdk'
|
2
4
|
|
3
5
|
require 'erb'
|
@@ -13,7 +15,7 @@ module MatrixSdk
|
|
13
15
|
include MatrixSdk::Protocols::IS
|
14
16
|
include MatrixSdk::Protocols::CS
|
15
17
|
|
16
|
-
USER_AGENT = "Ruby Matrix SDK v#{MatrixSdk::VERSION}"
|
18
|
+
USER_AGENT = "Ruby Matrix SDK v#{MatrixSdk::VERSION}"
|
17
19
|
DEFAULT_HEADERS = {
|
18
20
|
'accept' => 'application/json',
|
19
21
|
'user-agent' => USER_AGENT
|
@@ -41,9 +43,11 @@ module MatrixSdk
|
|
41
43
|
# @option params [Hash] :well_known The .well-known object that the server was discovered through, should not be set manually
|
42
44
|
def initialize(homeserver, params = {})
|
43
45
|
@homeserver = homeserver
|
46
|
+
raise ArgumentError, 'Homeserver URL must be String or URI' unless @homeserver.is_a?(String) || @homeserver.is_a?(URI)
|
47
|
+
|
44
48
|
@homeserver = URI.parse("#{'https://' unless @homeserver.start_with? 'http'}#{@homeserver}") unless @homeserver.is_a? URI
|
45
49
|
@homeserver.path.gsub!(/\/?_matrix\/?/, '') if @homeserver.path =~ /_matrix\/?$/
|
46
|
-
raise 'Please use the base URL for your HS (without /_matrix/)' if @homeserver.path.include? '/_matrix/'
|
50
|
+
raise ArgumentError, 'Please use the base URL for your HS (without /_matrix/)' if @homeserver.path.include? '/_matrix/'
|
47
51
|
|
48
52
|
@protocols = params.fetch(:protocols, %i[CS])
|
49
53
|
@protocols = [@protocols] unless @protocols.is_a? Array
|
@@ -61,6 +65,7 @@ module MatrixSdk
|
|
61
65
|
@well_known = params.fetch(:well_known, {})
|
62
66
|
@global_headers = DEFAULT_HEADERS.dup
|
63
67
|
@global_headers.merge!(params.fetch(:global_headers)) if params.key? :global_headers
|
68
|
+
@http = nil
|
64
69
|
|
65
70
|
login(user: @homeserver.user, password: @homeserver.password) if @homeserver.user && @homeserver.password && !@access_token && !params[:skip_login] && protocol?(:CS)
|
66
71
|
@homeserver.userinfo = '' unless params[:skip_login]
|
@@ -108,7 +113,7 @@ module MatrixSdk
|
|
108
113
|
nil
|
109
114
|
end
|
110
115
|
|
111
|
-
target_uri = well_known['m.server'] if well_known
|
116
|
+
target_uri = well_known['m.server'] if well_known&.key?('m.server')
|
112
117
|
else
|
113
118
|
target_uri = URI("https://#{target_uri.target}:#{target_uri.port}")
|
114
119
|
end
|
@@ -169,7 +174,7 @@ module MatrixSdk
|
|
169
174
|
# TODO: DNS query for SRV information about HS?
|
170
175
|
return unless hs_info.is_a? URI
|
171
176
|
|
172
|
-
@http.finish if @http
|
177
|
+
@http.finish if @http && homeserver != hs_info
|
173
178
|
@homeserver = hs_info
|
174
179
|
end
|
175
180
|
|
@@ -264,6 +269,7 @@ module MatrixSdk
|
|
264
269
|
@http.use_ssl = homeserver.scheme == 'https'
|
265
270
|
@http.verify_mode = validate_certificate ? ::OpenSSL::SSL::VERIFY_NONE : nil
|
266
271
|
@http.start
|
272
|
+
@http
|
267
273
|
end
|
268
274
|
end
|
269
275
|
end
|
data/lib/matrix_sdk/client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'matrix_sdk'
|
2
4
|
|
3
5
|
require 'forwardable'
|
@@ -73,7 +75,7 @@ module MatrixSdk
|
|
73
75
|
|
74
76
|
def mxid
|
75
77
|
@mxid ||= begin
|
76
|
-
api.whoami?[:user_id] if api
|
78
|
+
api.whoami?[:user_id] if api&.access_token
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
@@ -96,7 +98,7 @@ module MatrixSdk
|
|
96
98
|
post_authentication(data)
|
97
99
|
end
|
98
100
|
|
99
|
-
def register_with_password(username, password)
|
101
|
+
def register_with_password(username, password, full_state: true, **params)
|
100
102
|
username = username.to_s unless username.is_a?(String)
|
101
103
|
password = password.to_s unless password.is_a?(String)
|
102
104
|
|
@@ -105,6 +107,11 @@ module MatrixSdk
|
|
105
107
|
|
106
108
|
data = api.register(auth: { type: 'm.login.dummy' }, username: username, password: password)
|
107
109
|
post_authentication(data)
|
110
|
+
|
111
|
+
return if params[:no_sync]
|
112
|
+
|
113
|
+
sync full_state: full_state,
|
114
|
+
allow_sync_retry: params.fetch(:allow_sync_retry, nil)
|
108
115
|
end
|
109
116
|
|
110
117
|
def login(username, password, sync_timeout: 15, full_state: false, **params)
|
@@ -164,7 +171,7 @@ module MatrixSdk
|
|
164
171
|
room_id_or_alias = MXID.new(room_id_or_alias.to_s) unless room_id_or_alias.is_a? MXID
|
165
172
|
raise ArgumentError, 'Must be a room id or alias' unless %i[room_id room_alias].include? room_id_or_alias.type
|
166
173
|
|
167
|
-
return @rooms.fetch(room_id_or_alias, nil) if room_id_or_alias.room_id?
|
174
|
+
return @rooms.fetch(room_id_or_alias.to_s, nil) if room_id_or_alias.room_id?
|
168
175
|
|
169
176
|
return @rooms.values.find { |r| r.canonical_alias == room_id_or_alias.to_s } if only_canonical
|
170
177
|
|
@@ -216,7 +223,7 @@ module MatrixSdk
|
|
216
223
|
|
217
224
|
attempts = 0
|
218
225
|
data = loop do
|
219
|
-
begin
|
226
|
+
begin # rubocop:disable Style/RedundantBegin
|
220
227
|
break api.sync extra_params
|
221
228
|
rescue MatrixSdk::MatrixTimeoutError => e
|
222
229
|
raise e if (attempts += 1) >= params.fetch(:allow_sync_retry, 0)
|
@@ -239,12 +246,12 @@ module MatrixSdk
|
|
239
246
|
sync(params.merge(timeout: timeout))
|
240
247
|
|
241
248
|
bad_sync_timeout = orig_bad_sync_timeout
|
242
|
-
sleep(sync_interval) if sync_interval
|
249
|
+
sleep(sync_interval) if sync_interval.positive?
|
243
250
|
rescue MatrixRequestError => e
|
244
251
|
logger.warn("A #{e.class} occurred during sync")
|
245
252
|
if e.httpstatus >= 500
|
246
253
|
logger.warn("Serverside error, retrying in #{bad_sync_timeout} seconds...")
|
247
|
-
sleep
|
254
|
+
sleep(bad_sync_timeout) if bad_sync_timeout.positive? # rubocop:disable Metrics/BlockNesting
|
248
255
|
bad_sync_timeout = [bad_sync_timeout * 2, @bad_sync_timeout_limit].min
|
249
256
|
end
|
250
257
|
end
|
data/lib/matrix_sdk/errors.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module URI
|
2
4
|
class MATRIX < Generic
|
3
5
|
def full_path
|
@@ -96,7 +98,7 @@ module MatrixSdk
|
|
96
98
|
|
97
99
|
def fire(event, filter = nil)
|
98
100
|
reverse_each do |_k, h|
|
99
|
-
begin
|
101
|
+
begin # rubocop:disable Style/RedundantBegin
|
100
102
|
h[:block].call(event) if event.matches?(h[:filter], filter)
|
101
103
|
rescue StandardError => e
|
102
104
|
logger.error "#{e.class.name} occurred when firing event (#{event})\n#{e}"
|
data/lib/matrix_sdk/mxid.rb
CHANGED
@@ -1,21 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MatrixSdk
|
2
4
|
class MXID
|
3
5
|
attr_accessor :sigil, :localpart, :domain, :port
|
4
6
|
|
5
7
|
# @param identifier [String] The Matrix ID string in the format of '&<localpart>:<domain>' where '&' is the sigil
|
6
8
|
def initialize(identifier)
|
7
|
-
raise
|
9
|
+
raise ArgumentError, 'Identifier must be a String' unless identifier.is_a? String
|
8
10
|
raise ArgumentError, 'Identifier is too long' if identifier.size > 255
|
9
11
|
raise ArgumentError, 'Identifier lacks required data' unless identifier =~ %r{^([@!$+#][^:]+:[^:]+(?::\d+)?)|(\$[A-Za-z0-9+/]+)$}
|
10
12
|
|
11
13
|
@sigil = identifier[0]
|
12
14
|
@localpart, @domain, @port = identifier[1..-1].split(':')
|
15
|
+
@port = @port.to_i if @port
|
13
16
|
|
14
17
|
raise ArgumentError, 'Identifier is not a valid MXID' unless valid?
|
15
18
|
end
|
16
19
|
|
17
20
|
def to_s
|
18
|
-
|
21
|
+
port_s = port ? ':' + port.to_s : ''
|
22
|
+
"#{sigil}#{localpart}#{domain ? ':' + domain + port_s : ''}"
|
19
23
|
end
|
20
24
|
|
21
25
|
# Returns the type of the ID
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MatrixSdk::Protocols::CS
|
2
4
|
# Gets the available client API versions
|
3
5
|
# @return [Array]
|
@@ -5,7 +7,7 @@ module MatrixSdk::Protocols::CS
|
|
5
7
|
@client_api_versions ||= request(:get, :client, '/versions').versions.tap do |vers|
|
6
8
|
vers.instance_eval <<-'CODE', __FILE__, __LINE__ + 1
|
7
9
|
def latest
|
8
|
-
|
10
|
+
last
|
9
11
|
end
|
10
12
|
CODE
|
11
13
|
end
|
data/lib/matrix_sdk/response.rb
CHANGED
data/lib/matrix_sdk/room.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'matrix_sdk'
|
2
4
|
|
3
5
|
module MatrixSdk
|
@@ -306,7 +308,7 @@ module MatrixSdk
|
|
306
308
|
# @return [Boolean] wether the request succeeded
|
307
309
|
def leave
|
308
310
|
client.api.leave_room(id)
|
309
|
-
client.rooms.delete id
|
311
|
+
client.instance_variable_get(:@rooms).delete id
|
310
312
|
true
|
311
313
|
end
|
312
314
|
|
@@ -485,7 +487,7 @@ module MatrixSdk
|
|
485
487
|
data[:events].delete_if { |_k, v| v.nil? }
|
486
488
|
end
|
487
489
|
|
488
|
-
client.api.
|
490
|
+
client.api.set_power_levels(id, data)
|
489
491
|
true
|
490
492
|
end
|
491
493
|
|
data/lib/matrix_sdk/user.rb
CHANGED
data/lib/matrix_sdk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: matrix_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Olofsson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logging
|