Class: Dbviewer::Database::CacheManager

Inherits:
Object
  • Object
show all
Defined in:
lib/dbviewer/database/cache_manager.rb

Overview

CacheManager handles caching concerns for the DatabaseManager It provides an abstraction layer for managing caches efficiently

Instance Method Summary collapse

Constructor Details

#initialize(cache_expiry = 300) ⇒ CacheManager

Initialize the cache manager

Parameters:

  • cache_expiry (Integer) (defaults to: 300)

    Cache expiration time in seconds (default: 300)



8
9
10
11
12
13
14
# File 'lib/dbviewer/database/cache_manager.rb', line 8

def initialize(cache_expiry = 300)
  @cache_expiry = cache_expiry
  @dynamic_models = {}
  @table_columns_cache = {}
  @table_metadata_cache = {}
  @cache_last_reset = Time.now
end

Instance Method Details

#clear_allObject

Clear all caches - useful when schema changes are detected



69
70
71
72
73
74
75
# File 'lib/dbviewer/database/cache_manager.rb', line 69

def clear_all
  @dynamic_models = {}
  @table_columns_cache = {}
  @table_metadata_cache = {}
  @cache_last_reset = Time.now
  Rails.logger.debug("[DBViewer] All caches cleared")
end

#get_columns(table_name) ⇒ Array<Hash>?

Get column information from cache

Parameters:

  • table_name (String)

    Name of the table

Returns:

  • (Array<Hash>, nil)

    The cached column information or nil if not found



33
34
35
# File 'lib/dbviewer/database/cache_manager.rb', line 33

def get_columns(table_name)
  @table_columns_cache[table_name]
end

#get_metadata(table_name) ⇒ Hash?

Get table metadata from cache

Parameters:

  • table_name (String)

    Name of the table

Returns:

  • (Hash, nil)

    The cached metadata or nil if not found



47
48
49
# File 'lib/dbviewer/database/cache_manager.rb', line 47

def (table_name)
  @table_metadata_cache[table_name]
end

#get_model(table_name) ⇒ Class?

Get a model from cache or return nil

Parameters:

  • table_name (String)

    Name of the table

Returns:

  • (Class, nil)

    The cached model or nil if not found



19
20
21
# File 'lib/dbviewer/database/cache_manager.rb', line 19

def get_model(table_name)
  @dynamic_models[table_name]
end

#reset_if_neededObject

Reset caches if they’ve been around too long



59
60
61
62
63
64
65
66
# File 'lib/dbviewer/database/cache_manager.rb', line 59

def reset_if_needed
  if Time.now - @cache_last_reset > @cache_expiry
    @table_columns_cache = {}
    @table_metadata_cache = {}
    @cache_last_reset = Time.now
    Rails.logger.debug("[DBViewer] Cache reset due to expiry after #{@cache_expiry} seconds")
  end
end

#store_columns(table_name, columns) ⇒ Object

Store column information in cache

Parameters:

  • table_name (String)

    Name of the table

  • columns (Array<Hash>)

    Column information



40
41
42
# File 'lib/dbviewer/database/cache_manager.rb', line 40

def store_columns(table_name, columns)
  @table_columns_cache[table_name] = columns
end

#store_metadata(table_name, metadata) ⇒ Object

Store table metadata in cache

Parameters:

  • table_name (String)

    Name of the table

  • metadata (Hash)

    Table metadata



54
55
56
# File 'lib/dbviewer/database/cache_manager.rb', line 54

def (table_name, )
  @table_metadata_cache[table_name] = 
end

#store_model(table_name, model) ⇒ Object

Store a model in the cache

Parameters:

  • table_name (String)

    Name of the table

  • model (Class)

    ActiveRecord model class



26
27
28
# File 'lib/dbviewer/database/cache_manager.rb', line 26

def store_model(table_name, model)
  @dynamic_models[table_name] = model
end