class Mumukit::Auth::Permissions::Diff

Attributes

changes[RW]

Public Class Methods

diff(old_permissions, new_permissions) click to toggle source
# File lib/mumuki/classroom/permissions_diff.rb, line 66
def self.diff(old_permissions, new_permissions)
  return Mumukit::Auth::Permissions::Diff.new if new_permissions.nil?

  old_permissions = old_permissions.to_mumukit_permissions
  new_permissions = new_permissions.to_mumukit_permissions
  new.tap do |it|
    Mumukit::Auth::Roles::ROLES.each do |role|
      it.compare_grants! role, old_permissions, new_permissions, :removed
      it.compare_grants! role, new_permissions, old_permissions, :added
    end
  end
end
new() click to toggle source
# File lib/mumuki/classroom/permissions_diff.rb, line 47
def initialize
  @changes = []
end

Public Instance Methods

as_json(options = {}) click to toggle source
# File lib/mumuki/classroom/permissions_diff.rb, line 79
def as_json(options = {})
  {changes: @changes}.as_json options
end
changes_by_organization() click to toggle source
# File lib/mumuki/classroom/permissions_diff.rb, line 51
def changes_by_organization
  changes.group_by(&:organization).with_indifferent_access
end
compare_grants!(role, some_permissions, another_permissions, change_type) click to toggle source
# File lib/mumuki/classroom/permissions_diff.rb, line 59
def compare_grants!(role, some_permissions, another_permissions, change_type)
  some_permissions
    .grants_for(role)
    .select { |grant| !another_permissions.role_allows?(role, grant) }
    .each { |grant| changes << Change.new(role, grant, change_type) }
end
empty?() click to toggle source
# File lib/mumuki/classroom/permissions_diff.rb, line 55
def empty?
  changes.empty?
end