pebblebed 0.0.50 → 0.0.51
Sign up to get free protection for your applications and to get access to all the features.
@@ -24,14 +24,6 @@ module Pebblebed
|
|
24
24
|
}
|
25
25
|
end
|
26
26
|
|
27
|
-
def missing_requirements_for_role(role)
|
28
|
-
roles = self.class.roles
|
29
|
-
current_role = roles.select {|r| r[:name] == @role[:name] }.first
|
30
|
-
for_role = roles.select {|r| role.to_sym == r[:name] }.first
|
31
|
-
raise UndefinedRole, "The role :#{role} is not defined." unless for_role
|
32
|
-
roles[roles.index(current_role)..roles.index(for_role)].map{|r| r[:requirements]}.flatten.uniq.compact
|
33
|
-
end
|
34
|
-
|
35
27
|
def self.requirements_for_role(role)
|
36
28
|
the_role = @roles.select {|r| r[:name] == role.to_sym }.first
|
37
29
|
raise UndefinedRole, "The role :#{role} is not defined." unless the_role
|
@@ -51,20 +43,20 @@ module Pebblebed
|
|
51
43
|
def find_current_role
|
52
44
|
the_role = begin
|
53
45
|
collected_roles = []
|
46
|
+
collected_requirements = []
|
54
47
|
self.class.roles.each do |role|
|
55
|
-
collected_capabilities = []
|
56
48
|
if role[:requirements].any?
|
57
49
|
role[:requirements].each do |requirement|
|
58
50
|
# Check based on implemented check-methods in the subclass.
|
59
51
|
begin
|
60
52
|
if __send__("check_#{requirement}".to_sym)
|
61
|
-
|
53
|
+
collected_requirements << requirement
|
62
54
|
end
|
63
55
|
rescue NoMethodError
|
64
56
|
raise NoMethodError, "You must implement method named :check_#{requirement} that returns true or false"
|
65
57
|
end
|
66
58
|
end
|
67
|
-
if (role[:requirements] &
|
59
|
+
if (role[:requirements] & collected_requirements) == role[:requirements]
|
68
60
|
the_role = role
|
69
61
|
collected_roles << role
|
70
62
|
end
|
@@ -74,7 +66,6 @@ module Pebblebed
|
|
74
66
|
end
|
75
67
|
end
|
76
68
|
owned_capabilities = collected_roles.map{|c| c[:capabilities]}.flatten.compact.uniq
|
77
|
-
owned_requirements = collected_roles.map{|c| c[:requirements]}.flatten.compact.uniq
|
78
69
|
all_capabilities = self.class.roles.map{|r| r[:capabilities]}.flatten.compact.uniq
|
79
70
|
the_role.merge!(:upgrades => begin
|
80
71
|
upgraders = {}
|
@@ -82,7 +73,7 @@ module Pebblebed
|
|
82
73
|
next if owned_capabilities.include?(c)
|
83
74
|
self.class.roles.select{|r| r[:capabilities].include?(c)}.each do |r|
|
84
75
|
upgraders[c] ||= []
|
85
|
-
upgraders[c] << r[:requirements] -
|
76
|
+
upgraders[c] << r[:requirements] - collected_requirements
|
86
77
|
upgraders[c].flatten!.uniq!
|
87
78
|
end
|
88
79
|
end
|
data/lib/pebblebed/version.rb
CHANGED
@@ -83,11 +83,6 @@ describe Pebblebed::Security::RoleSchema do
|
|
83
83
|
}.to raise_error(Pebblebed::Security::RoleSchema::UndefinedRole)
|
84
84
|
end
|
85
85
|
|
86
|
-
it "gives the missing requirements for current role compared to a role" do
|
87
|
-
schema.missing_requirements_for_role(:identified).should == [:logged_in]
|
88
|
-
schema.missing_requirements_for_role(:contributor).should == [:logged_in, :verified_mobile]
|
89
|
-
end
|
90
|
-
|
91
86
|
end
|
92
87
|
|
93
88
|
context "as guest" do
|
@@ -110,7 +105,7 @@ describe Pebblebed::Security::RoleSchema do
|
|
110
105
|
CustomRoleSchema.new(connector, contributor)
|
111
106
|
}
|
112
107
|
|
113
|
-
it "returns the idenitified role" do
|
108
|
+
it "returns the idenitified role with an upgrade for :verified_mobile only" do
|
114
109
|
schema.role.should == {:current=>:identified, :capabilities=>[:kudo], :upgrades=>{:comment=>[:verified_mobile]}}
|
115
110
|
end
|
116
111
|
|