Defect #28243 » principal.diff
app/models/principal.rb (working copy) | ||
---|---|---|
84 | 84 | |
85 | 85 |
# Principals that are members of a collection of projects |
86 | 86 |
scope :member_of, lambda {|projects| |
87 |
projects = [projects] if projects.is_a?(Project) |
|
88 |
if projects.blank? |
|
89 |
where("1=0") |
|
90 |
else |
|
91 |
ids = projects.map(&:id) |
|
92 |
active.where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids) |
|
93 |
end |
|
87 |
return where('1=0') if projects.blank? |
|
88 | ||
89 |
projects = [projects] unless projects.respond_to?(:map) |
|
90 |
ids = projects.map(&:id) |
|
91 |
active.where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids) |
|
94 | 92 |
} |
93 | ||
95 | 94 |
# Principals that are not members of projects |
96 | 95 |
scope :not_member_of, lambda {|projects| |
97 |
projects = [projects] unless projects.is_a?(Array) |
|
98 |
if projects.empty? |
|
99 |
where("1=0") |
|
100 |
else |
|
101 |
ids = projects.map(&:id) |
|
102 |
where("#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids) |
|
103 |
end |
|
96 |
return where('1=0') if projects.blank? |
|
97 | ||
98 |
projects = [projects] unless projects.respond_to?(:map) |
|
99 |
ids = projects.map(&:id) |
|
100 |
where("#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids) |
|
104 | 101 |
} |
105 |
scope :sorted, lambda { order(*Principal.fields_for_order_statement)} |
|
106 | 102 | |
103 |
scope :sorted, lambda { order(*Principal.fields_for_order_statement) } |
|
104 | ||
107 | 105 |
before_create :set_default_empty_values |
108 | 106 |
before_destroy :nullify_projects_default_assigned_to |
109 | 107 |
test/unit/principal_test.rb (working copy) | ||
---|---|---|
60 | 60 |
end |
61 | 61 | |
62 | 62 |
def test_member_of_scope_should_be_empty_for_no_projects |
63 |
assert_equal [], Principal.member_of([]).sort
|
|
63 |
assert_equal [], Principal.member_of([]) |
|
64 | 64 |
end |
65 | 65 | |
66 | 66 |
def test_not_member_of_scope_should_return_users_that_have_no_memberships |
... | ... | |
73 | 73 |
end |
74 | 74 | |
75 | 75 |
def test_not_member_of_scope_should_be_empty_for_no_projects |
76 |
assert_equal [], Principal.not_member_of([]).sort
|
|
76 |
assert_equal [], Principal.not_member_of([]) |
|
77 | 77 |
end |
78 | 78 | |
79 |
def test_that_not_member_of_scope_accepts_active_record_relation |
|
80 |
projects_relation = Project.where(:name => 'eCookbook') |
|
81 |
projects_array = projects_relation.to_a |
|
82 | ||
83 |
assert_nothing_raised do |
|
84 |
Principal.not_member_of(projects_relation) |
|
85 |
end |
|
86 |
assert_equal Principal.not_member_of(projects_array), |
|
87 |
Principal.not_member_of(projects_relation) |
|
88 |
end |
|
89 | ||
79 | 90 |
def test_sorted_scope_should_sort_users_before_groups |
80 | 91 |
scope = Principal.where(:type => ['User', 'Group']) |
81 | 92 |
users = scope.select {|p| p.is_a?(User)}.sort |