20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/thredded/users_provider.rb', line 20
def call(names, scope)
names_with_lowercase = names.zip(names.map(&:downcase))
cached = uncached = nil
result = @mutex.synchronize do
scope_cache = (@cache[scope.to_sql] ||= {})
cached, uncached = names_with_lowercase.partition { |(_, lowercase)| scope_cache.key?(lowercase) }
fetched = UsersProvider.call(uncached.map(&:first), scope)
fetched.each do |user|
scope_cache[user.send(Thredded.user_name_column).downcase] = user
end
cached.map { |(_, lowercase)| scope_cache[lowercase] }.concat(fetched)
end
result.uniq!
result.compact!
Rails.logger.info(
" [Thredded::UsersProviderWithCache] #{names.size} user names => #{result.size} users "\
"(#{cached.size} cached, #{uncached.size} uncached)"
)
result
end
|