Class: DiscordRDA::EntityCache

Inherits:
Object
  • Object
show all
Defined in:
lib/discord_rda/cache/entity_cache.rb

Overview

Typed entity cache with automatic invalidation. Provides methods for caching and retrieving Discord entities.

Constant Summary collapse

TTL =

Entity TTLs in seconds

{
  user: 300,
  guild: 60,
  channel: 300,
  message: 60,
  role: 300,
  member: 120
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(store, logger: nil) ⇒ EntityCache

Initialize entity cache

Parameters:

  • store (CacheStore)

    Cache store instance

  • logger (Logger) (defaults to: nil)

    Logger instance



27
28
29
30
# File 'lib/discord_rda/cache/entity_cache.rb', line 27

def initialize(store, logger: nil)
  @store = store
  @logger = logger
end

Instance Attribute Details

#loggerLogger (readonly)

Returns Logger instance.

Returns:

  • (Logger)

    Logger instance



12
13
14
# File 'lib/discord_rda/cache/entity_cache.rb', line 12

def logger
  @logger
end

#storeCacheStore (readonly)

Returns Cache store.

Returns:

  • (CacheStore)

    Cache store



9
10
11
# File 'lib/discord_rda/cache/entity_cache.rb', line 9

def store
  @store
end

Instance Method Details

#cache_channel(channel) ⇒ void

This method returns an undefined value.

Cache a channel

Parameters:

  • channel (Channel)

    Channel to cache



63
64
65
# File 'lib/discord_rda/cache/entity_cache.rb', line 63

def cache_channel(channel)
  cache(:channel, channel.id, channel)
end

#cache_guild(guild) ⇒ void

This method returns an undefined value.

Cache a guild

Parameters:

  • guild (Guild)

    Guild to cache



49
50
51
# File 'lib/discord_rda/cache/entity_cache.rb', line 49

def cache_guild(guild)
  cache(:guild, guild.id, guild)
end

#cache_member(member, guild_id) ⇒ void

This method returns an undefined value.

Cache a member

Parameters:

  • member (Member)

    Member to cache

  • guild_id (String, Snowflake)

    Guild ID



106
107
108
109
# File 'lib/discord_rda/cache/entity_cache.rb', line 106

def cache_member(member, guild_id)
  key = "#{guild_id}:#{member.id}"
  cache(:member, key, member)
end

#cache_message(message) ⇒ void

This method returns an undefined value.

Cache a message

Parameters:

  • message (Message)

    Message to cache



77
78
79
# File 'lib/discord_rda/cache/entity_cache.rb', line 77

def cache_message(message)
  cache(:message, message.id, message)
end

#cache_role(role) ⇒ void

This method returns an undefined value.

Cache a role

Parameters:

  • role (Role)

    Role to cache



91
92
93
# File 'lib/discord_rda/cache/entity_cache.rb', line 91

def cache_role(role)
  cache(:role, role.id, role)
end

#cache_user(user) ⇒ void

This method returns an undefined value.

Cache a user

Parameters:

  • user (User)

    User to cache



35
36
37
# File 'lib/discord_rda/cache/entity_cache.rb', line 35

def cache_user(user)
  cache(:user, user.id, user)
end

#channel(channel_id) ⇒ Channel?

Get a cached channel

Parameters:

  • channel_id (String, Snowflake)

    Channel ID

Returns:

  • (Channel, nil)

    Cached channel



70
71
72
# File 'lib/discord_rda/cache/entity_cache.rb', line 70

def channel(channel_id)
  get(:channel, channel_id)
end

#clearvoid

This method returns an undefined value.

Clear all cached entities



155
156
157
158
# File 'lib/discord_rda/cache/entity_cache.rb', line 155

def clear
  @store.clear
  @logger&.info('Cleared entity cache')
end

#guild(guild_id) ⇒ Guild?

Get a cached guild

Parameters:

Returns:

  • (Guild, nil)

    Cached guild



56
57
58
# File 'lib/discord_rda/cache/entity_cache.rb', line 56

def guild(guild_id)
  get(:guild, guild_id)
end

#invalidate(type, id) ⇒ void

This method returns an undefined value.

Invalidate an entity

Parameters:

  • type (Symbol)

    Entity type

  • id (String, Snowflake)

    Entity ID



124
125
126
127
128
# File 'lib/discord_rda/cache/entity_cache.rb', line 124

def invalidate(type, id)
  key = build_key(type, id)
  @store.delete(key)
  @logger&.debug('Invalidated cache', type: type, id: id)
end

#invalidate_guild(guild_id) ⇒ void

This method returns an undefined value.

Invalidate by guild ID

Parameters:



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/discord_rda/cache/entity_cache.rb', line 133

def invalidate_guild(guild_id)
  guild_key = guild_id.to_s
  deleted_count = 0

  # Delete the guild itself
  @store.delete("guild:#{guild_key}")
  deleted_count += 1

  # Delete all members associated with this guild
  if @store.respond_to?(:keys)
    member_keys = @store.keys("member:#{guild_key}:*")
    member_keys.each do |key|
      @store.delete(key)
      deleted_count += 1
    end
  end

  @logger&.debug('Invalidated guild cache', guild_id: guild_id, deleted: deleted_count)
end

#member(user_id, guild_id) ⇒ Member?

Get a cached member

Parameters:

Returns:

  • (Member, nil)

    Cached member



115
116
117
118
# File 'lib/discord_rda/cache/entity_cache.rb', line 115

def member(user_id, guild_id)
  key = "#{guild_id}:#{user_id}"
  get(:member, key)
end

#message(message_id) ⇒ Message?

Get a cached message

Parameters:

  • message_id (String, Snowflake)

    Message ID

Returns:

  • (Message, nil)

    Cached message



84
85
86
# File 'lib/discord_rda/cache/entity_cache.rb', line 84

def message(message_id)
  get(:message, message_id)
end

#role(role_id) ⇒ Role?

Get a cached role

Parameters:

Returns:

  • (Role, nil)

    Cached role



98
99
100
# File 'lib/discord_rda/cache/entity_cache.rb', line 98

def role(role_id)
  get(:role, role_id)
end

#statsHash

Get cache statistics

Returns:

  • (Hash)

    Statistics



162
163
164
# File 'lib/discord_rda/cache/entity_cache.rb', line 162

def stats
  @store.respond_to?(:stats) ? @store.stats : {}
end

#user(user_id) ⇒ User?

Get a cached user

Parameters:

Returns:

  • (User, nil)

    Cached user



42
43
44
# File 'lib/discord_rda/cache/entity_cache.rb', line 42

def user(user_id)
  get(:user, user_id)
end