Skip to content

Commit

Permalink
fixing issue #90
Browse files Browse the repository at this point in the history
  • Loading branch information
NoamB committed Oct 21, 2011
1 parent 194bbf9 commit 0e169c1
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 11 deletions.
17 changes: 7 additions & 10 deletions lib/sorcery/controller/submodules/activity_logging.rb
Expand Up @@ -21,15 +21,15 @@ class << self
attr_accessor :register_last_activity_time

def merge_activity_logging_defaults!
@defaults.merge!(:@register_login_time => true,
:@register_logout_time => true,
@defaults.merge!(:@register_login_time => true,
:@register_logout_time => true,
:@register_last_activity_time => true)
end
end
merge_activity_logging_defaults!
end
Config.after_login << :register_login_time_to_db
Config.before_logout << :register_logout_time_to_db
Config.after_login << :register_login_time_to_db
Config.before_logout << :register_logout_time_to_db
base.after_filter :register_last_activity_time_to_db
end

Expand All @@ -52,25 +52,22 @@ def current_users
# This runs as a hook just after a successful login.
def register_login_time_to_db(user, credentials)
return unless Config.register_login_time
user.send(:"#{user.sorcery_config.last_login_at_attribute_name}=", Time.now.utc.to_s(:db))
user.save!(:validate => false)
user.update_attributes!(user.sorcery_config.last_login_at_attribute_name => Time.now.utc.to_s(:db))
end

# registers last logout time on every logout.
# This runs as a hook just before a logout.
def register_logout_time_to_db(user)
return unless Config.register_logout_time
user.send(:"#{user.sorcery_config.last_logout_at_attribute_name}=", Time.now.utc.to_s(:db))
user.save!(:validate => false)
user.update_attributes!(user.sorcery_config.last_logout_at_attribute_name => Time.now.utc.to_s(:db))
end

# Updates last activity time on every request.
# The only exception is logout - we do not update activity on logout
def register_last_activity_time_to_db
return unless Config.register_last_activity_time
return unless logged_in?
current_user.send(:"#{current_user.sorcery_config.last_activity_at_attribute_name}=", Time.now.utc.to_s(:db))
current_user.save!(:validate => false)
current_user.update_attributes!(current_user.sorcery_config.last_activity_at_attribute_name => Time.now.utc.to_s(:db))
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/sorcery/model/adapters/mongoid.rb
Expand Up @@ -41,7 +41,7 @@ def find_by_remember_me_token(token)

def find_by_username(username)
query = sorcery_config.username_attribute_names.map {|name| {name => username}}
where(query).first
any_of(*query).first
end

def transaction(&blk)
Expand Down
98 changes: 98 additions & 0 deletions spec/rails3_mongoid/spec/controller_activity_logging_spec.rb
@@ -0,0 +1,98 @@
# require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
#
# describe ApplicationController do
#
# # ----------------- ACTIVITY LOGGING -----------------------
# describe ApplicationController, "with activity logging features" do
# before(:all) do
# sorcery_reload!([:activity_logging])
# end
#
# before(:each) do
# create_new_user
# end
#
# after(:each) do
# User.delete_all
# end
#
# specify { subject.should respond_to(:current_users) }
#
# it "'current_users' should be empty when no users are logged in" do
# subject.current_users.size.should == 0
# end
#
# it "should log login time on login" do
# now = Time.now.utc
# login_user
# @user.last_login_at.should_not be_nil
# @user.last_login_at.to_s(:db).should >= now.to_s(:db)
# @user.last_login_at.to_s(:db).should <= (now+2).to_s(:db)
# end
#
# it "should log logout time on logout" do
# login_user
# now = Time.now.utc
# logout_user
# User.first.last_logout_at.should_not be_nil
# User.first.last_logout_at.to_s(:db).should >= now.to_s(:db)
# User.first.last_logout_at.to_s(:db).should <= (now+2).to_s(:db)
# end
#
# it "should log last activity time when logged in" do
# login_user
# now = Time.now.utc
# get :some_action
# User.first.last_activity_at.to_s(:db).should >= now.to_s(:db)
# User.first.last_activity_at.to_s(:db).should <= (now+2).to_s(:db)
# end
#
# it "'current_users' should hold the user object when 1 user is logged in" do
# login_user
# get :some_action
# subject.current_users.size.should == 1
# subject.current_users[0].should == @user
# end
#
# it "'current_users' should show all current_users, whether they have logged out before or not." do
# user1 = create_new_user({:username => 'gizmo1', :email => "bla1@bla.com", :password => 'secret1'})
# login_user(user1)
# get :some_action
# clear_user_without_logout
# user2 = create_new_user({:username => 'gizmo2', :email => "bla2@bla.com", :password => 'secret2'})
# login_user(user2)
# get :some_action
# clear_user_without_logout
# user3 = create_new_user({:username => 'gizmo3', :email => "bla3@bla.com", :password => 'secret3'})
# login_user(user3)
# get :some_action
# subject.current_users.size.should == 3
# subject.current_users[0].should == user1
# subject.current_users[1].should == user2
# subject.current_users[2].should == user3
# end
#
# it "should not register login time if configured so" do
# sorcery_controller_property_set(:register_login_time, false)
# now = Time.now.utc
# login_user
# @user.last_login_at.should be_nil
# end
#
# it "should not register logout time if configured so" do
# sorcery_controller_property_set(:register_logout_time, false)
# now = Time.now.utc
# login_user
# logout_user
# @user.last_logout_at.should be_nil
# end
#
# it "should not register last activity time if configured so" do
# sorcery_controller_property_set(:register_last_activity_time, false)
# now = Time.now.utc
# login_user
# get :some_action
# @user.last_activity_at.should be_nil
# end
# end
# end
24 changes: 24 additions & 0 deletions spec/rails3_mongoid/spec/user_spec.rb
Expand Up @@ -34,4 +34,28 @@ class SubUser < User
SubUser.fields.should include("blabla")
end
end

describe User, "mongoid adapter" do
before(:each) do
create_new_user
@user = User.first
end

after(:each) do
User.delete_all
end

it "find_by_username should work as expected" do
User.find_by_username("gizmo").should == @user
end

it "find_by_username should work as expected with multiple username attributes" do
sorcery_model_property_set(:username_attribute_names, [:username, :email])
User.find_by_username("gizmo").should == @user
end

it "find_by_email should work as expected" do
User.find_by_username("bla@bla.com").should == @user
end
end
end

0 comments on commit 0e169c1

Please sign in to comment.