ruby on rails - Devise `find_first_by_auth_conditions` method explanation -


my 2 methods using devise:

method1

def self.find_first_by_auth_conditions(warden_conditions)   conditions = warden_conditions.dup   where(conditions).where(["lower(username) = :value or lower(email)     = :value", {:value => signin.downcase }]).first end 

method2

def self.find_for_database_authentication(warden_conditions)   conditions = warden_conditions.dup   login = conditions.delete(:signin)   where(conditions).where(["lower(username) = :value or lower(email) =      :value", {:value => login.strip.downcase }]).first end 

my questions:

  1. what code perform/do? login = conditions.delete(:signin)
  2. without above code error undefined local variable or method signin

the following answers question 1)—specifically a) , b) below. following code example , not mirror actual methods or arguments generated devise:

here: hash contains :signin key-value pair , other valid activerecord's #where syntax http://api.rubyonrails.org/classes/activerecord/querymethods.html#method-i-where

devise_conditions = {:signin => "cool@gmail.com", :deleted => false, :role => 'basic'}  #=> {:signin=>"cool@gmail.com", :deleted => false, :role => 'basic'}  

this duplicates original argument prevent modification in order use in subsequent methods or queries http://ruby-doc.org/core-1.9.3/object.html#method-i-dup

conditions = devise_conditions.dup  #=> {:signin=>"cool@gmail.com", :deleted => false, :role => 'basic'} 

here, code: a) deletes :signin key-pair hash; , b) assigns new variable signin value of :signin key-pair hash http://www.ruby-doc.org/core-1.9.3/hash.html#method-i-delete

signin = conditions.delete(:signin)  #=> "cool@gmail.com"  

the above code rewritten clarify both operations using additional "element reference" of hash http://www.ruby-doc.org/core-1.9.3/hash.html#method-i-5b-5d

signin = conditions[:signin] #=> "cool@gmail.com"  conditions.delete(:signin) #=> "cool@gmail.com" # deleted value hash returned  conditions #=> {:deleted => false, :role => 'basic'}  

the method's original argument has been preserved using dup

devise_conditions  #=> {:signin=>"cool@gmail.com", :deleted => false, :role => 'basic'} 

the following answers question 2):

method1 not create variable signin. undefined local variable or method signin results no signin variable being created when code creates removed.

method2 creates variable login has value original hash named conditions key :signin.


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -