matrix_sdk 2.7.0 → 2.8.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: 7db96470aa545490e2dc289243a1c133a708548e334748fee72cfa1bdba68543
4
- data.tar.gz: 863bf01f82c86e9a6329bb505c727a872bf2f2b7b5dd8f51fbc633d74675d8b6
3
+ metadata.gz: fd493a721423c1f1a7da7b2ff678ad8e1a949f258fe613616ebedab39d5ae204
4
+ data.tar.gz: 52e6563d1dbb42cd5acddf3809df720fb6ecc5b6f49cbdc14606450e908c32c6
5
5
  SHA512:
6
- metadata.gz: f529e7679bd36fcad10184795d78f5dd0a72b0a496fe5f3a10d976d3a33e033cf2367ffb01b68bca3e0844ed91f496921a28e2ef7b20a5bd9589c21bb28a321e
7
- data.tar.gz: e32d7dcbff2eac544e25f5c7598ac5f743e60dab8eac6394d1054a118882b0efdb3a69dca8ac93d1fae6ed6cf5912d6576156c3dcc9541c0b8b37bc6f9507600
6
+ metadata.gz: 1fa0a6cbae2b6fa8ab91961df79082017be6a50028cc7b318ad70a5be9c76b8488b4b24cbef5e5a768ac34076236430683d518c18fccb296290599427bd71095
7
+ data.tar.gz: f62ad6791ee5f3921869d2431e55e3a1f44501af1b8c966a957fbcacbcaf809edb2e47b8d8b65d1393c268ff58b19e21fc966b1660c671d4d257121bf832dadf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 2.8.0 - 2022-08-19
2
+
3
+ - Drops support for EoL Ruby 2.6
4
+ - Adds helpers for accessing room state
5
+ - Fixes Client#sync_token usage
6
+ - Improves caching of state events in rooms
7
+
1
8
  ## 2.7.0 - 2022-08-12
2
9
 
3
10
  - Adds a bot subsystem + DSL
@@ -47,11 +47,15 @@ module MatrixSdk::Bot
47
47
  client.join_room(ev[:room_id])
48
48
  end
49
49
 
50
+ @event = nil
51
+
50
52
  logger.warn 'The bot abstraction is not fully finalized and can be expected to change.'
51
53
  end
52
54
 
53
55
  def logger
54
- @logger || self.class.logger
56
+ return @logger if instance_variable_defined?(:@logger) && @logger
57
+
58
+ self.class.logger
55
59
  end
56
60
 
57
61
  def self.logger
@@ -21,8 +21,8 @@ module MatrixSdk
21
21
  # @!attribute sync_filter [rw] The global sync filter
22
22
  # @return [Hash,String] A filter definition, either as defined by the
23
23
  # Matrix spec, or as an identifier returned by a filter creation request
24
- attr_reader :api, :next_batch
25
- attr_accessor :cache, :sync_filter, :sync_token
24
+ attr_reader :api
25
+ attr_accessor :cache, :sync_filter, :next_batch
26
26
 
27
27
  events :error, :event, :account_data, :presence_event, :invite_event, :leave_event, :ephemeral_event, :state_event
28
28
  ignore_inspect :api,
@@ -75,7 +75,6 @@ module MatrixSdk
75
75
  @identity_server = nil
76
76
  @mxid = nil
77
77
 
78
- @sync_token = nil
79
78
  @sync_thread = nil
80
79
  @sync_filter = { room: { timeline: { limit: params.fetch(:sync_filter_limit, 20) }, state: { lazy_load_members: true } } }
81
80
 
@@ -99,6 +98,9 @@ module MatrixSdk
99
98
  @mxid = params[:user_id]
100
99
  end
101
100
 
101
+ alias sync_token next_batch
102
+ alias sync_token= next_batch=
103
+
102
104
  # Gets the currently logged in user's MXID
103
105
  #
104
106
  # @return [MXID] The MXID of the current user
@@ -684,6 +686,7 @@ module MatrixSdk
684
686
  # TODO Run this in a thread?
685
687
  room.tinycache_adapter.cleanup
686
688
  room.account_data.tinycache_adapter.cleanup
689
+ room.room_state.tinycache_adapter.cleanup
687
690
  end
688
691
  end
689
692
 
@@ -12,7 +12,7 @@ module MatrixSdk
12
12
 
13
13
  # TODO: Community-as-a-Room / Profile-as-a-Room, in case they're going for room aliases
14
14
  @sigil = identifier[0]
