mirror of
https://github.com/Neetpone/foalfetch.git
synced 2025-02-08 18:06:43 +01:00
38 lines
1,007 B
Ruby
38 lines
1,007 B
Ruby
# frozen_string_literal: true
|
|
class SearchScope
|
|
attr_reader :search_params, :scope_key, :scope_loaded
|
|
|
|
def initialize(params, search_params = nil)
|
|
@scope_key = SecureRandom.hex 16
|
|
@scope_loaded = false
|
|
|
|
if search_params
|
|
@search_params = search_params
|
|
self.persist
|
|
elsif params
|
|
self.load_from_params(params)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def load_from_params(params)
|
|
if params[:scope].present?
|
|
result = $redis.get("search_scope/#{params[:scope]}")
|
|
if result.present?
|
|
@search_params = JSON.parse(result, symbolize_names: true)
|
|
@scope_key = params[:scope]
|
|
@scope_loaded = true
|
|
self.persist # refresh the expiry
|
|
end
|
|
else
|
|
@search_params = params.permit!.to_h.symbolize_keys
|
|
self.persist
|
|
end
|
|
end
|
|
|
|
def persist
|
|
# Nice long expiry so nobody's search disappears if they don't touch it for awhile.
|
|
$redis.setex("search_scope/#{@scope_key}", 1.day.in_seconds, JSON.dump(@search_params))
|
|
end
|
|
end
|