Class: YummyGuide::Administrate::BrowserPreferenceStore

Inherits:
Object
  • Object
show all
Defined in:
lib/yummy_guide/administrate/browser_preference_store.rb

Defined Under Namespace

Classes: InvalidPreference, RedisUnavailable

Constant Summary collapse

TTL_SECONDS =
30 * 24 * 60 * 60
KEY_PREFIX =
"yummy_guide_administrate:admin_browser_preferences:v1"
MIN_NAVIGATION_WIDTH =
25
MAX_NAVIGATION_WIDTH =
250
MIN_COLUMN_WIDTH =
48
MAX_COLUMN_WIDTH =
5000
MAX_SCOPE_LENGTH =
200
MAX_COLUMN_ID_LENGTH =
200

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(redis: nil, key_prefix: KEY_PREFIX) ⇒ BrowserPreferenceStore

Returns a new instance of BrowserPreferenceStore.



22
23
24
25
# File 'lib/yummy_guide/administrate/browser_preference_store.rb', line 22

def initialize(redis: nil, key_prefix: KEY_PREFIX)
  @redis = redis
  @key_prefix = key_prefix
end

Instance Attribute Details

#key_prefixObject (readonly)

Returns the value of attribute key_prefix.



20
21
22
# File 'lib/yummy_guide/administrate/browser_preference_store.rb', line 20

def key_prefix
  @key_prefix
end

#redisObject (readonly)

Returns the value of attribute redis.



20
21
22
# File 'lib/yummy_guide/administrate/browser_preference_store.rb', line 20

def redis
  @redis
end

Instance Method Details

#fetch(browser_id) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/yummy_guide/administrate/browser_preference_store.rb', line 27

def fetch(browser_id)
  return empty_state if browser_id.blank?

  with_redis do |client|
    raw_value = client.get(key_for(browser_id))
    client.expire(key_for(browser_id), TTL_SECONDS) if raw_value.present?
    normalize_state(parse_state(raw_value))
  end
rescue RedisUnavailable
  raise
rescue StandardError => e
  raise RedisUnavailable, e.message
end

#update(browser_id, attributes) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/yummy_guide/administrate/browser_preference_store.rb', line 41

def update(browser_id, attributes)
  raise InvalidPreference, "browser_id is required" if browser_id.blank?

  with_redis do |client|
    state = normalize_state(parse_state(client.get(key_for(browser_id))))
    apply_update(state, attributes.to_h)
    client.set(key_for(browser_id), JSON.generate(state), ex: TTL_SECONDS)
    state
  end
rescue InvalidPreference, RedisUnavailable
  raise
rescue StandardError => e
  raise RedisUnavailable, e.message
end