Skip to content

Commit

Permalink
Merge pull request #10 from fnordfish/master
Browse files Browse the repository at this point in the history
Fix setting last_seen_at_attribute to non-default name
  • Loading branch information
brunoocasali authored Oct 1, 2021
2 parents e683e9b + de88449 commit 4ac7707
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/devise_last_seen/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module Lastseenable
def track_last_seen!
return if new_record?
return unless respond_to?(last_seen_at_attribute_writer)
return unless last_seen.to_i < (Time.now - Devise.last_seen_at_interval).to_i
return unless public_send(Devise.last_seen_at_attribute).to_i < (Time.now - Devise.last_seen_at_interval).to_i

public_send(last_seen_at_attribute_writer, DateTime.now)

Expand Down
47 changes: 47 additions & 0 deletions spec/devise_last_seen/model_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,24 @@ def save(validate: nil)
end
end

class ResourceNonDefaultAttribute
extend ::ActiveModel::Callbacks
include ::ActiveModel::Validations::Callbacks
extend ::Devise::Models

devise :lastseenable

attr_accessor :last_seen_at

def new_record?
false
end

def save(validate: nil)
validate
end
end

RSpec.describe 'Devise model extension' do
subject(:model) { Resource.new }

Expand Down Expand Up @@ -60,4 +78,33 @@ def save(validate: nil)
end
end
end

context 'with non default attribute' do
subject(:model) { ResourceNonDefaultAttribute.new }

before { Devise.setup { |c| c.last_seen_at_attribute = :last_seen_at } }

after { Devise.setup { |c| c.last_seen_at_attribute = :last_seen } }

it 'calls save disabling validations' do
expect(model.track_last_seen!).to eq(false)
end

it 'assigns the current time to last_seen field' do
model.track_last_seen!

expect(model.last_seen_at).to be_within(1.second).of DateTime.now
end

context 'when time passed is lower than the interval' do
let(:time) { (Devise.last_seen_at_interval - 2.minutes).ago }

it 'does not change last_seen value' do
model.last_seen_at = time
model.track_last_seen!

expect(model.last_seen_at).to eq(time)
end
end
end
end

0 comments on commit 4ac7707

Please sign in to comment.