module RememberParams
Constants
- VERSION
Public Class Methods
remember_params(*params, on: :index, duration: 1.hour)
click to toggle source
# File lib/remember_params.rb, line 7 def self.remember_params(*params, on: :index, duration: 1.hour) on = on.to_s raise '[remember_params] must specify one or more params to remember' if params.empty? raise '[remember_params] param name remembered_at is reserved' if params.include? :remembered_at raise '[remember_params] \'for\' must be ActiveSupport::Duration' unless duration.is_a?(ActiveSupport::Duration) raise '[remember_params] \'for\' must be gte 1 second' unless duration >= 1.second cattr_accessor :remember_params_config self.remember_params_config ||= {} self.remember_params_config[on] = {} self.remember_params_config[on][:params] = params self.remember_params_config[on][:duration] = duration self.before_action :restore_or_save_params end
Public Instance Methods
restore_or_save_params()
click to toggle source
# File lib/remember_params.rb, line 29 def restore_or_save_params return unless request.get? return unless respond_to? :remember_params_config return unless config = self.remember_params_config[action_name] session[:remembered_params] ||= {} key = params.slice(:controller, :action).values.join('/').parameterize params_to_remember = params.permit(*config[:params]).to_h # Restore params if params_to_remember.empty? && session[:remembered_params][key]&.except('remembered_at')&.select{|_,v| v.present?}&.any? && DateTime.parse(session[:remembered_params][key]['remembered_at']) > (DateTime.now - config[:duration]) then redirect_to params: session[:remembered_params][key].except('remembered_at') end # Save params (also refreshes remembered_at after restore) if params_to_remember.any? params_to_remember['remembered_at'] = DateTime.now session[:remembered_params][key] = params_to_remember end end