Pasos para refactorización
- EL MÁS IMPORTANTE: crear un test
- Hacer el código más rubi - pasar el test
- Hacer el código más rails -pasar el test
- Mover a un módulo
PD: Para ejecutar sólo el test de grupo: ruby -Itest test/unit/group_test.rb
it 'has recipients' do | |
group = create(:group) | |
owner = group.user | |
member = create(:user) | |
group.add_member(member, :member) | |
follower = create(:user) | |
group.add_member(follower, :follow) | |
admin = group.recipients('admin') | |
admin.size.must_equal 1 | |
admin.must_include owner | |
members = group.recipients('members') | |
members.size.must_equal 2 | |
members.must_include owner | |
members.must_include member | |
all = group.recipients | |
all.size.must_equal 3 | |
[owner, member, follower].each {|u| all.must_include u } | |
end |
Pasos para refactorización
PD: Para ejecutar sólo el test de grupo: ruby -Itest test/unit/group_test.rb
Continuará... |
def recipients(scope = 'all') | |
recipients = [] | |
if scope == 'all' | |
return self.users | |
elsif scope == 'members' | |
self.users.each do |user| | |
if self.member_level?(user, "member") | self.member_level?(user, "owner") | |
recipients << user | |
end | |
end | |
elsif scope == 'admin' | |
self.users.each do |user| | |
if self.member_level?(user, "owner") | |
recipients << user | |
end | |
end | |
end | |
recipients | |
end |
# Usar el método 'select' | |
def recipients(scope = 'all') | |
if scope == 'all' | |
self.users | |
elsif scope == 'members' | |
self.users.select do |user| | |
self.member_level?(user, "member") || self.member_level?(user, "owner") | |
end | |
elsif scope == 'admin' | |
self.users.select do |user| | |
self.member_level?(user, "owner") | |
end | |
else | |
[] | |
end | |
end |
def recipients(scope = 'all') | |
if scope == 'all' | |
users | |
elsif scope == 'members' | |
users.select {|u| member_level?(u, [:member, :owner]) } | |
elsif scope == 'admin' | |
self.users.select {|u| member_level?(u, :owner) } | |
else | |
[] | |
end | |
end |