Class: RailsBase::Admin::ActionCache

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/rails_base/admin/action_cache.rb

Constant Summary collapse

KEY_BASE =
'aac_user'
LAST_VIEWED_BASE =
'lv'
LV_TTL =
150.days
TTL_FOR_CACHE =
60.days
VALID_TIME_OBJECT =
[Time, DateTime, ActiveSupport::TimeWithZone]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeActionCache

Returns a new instance of ActionCache.



17
18
19
20
21
22
23
# File 'lib/rails_base/admin/action_cache.rb', line 17

def initialize
  url = RailsBase.config.redis.admin_action
  namespace = RailsBase.config.redis.admin_action_namespace
  client = Redis.new(url: url)
  @redis = Redis::Namespace.new(namespace, redis_url: client)
  @logger = Rails.logger
end

Instance Attribute Details

#redisObject (readonly)

Returns the value of attribute redis.



15
16
17
# File 'lib/rails_base/admin/action_cache.rb', line 15

def redis
  @redis
end

Instance Method Details

#actions_since(user:, alltime: false, time: nil) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rails_base/admin/action_cache.rb', line 35

def actions_since(user:, alltime: false, time: nil)
  score =
    if alltime
      0
    else
      valid_time!(time)
      score = time.to_f
    end

  validate_user!(user)
  max_score = Time.now.to_f
  @logger.info { "Retrieving Redis Cache Admin actions for #{key(user)} since #{time}" }

  redis.zrangebyscore(key(user), score, max_score, with_scores: true)
end

#add_action(user:, msg:, occured:) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/rails_base/admin/action_cache.rb', line 25

def add_action(user:, msg:, occured:)
  validate!(user, msg, occured)

  score = occured.to_f
  @logger.info { "Adding Redis Cache Admin actions for #{key(user)}" }

  redis.zadd(key(user), score, msg)
  redis.expire(key(user), TTL_FOR_CACHE.to_i)
end

#delete_actions_since!(user:, time:) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/rails_base/admin/action_cache.rb', line 51

def delete_actions_since!(user:, time:)
  valid_time!(time)
  validate_user!(user)

  score = time.to_f
  redis.zremrangebyscore(key(user), 0, score)
  @logger.info { "Deleted Redis Cache Admin actions for #{key(user)}" }
  true
end

#get_last_viewed(user:) ⇒ Object



68
69
70
71
72
# File 'lib/rails_base/admin/action_cache.rb', line 68

def get_last_viewed(user:)
  validate_user!(user)

  redis.get(key_last_viewed(user))
end

#update_last_viewed(user:, time: Time.zone.now) ⇒ Object



61
62
63
64
65
66
# File 'lib/rails_base/admin/action_cache.rb', line 61

def update_last_viewed(user:, time: Time.zone.now)
  valid_time!(time)
  validate_user!(user)

  redis.set(key_last_viewed(user), time.to_f, ex: LV_TTL)
end