lib/kit/models/role.rb in rad_kit-0.0.8 vs lib/kit/models/role.rb in rad_kit-0.0.9
- old
+ new
@@ -2,87 +2,87 @@
ORDERED_ROLES = %w{manager member user}.freeze
SYSTEM_ROLES = %w{admin anonymous manager member owner registered user}.sort.freeze
PRESERVED_USER_NAMES = SYSTEM_ROLES
class << self
-
- def normalize_roles roles
+
+ def normalize_roles roles
ordinary_roles, ordered_roles = split roles
- ordinary_roles << lower_role(ordered_roles)
+ ordinary_roles << lower_role(ordered_roles)
ordinary_roles.sort
end
-
+
def denormalize_to_higher_roles roles
ordinary_roles, ordered_roles = split roles
ordinary_roles.push *higher_roles(lower_role(ordered_roles))
ordinary_roles.sort
end
-
+
def denormalize_to_lower_roles roles
ordinary_roles, ordered_roles = split roles
ordinary_roles.push *lower_roles(higher_role(ordered_roles))
ordinary_roles.sort
end
-
+
def higher_role roles
ORDERED_ROLES.each do |role|
return role if roles.include? role
end
nil
end
-
+
def lower_role roles
ORDERED_ROLES.reverse.each do |role|
return role if roles.include? role
end
nil
end
-
- def major_roles roles
+
+ def major_roles roles
major_roles = roles.select{|role| !SYSTEM_ROLES.include?(role)}
if higher_role = higher_role(roles)
major_roles << higher_role
end
major_roles.sort
end
-
+
def minor_roles roles
minor_roles = roles.select{|role| !SYSTEM_ROLES.include?(role)}
if lower_role = lower_role(roles)
minor_roles << lower_role
end
minor_roles.sort
end
-
+
protected
def split roles
ordinary_roles = []
ordered_roles = []
- roles.collect do |role|
+ roles.collect do |role|
if ORDERED_ROLES.include? role
ordered_roles << role
else
ordinary_roles << role
end
end
-
+
[ordinary_roles, ordered_roles]
end
-
+
def lower_roles role
return [] if role.nil?
-
+
role.must_be.in ORDERED_ROLES
index = ORDERED_ROLES.index role
ORDERED_ROLES[index..-1]
end
def higher_roles role
return [] if role.nil?
-
+
role.must_be.in ORDERED_ROLES
index = ORDERED_ROLES.index role
ORDERED_ROLES[0..index]
- end
+ end
end
end
\ No newline at end of file