]> source.dussan.org Git - redmine.git/commitdiff
Do not build a projects_by_role Hash that gets updated when accessing a key that...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 27 Aug 2012 10:11:20 +0000 (10:11 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 27 Aug 2012 10:11:20 +0000 (10:11 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10242 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/user.rb
test/unit/user_test.rb

index 9350fb95c64674539adddf31c472051702ebcbc0..73c8d6c5dcdacd0f724064308b296304c648c86b 100644 (file)
@@ -418,10 +418,13 @@ class User < Principal
   def projects_by_role
     return @projects_by_role if @projects_by_role
 
-    @projects_by_role = Hash.new {|h,k| h[k]=[]}
+    @projects_by_role = Hash.new([])
     memberships.each do |membership|
-      membership.roles.each do |role|
-        @projects_by_role[role] << membership.project if membership.project
+      if membership.project
+        membership.roles.each do |role|
+          @projects_by_role[role] = [] unless @projects_by_role.key?(role)
+          @projects_by_role[role] << membership.project
+        end
       end
     end
     @projects_by_role.each do |role, projects|
index 51a49de013534228bd78c0b0fd49fa28b5e3dd86..7b4dac7259db0611ea5a08e2204596a3274762cc 100644 (file)
@@ -744,6 +744,13 @@ class UserTest < ActiveSupport::TestCase
     assert_equal [2], user.projects_by_role[Role.find(2)].collect(&:id).sort
   end
 
+  def test_accessing_projects_by_role_with_no_projects_should_return_an_empty_array
+    user = User.find(2)
+    assert_equal [], user.projects_by_role[Role.find(3)]
+    # should not update the hash
+    assert_nil user.projects_by_role.values.detect(&:blank?)
+  end
+
   def test_projects_by_role_for_user_with_no_role
     user = User.generate!
     assert_equal({}, user.projects_by_role)