Merge pull request #1188 from stephankaag/simplify_avatar_lookup
Simplify avatar lookup class
This commit is contained in:
commit
e57de7d4b9
|
@ -1,24 +1,19 @@
|
||||||
class AvatarLookup
|
class AvatarLookup
|
||||||
attr_accessor :user_ids, :users
|
|
||||||
|
|
||||||
def initialize(user_ids=[])
|
def initialize(user_ids=[])
|
||||||
self.user_ids = AvatarLookup.filtered_users(user_ids)
|
@user_ids = user_ids.tap(&:compact!).tap(&:uniq!)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Lookup a user by id
|
# Lookup a user by id
|
||||||
def [](user_id)
|
def [](user_id)
|
||||||
self.users = AvatarLookup.hashed_users(user_ids) if self.users.nil?
|
users[user_id]
|
||||||
self.users[user_id]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def self.filtered_users(user_ids=[])
|
|
||||||
user_ids.flatten.tap(&:compact!).tap(&:uniq!)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.hashed_users(user_ids=[])
|
def users
|
||||||
users = User.where(:id => user_ids).select([:id, :email, :username])
|
@users ||= User.where(:id => @user_ids).select([:id, :email, :username]).inject({}) do |hash, user|
|
||||||
users_with_ids = users.collect {|x| [x.id, x] }.flatten
|
hash.merge({user.id => user})
|
||||||
Hash[*users_with_ids]
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,26 +5,10 @@ require_dependency 'avatar_lookup'
|
||||||
|
|
||||||
describe AvatarLookup do
|
describe AvatarLookup do
|
||||||
let!(:user){ Fabricate(:user) }
|
let!(:user){ Fabricate(:user) }
|
||||||
user_ids = [1, 2]
|
|
||||||
|
|
||||||
describe '#new' do
|
|
||||||
before do
|
|
||||||
AvatarLookup.stubs(:filtered_users).once.returns(user_ids)
|
|
||||||
@avatar_lookup = AvatarLookup.new
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'init with cleaned user ids' do
|
|
||||||
@avatar_lookup.user_ids.should eq(user_ids)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'init users hash' do
|
|
||||||
@avatar_lookup.users.should eq(nil)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#[]' do
|
describe '#[]' do
|
||||||
before do
|
before do
|
||||||
@avatar_lookup = AvatarLookup.new([user.id])
|
@avatar_lookup = AvatarLookup.new([user.id, nil])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil if user_id does not exists' do
|
it 'returns nil if user_id does not exists' do
|
||||||
|
@ -39,40 +23,4 @@ describe AvatarLookup do
|
||||||
@avatar_lookup[user.id].should eq(user)
|
@avatar_lookup[user.id].should eq(user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '.filtered_users' do
|
|
||||||
it 'returns empty array if no params' do
|
|
||||||
AvatarLookup.filtered_users.should eq([])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns empty array' do
|
|
||||||
AvatarLookup.filtered_users([]).should eq([])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns filtered ids' do
|
|
||||||
AvatarLookup.filtered_users(user_ids).should eq(user_ids)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns flatten filtered ids' do
|
|
||||||
AvatarLookup.filtered_users([1, [2]]).should eq(user_ids)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns compact filtered ids' do
|
|
||||||
AvatarLookup.filtered_users([1, 2, nil]).should eq(user_ids)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns uniq filtered ids' do
|
|
||||||
AvatarLookup.filtered_users([1, 2, 2]).should eq(user_ids)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '.hashed_users' do
|
|
||||||
it 'returns empty hash if no params' do
|
|
||||||
AvatarLookup.hashed_users.should eq({})
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns hashed users by id' do
|
|
||||||
AvatarLookup.hashed_users([user.id]).should eq({user.id => user})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
Loading…
Reference in New Issue