matrix_sdk 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|