matrix_sdk 2.7.0 → 2.8.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: 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