foalfetch/app/lib/search_scope.rb

39 lines
1,007 B
Ruby
Raw Normal View History

# 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