class Arisaid::Usergroups
Public Class Methods
usergroup_valid_attributes()
click to toggle source
# File lib/arisaid/usergroups.rb, line 169 def usergroup_valid_attributes %i( name description handle ) end
Public Instance Methods
apply()
click to toggle source
# File lib/arisaid/usergroups.rb, line 32 def apply enabled = false local.each do |src| dst = remote.find_by(name: src['name']) next unless dst.nil? group = usergroups_with_disabled.find_by(name: src['name']) if group enable group enabled = true end end remote! if enabled if Arisaid.read_only? local.each do |src| dst = remote.find_by(name: src['name']) if dst.nil? puts "create usergroup: #{src['name']}" puts " + description: #{src['description']}" src['users'].flatten.each do |user| puts " + user #{user}" end next end next if same?(src, dst) if changed?(src, dst) || users_changed?(src, dst) puts "update usergroup: #{src['name']}" end if users_changed?(src, dst) add = src['users'].flatten.sort - dst['users'].flatten.sort delete = dst['users'].flatten.sort - src['users'].flatten.sort add.each do |u| puts " + user #{u}" end delete.each do |u| puts " - user #{u}" end end end remote.each do |dst| src = local.find_by(name: dst['name']) puts "disable #{dst['name']}" if src.nil? end end local.each do |src| dst = remote.find_by(name: src['name']) case when dst.nil? then create src when same?(src, dst) then nil when changed?(src, dst) then update(src) else usergroup = usergroups.find_by(name: src['name']) update_users(usergroup.id, src) end end if !(enabled && Arisaid.read_only?) remote.each do |dst| src = local.find_by(name: dst['name']) disable dst if src.nil? end nil end
changed?(src, dst)
click to toggle source
# File lib/arisaid/usergroups.rb, line 113 def changed?(src, dst) !same?(src, dst) && src['users'] == dst['users'] end
create(src)
click to toggle source
# File lib/arisaid/usergroups.rb, line 125 def create(src) group = client.create_usergroup( src.slice(*self.class.usergroup_valid_attributes.map(&:to_s))) update_users(group.id, src) if group.respond_to?(:id) end
description_changed?(src, dst)
click to toggle source
# File lib/arisaid/usergroups.rb, line 121 def description_changed?(src, dst) src['description'] != dst['description'] end
disable(dst)
click to toggle source
# File lib/arisaid/usergroups.rb, line 135 def disable(dst) group = usergroups.find_by(name: dst['name']) client.disable_usergroup(usergroup: group.id) end
enable(group)
click to toggle source
# File lib/arisaid/usergroups.rb, line 131 def enable(group) client.enable_usergroup(usergroup: group.id) end
remote!()
click to toggle source
# File lib/arisaid/usergroups.rb, line 24 def remote! @remote = usergroups!.map { |group| hash = group.to_h.slice(*self.class.usergroup_valid_attributes) hash[:users] = group.users ? group.users.map { |id| users.find_by(id: id).name } : {} hash.stringify_keys } end
same?(src, dst)
click to toggle source
# File lib/arisaid/usergroups.rb, line 106 def same?(src, dst) src['name'] == dst['name'] && src['description'] == dst['description'] && src['handle'] == dst['handle'] && src['users'].flatten.sort == dst['users'].flatten.sort end
update(src)
click to toggle source
# File lib/arisaid/usergroups.rb, line 140 def update(src) group = usergroups.find_by(name: src['name']) data = src.dup data['usergroup'] = group.id data.delete('users') unless data['users'].nil? client.update_usergroup(data) end
update_users(group_id, src)
click to toggle source
# File lib/arisaid/usergroups.rb, line 148 def update_users(group_id, src) data = { usergroup: group_id, users: usernames_to_ids(src['users']).join(',') } client.update_usergroup_users(data) end
usergroups()
click to toggle source
# File lib/arisaid/usergroups.rb, line 7 def usergroups @usergroups || usergroups! end
usergroups!()
click to toggle source
# File lib/arisaid/usergroups.rb, line 11 def usergroups! @usergroups = usergroups_with_disabled!.select { |g| g.deleted_by.nil? } end
usergroups_with_disabled()
click to toggle source
# File lib/arisaid/usergroups.rb, line 15 def usergroups_with_disabled @usergroups_with_disabled || usergroups_with_disabled! end
usergroups_with_disabled!()
click to toggle source
# File lib/arisaid/usergroups.rb, line 19 def usergroups_with_disabled! @usergroups_with_disabled = client.usergroups(include_users: 1, include_disabled: 1) end
usernames_to_ids(usernames)
click to toggle source
# File lib/arisaid/usergroups.rb, line 156 def usernames_to_ids(usernames) usernames.each.with_object([]) do |username, memo| user = users.find_by(name: username) if user memo << user.id else puts "#{'user not found:'.colorize(:red)} #{username}" Arisaid.exit_status = 1 end end end
users_changed?(src, dst)
click to toggle source
# File lib/arisaid/usergroups.rb, line 117 def users_changed?(src, dst) src['users'].flatten.sort != dst['users'].flatten.sort end