Sha256: 15fd6b4e5fb93429c62ef195c7eaa06fa9ff2c72698fb2c6db85e4df4f2e2adb
Contents?: true
Size: 1.31 KB
Versions: 24
Compression:
Stored size: 1.31 KB
Contents
# ActsAsTokened # # Implements rails 5 has_secure_token # Extends the find() method to work with tokens instead of ids. Prevents enumeration of this resource. module ActsAsTokened extend ActiveSupport::Concern module Base def acts_as_tokened(options = nil) include ::ActsAsTokened end end included do has_secure_token # Will always be 24-digits long extend FinderMethods end module ClassMethods def relation super.tap { |relation| relation.extend(FinderMethods) } end end module FinderMethods def find(*args) return super unless args.length == 1 return super if block_given? return find_by_id(args.first) if @_effective_reloading find_by_token(args.first) || raise(::ActiveRecord::RecordNotFound.new("Couldn't find #{name} with 'token'=#{args.first}")) end end # Instance Methods def to_param token end def to_global_id(**params) params[:tenant] = Tenant.current if defined?(Tenant) GlobalID.new(URI::GID.build(app: Rails.application.config.global_id.app, model_name: model_name, model_id: to_param, params: params)) end def reload(options = nil) self.class.instance_variable_set(:@_effective_reloading, true) retval = super self.class.instance_variable_set(:@_effective_reloading, nil) retval end end
Version data entries
24 entries across 24 versions & 1 rubygems