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 |