Skip to content

Instantly share code, notes, and snippets.

@danigb
Created June 13, 2012 21:18
Show Gist options
  • Save danigb/2926559 to your computer and use it in GitHub Desktop.
Save danigb/2926559 to your computer and use it in GitHub Desktop.
Refactorizar el código
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

  1. EL MÁS IMPORTANTE: crear un test
  2. Hacer el código más rubi - pasar el test
  3. Hacer el código más rails -pasar el test
  4. Mover a un módulo

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment