Module: Authlogic::Session::Scopes::ClassMethods

Defined in:
lib/authlogic/session/scopes.rb

Overview

Scopes

Instance Method Summary collapse

Instance Method Details

#scopeObject

The current scope set, should be used in the block passed to with_scope.



24
25
26
# File 'lib/authlogic/session/scopes.rb', line 24

def scope
  RequestStore.store[:authlogic_scope]
end

#with_scope(options = {}) ⇒ Object

What with_scopes focuses on is scoping the query when finding the object and the name of the cookie / session. It works very similar to ActiveRecord::Base#with_scopes. It accepts a hash with any of the following options:

  • find_options: any options you can pass into ActiveRecord::Base.find. This is used when trying to find the record.

  • id: The id of the session, this gets merged with the real id. For information ids see the id method.

Here is how you use it:

“‘ UserSession.with_scope(find_options: “account_id = 2”, id: “account_2”) do

UserSession.find

end “‘

Essentially what the above does is scope the searching of the object with the sql you provided. So instead of:

“‘ User.where(“login = ’ben’”).first “‘

it would be:

“‘ User.where(“login = ’ben’ and account_id = 2”).first “‘

You will also notice the :id option. This works just like the id method. It scopes your cookies. So the name of your cookie will be:


instead of:

user_credentials

What is also nifty about scoping with an :id is that it merges your id’s. So if you do:

UserSession.with_scope(
  find_options: { conditions: "account_id = 2"},
  id: "account_2"
) do
  session = UserSession.new
  session.id = :secure
end

The name of your cookies will be:


Raises:

  • (ArgumentError)


82
83
84
85
86
87
88
# File 'lib/authlogic/session/scopes.rb', line 82

def with_scope(options = {})
  raise ArgumentError.new("You must provide a block") unless block_given?
  self.scope = options
  result = yield
  self.scope = nil
  result
end