Added admin action to give ownership to authored mods to users

master
Zequez 2015-07-27 01:25:12 -03:00
parent 118d42b42d
commit e08502a324
3 changed files with 70 additions and 11 deletions

View File

@ -3,13 +3,17 @@ ActiveAdmin.register User do
controller do
def scoped_collection
User.includes(:owned_mods)
User.includes(:owned_mods, :authored_mods)
end
end
member_action :validate, method: :put do
resource.validate
resource.save!
resource.validate!
render json: {}
end
member_action :give_ownership, method: :put do
resource.give_ownership_of_authored!
render json: {}
end
@ -29,10 +33,17 @@ ActiveAdmin.register User do
column :owned_mods do |user|
user.owned_mods.map{ |m| link_to m.name, m }.join('<br/>').html_safe
end
column :authored_mods do |user|
user.owned_mods.map{ |m| link_to m.name, m }.join('<br/>').html_safe
end
column :validate do |user|
# Doesn't actually toggle, it's just a one way trip
toggler_status_tag validate_admin_user_path(user), user.is_dev
end
column :give_ownership do |user|
# Doesn't actually toggle, it's just a one way trip
toggler_status_tag validate_admin_user_path(user), user.is_dev
end
actions
end

View File

@ -54,14 +54,23 @@ class User < ActiveRecord::Base
### Methods
#################
def validate
owned_mods.each{ |om| om.visible = true } unless is_dev? or is_admin?
def validate!
owned_mods.each{ |om| om.update!(visible: true) } unless is_dev? or is_admin?
self.is_dev = true
save!
end
def give_ownership_of_authored!
authored_mods.each{ |am| am.update!(owner: self) unless am.owner.present? }
end
### Attributes
#################
def non_owned_authored_mods
authored_mods - owned_mods
end
def needs_validation?
!is_dev? and !is_admin? and owned_mods.any?
end

View File

@ -149,7 +149,7 @@ RSpec.describe User, :type => :model do
end
end
describe '#validate' do
describe '#validate!' do
it 'should set the user to #is_dev true and all his mods to visible and do nothing if the user is already dev' do
u1 = create :user, is_dev: false
u2 = create :user, is_dev: false
@ -157,9 +157,9 @@ RSpec.describe User, :type => :model do
create :mod, owner: u1, visible: false
create :mod, owner: u3, visible: false
create :mod, owner: u3, visible: false
u1.validate
u2.validate
u3.validate
u1.validate!
u2.validate!
u3.validate!
expect(u1.is_dev).to eq true
expect(u2.is_dev).to eq true
expect(u3.is_dev).to eq true
@ -171,7 +171,7 @@ RSpec.describe User, :type => :model do
it 'should not do anything for users with #is_dev true' do
user = create :user, is_dev: true
create :mod, owner: user, visible: false
user.validate
user.validate!
expect(user.is_dev).to eq true
expect(user.owned_mods[0].visible).to eq false
end
@ -179,9 +179,48 @@ RSpec.describe User, :type => :model do
it 'should only set #is_dev to true to admins but not change any mod visibility' do
user = create :user, is_dev: false, is_admin: true
create :mod, owner: user, visible: false
user.validate
user.validate!
expect(user.is_dev).to eq true
expect(user.owned_mods[0].visible).to eq false
end
end
describe '#give_ownership_of_authored!' do
it 'should set the user as owner of all his authored mods' do
user = create :user
m1 = create :mod, authors: [user], owner: nil
m2 = create :mod, authors: [user], owner: nil
user.reload
user.give_ownership_of_authored!
m1.reload
m2.reload
expect(m1.owner).to eq user
expect(m2.owner).to eq user
end
it 'should ignore mods that already have an owner' do
user = create :user
other_guy = create :user
m1 = create :mod, authors: [user], owner: other_guy
m2 = create :mod, authors: [user], owner: nil
user.reload
user.give_ownership_of_authored!
m1.reload
m2.reload
expect(m1.owner).to eq other_guy
expect(m2.owner).to eq user
end
end
describe '#non_owned_authored_mods' do
it 'should give the #authored_mods that arent #owned_mods' do
user = create :user
create :mod, authors: [user], owner: user
create :mod, owner: user
m1 = create :mod, authors: [user]
m2 = create :mod, authors: [user]
user.reload
expect(user.non_owned_authored_mods).to match_array [m1, m2]
end
end
end