15
- @localpart, @domain, @port = identifier[1..-1].split(':') # rubocop:disable Style/SlicingWithRange # Keep support for slightly older Rubies
15
+ @localpart, @domain, @port = identifier[1..].split(':')
16
16
  @port = @port.to_i if @port
17
17
 
18
18
  raise ArgumentError, 'Identifier is not a valid MXID' unless valid?
@@ -519,6 +519,8 @@ module MatrixSdk::Protocols::CS
519
519
  request(:put, client_api_latest, "/rooms/#{room_id}/state/#{event_type}#{"/#{state_key}" unless state_key.nil?}", body: content, query: query)
520
520
  end
521
521
 
522
+ alias set_room_state send_state_event
523
+
522
524
  # Sends a message event to a room
523
525
  # @param room_id [MXID,String] The room ID to send the message event to
524
526
  # @param event_type [String] The event type of the message
@@ -37,9 +37,6 @@ module MatrixSdk
37
37
  cached :aliases, unless: proc { |args| args.any? }, cache_level: :all, expires_in: 60 * 60
38
38
  cached :all_members, unless: proc { |args| args.any? }, cache_level: :all, expires_in: 60 * 60
39
39
 
40
- # Much simpler to look up, and lighter data-wise, so the cache is wider
41
- cached :canonical_alias, :name, :avatar_url, :topic, :guest_access, :join_rule, :power_levels, cache_level: :some, expires_in: 15 * 60
42
-
43
40
  alias room_id id
44
41
  alias members joined_members
45
42
 
@@ -84,6 +81,12 @@ module MatrixSdk
84
81
 
85
82
  @prev_batch = nil
86
83
 
84
+ %i[name topic canonical_alias avatar_url].each do |type|
85
+ room_state.tinycache_adapter.write("m.room.#{type}", { type => data.delete(type) }) if data.key? type
86
+ end
87
+ room_state.tinycache_adapter.write('m.room.join_rules', { join_rule: data.delete(:join_rule) }) if data.key? :join_rule
88
+ room_state.tinycache_adapter.write('m.room.history_visibility', { history_visibility: data.delete(:world_readable) ? :world_readable : nil }) if data.key? :world_readable
89
+
87
90
  data.each do |k, v|
88
91
  next if %i[client].include? k
89
92
 
@@ -175,7 +178,7 @@ module MatrixSdk
175
178
 
176
179
  # @return [String, nil] the canonical alias of the room
177
180
  def canonical_alias
178
- client.api.get_room_state(id, 'm.room.canonical_alias')[:alias]
181
+ get_state('m.room.canonical_alias')[:alias]
179
182
  rescue MatrixSdk::MatrixNotFoundError
180
183
  nil
181
184
  end
@@ -208,7 +211,7 @@ module MatrixSdk
208
211
  #
209
212
  # @return [String,nil] The room name - if any
210
213
  def name
211
- client.api.get_room_name(id)[:name]
214
+ get_state('m.room.name')[:name]
212
215
  rescue MatrixNotFoundError
213
216
  # No room name has been specified
214
217
  nil
@@ -244,7 +247,7 @@ module MatrixSdk
244
247
  #
245
248
  # @return [String,nil] The avatar URL - if any
246
249
  def avatar_url
247
- client.api.get_room_avatar(id)[:url]
250
+ get_state('m.room.avatar_url')[:url]
248
251
  rescue MatrixNotFoundError
249
252
  # No avatar has been set
250
253
  nil
@@ -254,7 +257,7 @@ module MatrixSdk
254
257
  #
255
258
  # @return [String,nil] The topic of the room
256
259
  def topic
257
- client.api.get_room_topic(id)[:topic]
260
+ get_state('m.room.topic')[:topic]
258
261
  rescue MatrixNotFoundError
259
262
  # No room name has been specified
260
263
  nil
@@ -264,14 +267,14 @@ module MatrixSdk
264
267
  #
265
268
  # @return [:can_join,:forbidden] The current guest access right
266
269
  def guest_access
267
- client.api.get_room_guest_access(id)[:guest_access]&.to_sym
270
+ get_state('m.room.guest_access')[:guest_access]&.to_sym
268
271
  end
269
272
 
270
273
  # Gets the join rule for the room
271
274
  #
272
275
  # @return [:public,:knock,:invite,:private] The current join rule
273
276
  def join_rule
274
- client.api.get_room_join_rules(id)[:join_rule]&.to_sym
277
+ get_state('m.room.join_rules')[:join_rule]&.to_sym
275
278
  end
276
279
 
277
280
  # Checks if +guest_access+ is set to +:can_join+
@@ -289,11 +292,27 @@ module MatrixSdk
289
292
  join_rule == :knock
290
293
  end
291
294
 
295
+ def room_state
296
+ return MatrixSdk::Util::StateEventCache.new self if client.cache == :none
297
+
298
+ @room_state ||= MatrixSdk::Util::StateEventCache.new self
299
+ end
300
+
301
+ # Gets a state object in the room
302
+ def get_state(type, state_key: nil)
303
+ room_state[type, state_key]
304
+ end
305
+
306
+ # Sets a state object in the room
307
+ def set_state(type, data, state_key: nil)
308
+ room_state[type, state_key] = data
309
+ end
310
+
292
311
  # Gets the history visibility of the room
293
312
  #
294
313
  # @return [:invited,:joined,:shared,:world_readable] The current history visibility for the room
295
314
  def history_visibility
296
- client.api.get_room_state(id, 'm.room.history_visibility')[:history_visibility]&.to_sym
315
+ get_state('m.room.history_visibility')[:history_visibility]&.to_sym
297
316
  end
298
317
 
299
318
  # Checks if the room history is world readable
@@ -309,7 +328,7 @@ module MatrixSdk
309
328
  # @param canonical_only [Boolean] Should the list of aliases only contain the canonical ones
310
329
  # @return [Array[String]] The assigned room aliases
311
330
  def aliases(canonical_only: true)
312
- canonical = client.api.get_room_state(id, 'm.room.canonical_alias') rescue {}
331
+ canonical = get_state('m.room.canonical_alias') rescue {}
313
332
  aliases = ([canonical[:alias]].compact + (canonical[:alt_aliases] || [])).uniq.sort
314
333
  return aliases if canonical_only
315
334
 
@@ -598,8 +617,7 @@ module MatrixSdk
598
617
  #
599
618
  # @return [Response] The content of the m.room.create event
600
619
  def creation_info
601
- # Not caching here, easier to cache the important values separately instead
602
- client.api.get_room_creation_info(id)
620
+ room_state['m.room.create']
603
621
  end
604
622
 
605
623
  # Retrieves the type of the room
@@ -607,9 +625,6 @@ module MatrixSdk
607
625
  # @return ['m.space',String,nil] The type of the room
608
626
  def room_type
609
627
  # Can't change, so a permanent cache is ok
610
- return @room_type if @room_type_retrieved || @room_type
611
-
612
- @room_type_retrieved = true
613
628
  @room_type ||= creation_info[:type]
614
629
  end
615
630
 
@@ -617,6 +632,7 @@ module MatrixSdk
617
632
  #
618
633
  # @return [String] The version of the room
619
634
  def room_version
635
+ # Can't change, so a permanent cache is ok
620
636
  @room_version ||= creation_info[:room_version]
621
637
  end
622
638
 
@@ -691,8 +707,7 @@ module MatrixSdk
691
707
  #
692
708
  # @param name [String] The new name to set
693
709
  def name=(name)
694
- tinycache_adapter.write(:name, name)
695
- client.api.set_room_name(id, name)
710
+ room_state['m.room.name'] = { name: name }
696
711
  name
697
712
  end
698
713
 
@@ -700,7 +715,7 @@ module MatrixSdk
700
715
  #
701
716
  # @return [Boolean] if the name was changed or not
702
717
  def reload_name!
703
- clear_name_cache
718
+ room_state.expire('m.room.name')
704
719
  end
705
720
  alias refresh_name! reload_name!
706
721
 
@@ -708,8 +723,7 @@ module MatrixSdk
708
723
  #
709
724
  # @param topic [String] The new topic to set
710
725
  def topic=(topic)
711
- tinycache_adapter.write(:topic, topic)
712
- client.api.set_room_topic(id, topic)
726
+ room_state['m.room.topic'] = { topic: topic }
713
727
  topic
714
728
  end
715
729
 
@@ -717,7 +731,7 @@ module MatrixSdk
717
731
  #
718
732
  # @return [Boolean] if the topic was changed or not
719
733
  def reload_topic!
720
- clear_topic_cache
734
+ room_state.expire('m.room.topic')
721
735
  end
722
736
  alias refresh_topic! reload_topic!
723
737
 
@@ -736,6 +750,7 @@ module MatrixSdk
736
750
  # @note The list of aliases is not sorted, ordering changes will result in
737
751
  # alias list updates.
738
752
  def reload_aliases!
753
+ room_state.expire('m.room.canonical_alias')
739
754
  clear_aliases_cache
740
755
  end
741
756
  alias refresh_aliases! reload_aliases!
@@ -752,8 +767,7 @@ module MatrixSdk
752
767
  #
753
768
  # @param join_rule [:invite,:public] The join rule of the room
754
769
  def join_rule=(join_rule)
755
- client.api.set_room_join_rules(id, join_rule)
756
- tinycache_adapter.write(:join_rule, join_rule)
770
+ room_state['m.room.join_rules'] = { join_rule: join_rule }
757
771
  join_rule
758
772
  end
759
773
 
@@ -769,8 +783,7 @@ module MatrixSdk
769
783
  #
770
784
  # @param guest_access [:can_join,:forbidden] The new guest access status of the room
771
785
  def guest_access=(guest_access)
772
- client.api.set_room_guest_access(id, guest_access)
773
- tinycache_adapter.write(:guest_access, guest_access)
786
+ room_state['m.room.guest_access'] = { guest_access: guest_access }
774
787
  guest_access
775
788
  end
776
789
 
@@ -781,8 +794,7 @@ module MatrixSdk
781
794
  avatar_url = URI(avatar_url) unless avatar_url.is_a? URI
782
795
  raise ArgumentError, 'Must be a valid MXC URL' unless avatar_url.is_a? URI::MXC
783
796
 
784
- client.api.set_room_avatar(id, avatar_url)
785
- tinycache_adapter.write(:avatar_url, avatar_url)
797
+ room_state['m.room.avatar_url'] = { avatar_url: avatar_url }
786
798
  avatar_url
787
799
  end
788
800
 
@@ -792,7 +804,7 @@ module MatrixSdk
792
804
  # @return [Hash] The current power levels as set for the room
793
805
  # @see Protocols::CS#get_power_levels
794
806
  def power_levels
795
- client.api.get_power_levels(id)
807
+ get_state('m.room.power_levels')
796
808
  end
797
809
 
798
810
  # Gets the power level of a user in the room
@@ -889,8 +901,9 @@ module MatrixSdk
889
901
  def modify_user_power_levels(users = nil, users_default = nil)
890
902
  return false if users.nil? && users_default.nil?
891
903
 
892
- data = power_levels_without_cache
893
- tinycache_adapter.write(:power_levels, data)
904
+ room_state.tinycache_adapter.expire 'm.room.power_levels'
905
+
906
+ data = power_levels
894
907
  data[:users_default] = users_default unless users_default.nil?
895
908
 
896
909
  if users
@@ -908,7 +921,7 @@ module MatrixSdk
908
921
  end
909
922
  end
910
923
 
911
- client.api.set_power_levels(id, data)
924
+ room_state['m.room.power_levels'] = data
912
925
  true
913
926
  end
914
927
 
@@ -920,8 +933,9 @@ module MatrixSdk
920
933
  def modify_required_power_levels(events = nil, params = {})
921
934
  return false if events.nil? && (params.nil? || params.empty?)
922
935
 
923
- data = power_levels_without_cache
924
- tinycache_adapter.write(:power_levels, data)
936
+ room_state.tinycache_adapter.expire 'm.room.power_levels'
937
+
938
+ data = power_levels
925
939
  data.merge!(params)
926
940
  data.delete_if { |_k, v| v.nil? }
927
941
 
@@ -931,7 +945,7 @@ module MatrixSdk
931
945
  data[:events].delete_if { |_k, v| v.nil? }
932
946
  end
933
947
 
934
- client.api.set_power_levels(id, data)
948
+ room_state['m.room.power_levels'] = data
935
949
  true
936
950
  end
937
951
 
@@ -948,26 +962,6 @@ module MatrixSdk
948
962
  tinycache_adapter.write(:joined_members, members)
949
963
  end
950
964
 
951
- def handle_power_levels(event)
952
- tinycache_adapter.write(:power_levels, event[:content])
953
- end
954
-
955
- def handle_room_name(event)
956
- tinycache_adapter.write(:name, event.dig(*%i[content name]))
957
- end
958
-
959
- def handle_room_topic(event)
960
- tinycache_adapter.write(:topic, event.dig(*%i[content topic]))
961
- end
962
-
963
- def handle_room_guest_access(event)
964
- tinycache_adapter.write(:guest_access, event.dig(*%i[content guest_access])&.to_sym)
965
- end
966
-
967
- def handle_room_join_rules(event)
968
- tinycache_adapter.write(:join_rule, event.dig(*%i[content join_rule])&.to_sym)
969
- end
970
-
971
965
  def handle_room_member(event)
972
966
  return unless client.cache == :all
973
967
 
@@ -982,7 +976,8 @@ module MatrixSdk
982
976
  end
983
977
 
984
978
  def handle_room_canonical_alias(event)
985
- canonical_alias = tinycache_adapter.write(:canonical_alias, event.dig(*%i[content alias]))
979
+ room_state.tinycache_adapter.write('m.room.canonical_alias', event[:content], expires_in: room_state.cache_time)
980
+ canonical_alias = event.dig(*%i[content alias])
986
981
 
987
982
  data = tinycache_adapter.read(:aliases) || []
988
983
  data << canonical_alias
@@ -1003,16 +998,6 @@ module MatrixSdk
1003
998
  }
1004
999
  end
1005
1000
 
1006
- INTERNAL_HANDLERS = {
1007
- 'm.room.canonical_alias' => :handle_room_canonical_alias,
1008
- 'm.room.guest_access' => :handle_room_guest_access,
1009
- 'm.room.join_rules' => :handle_room_join_rules,
1010
- 'm.room.member' => :handle_room_member,
1011
- 'm.room.name' => :handle_room_name,
1012
- 'm.room.power_levels' => :handle_power_levels,
1013
- 'm.room.topic' => :handle_room_topic
1014
- }.freeze
1015
-
1016
1001
  def put_event(event)
1017
1002
  ensure_room_handlers[:event].fire(MatrixEvent.new(self, event), event[:type]) if room_handlers?
1018
1003
 
@@ -1037,8 +1022,20 @@ module MatrixSdk
1037
1022
  ensure_room_handlers[:ephemeral_event].fire(MatrixEvent.new(self, event), event[:type])
1038
1023
  end
1039
1024
 
1025
+ INTERNAL_HANDLERS = {
1026
+ 'm.room.canonical_alias' => :handle_room_canonical_alias,
1027
+ 'm.room.member' => :handle_room_member
1028
+ }.freeze
1029
+
1040
1030
  def put_state_event(event)
1041
- send(INTERNAL_HANDLERS[event[:type]], event) if INTERNAL_HANDLERS.key? event[:type]
1031
+ if INTERNAL_HANDLERS.key? event[:type]
1032
+ send(INTERNAL_HANDLERS[event[:type]], event)
1033
+ elsif client.cache != :none
1034
+ adapter = room_state.tinycache_adapter
1035
+ key = event[:type]
1036
+ key += "|#{event[:state_key]}" unless event[:state_key].nil? || event[:state_key].empty?
1037
+ adapter.write(key, event[:content], expires_in: room_state.cache_time)
1038
+ end
1042
1039
 
1043
1040
  return unless room_handlers?
1044
1041
 
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MatrixSdk::Util
4
+ class StateEventCache
5
+ extend MatrixSdk::Extensions
6
+ extend MatrixSdk::Util::Tinycache
7
+ include Enumerable
8
+
9
+ attr_reader :room
10
+
11
+ attr_accessor :cache_time
12
+
13
+ ignore_inspect :client, :room, :tinycache_adapter
14
+
15
+ def initialize(room, cache_time: 30 * 60, **_params)
16
+ raise ArgumentError, 'Must be given a Room instance' unless room.is_a? MatrixSdk::Room
17
+
18
+ @room = room
19
+ @cache_time = cache_time
20
+ end
21
+
22
+ def client
23
+ @room.client
24
+ end
25
+
26
+ def reload!
27
+ tinycache_adapter.clear
28
+ end
29
+
30
+ def keys
31
+ tinycache_adapter.send(:cache).keys.map do |type|
32
+ real_type = type.split('|').first
33
+ state_key = type.split('|').last
34
+ state_key = nil if state_key == real_type
35
+
36
+ [real_type, state_key]
37
+ end
38
+ end
39
+
40
+ def values
41
+ keys.map { |key| tinycache_adapter.read(key) }
42
+ end
43
+
44
+ def size
45
+ keys.count
46
+ end
47
+
48
+ def key?(type, key = nil)
49
+ keys.key?("#{type}#{key ? "|#{key}" : ''}")
50
+ end
51
+
52
+ def expire(type, key = nil)
53
+ tinycache_adapter.expire("#{type}#{key ? "|#{key}" : ''}")
54
+ end
55
+
56
+ def each(live: false)
57
+ return to_enum(__method__, live: live) { keys.count } unless block_given?
58
+
59
+ keys.each do |type|
60
+ real_type = type.split('|').first
61
+ state_key = type.split('|').last
62
+ state_key = nil if state_key == real_type
63
+
64
+ v = live ? self[real_type, key: state_key] : tinycache_adapter.read(type)
65
+ # hash = v.hash
66
+ yield [real_type, state_key], v
67
+ # self[key] = v if hash != v.hash
68
+ end
69
+ end
70
+
71
+ def delete(type, key = nil)
72
+ type = type.to_s unless type.is_a? String
73
+ client.api.set_room_state(room.id, type, {}, **{ state_key: key }.compact)
74
+ tinycache_adapter.delete("#{type}#{key ? "|#{key}" : ''}")
75
+ end
76
+
77
+ def [](type, key = nil)
78
+ type = type.to_s unless type.is_a? String
79
+ tinycache_adapter.fetch("#{type}#{key ? "|#{key}" : ''}", expires_in: @cache_time) do
80
+ client.api.get_room_state(room.id, type, **{ key: key }.compact)
81
+ rescue MatrixSdk::MatrixNotFoundError
82
+ {}
83
+ end
84
+ end
85
+
86
+ def []=(type, key = nil, value) # rubocop:disable Style/OptionalArguments Not possible to put optional last
87
+ type = type.to_s unless type.is_a? String
88
+ client.api.set_room_state(room.id, type, value, **{ state_key: key }.compact)
89
+ tinycache_adapter.write("#{type}#{key ? "|#{key}" : ''}", value)
90
+ end
91
+ end
92
+ end
@@ -76,24 +76,18 @@ module MatrixSdk::Util
76
76
  define_method(method_names[:with_cache]) do |*args|
77
77
  tinycache_adapter.fetch(__send__(method_names[:cache_key], *args), expires_in: expires_in) do
78
78
  named = args.delete_at(-1) if args.last.is_a? Hash
79
+ named ||= {}
79
80
 
80
- if named
81
- __send__(method_names[:without_cache], *args, **named)
82
- else
83
- __send__(method_names[:without_cache], *args)
84
- end
81
+ __send__(method_names[:without_cache], *args, **named)
85
82
  end
86
83
  end
87
84
 
88
85
  define_method(method_names[:without_cache]) do |*args|
89
86
  orig = method(method_name).super_method
90
87
  named = args.delete_at(-1) if args.last.is_a? Hash
88
+ named ||= {}
91
89
 
92
- if named
93
- orig.call(*args, **named)
94
- else
95
- orig.call(*args)
96
- end
90
+ orig.call(*args, **named)
97
91
  end
98
92
 
99
93
  define_method(method_names[:clear_cache]) do |*args|
@@ -58,6 +58,12 @@ module MatrixSdk::Util
58
58
  true
59
59
  end
60
60
 
61
+ def expire(key)
62
+ return unless exist? key
63
+
64
+ cache[key].expires_at = Time.at(0)
65
+ end
66
+
61
67
  def clear
62
68
  @cache = {}
63
69
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MatrixSdk
4
- VERSION = '2.7.0'
4
+ VERSION = '2.8.0'
5
5
  end
data/lib/matrix_sdk.rb CHANGED
@@ -38,6 +38,7 @@ module MatrixSdk
38
38
 
39
39
  module Util
40
40
  autoload :AccountDataCache, 'matrix_sdk/util/account_data_cache'
41
+ autoload :StateEventCache, 'matrix_sdk/util/state_event_cache'
41
42
  autoload :Tinycache, 'matrix_sdk/util/tinycache'
42
43
  autoload :TinycacheAdapter, 'matrix_sdk/util/tinycache_adapter'
43
44
  end
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: 2.7.0
4
+ version: 2.8.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: 2022-08-12 00:00:00.000000000 Z
11
+ date: 2022-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mocha
@@ -113,6 +113,7 @@ files:
113
113
  - lib/matrix_sdk/util/account_data_cache.rb
114
114
  - lib/matrix_sdk/util/events.rb
115
115
  - lib/matrix_sdk/util/extensions.rb
116
+ - lib/matrix_sdk/util/state_event_cache.rb
116
117
  - lib/matrix_sdk/util/tinycache.rb
117
118
  - lib/matrix_sdk/util/tinycache_adapter.rb
118
119
  - lib/matrix_sdk/util/uri.rb