26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/admission/visualisation.rb', line 26
def self.admission_data_to_js order:, rules:, arbitrator:, **_
js_data = {}
top_levels = []
privileges = order.values.inject Array.new do |arr, levels|
tops, others = levels.to_a.partition{|key, _| key == :'^'}
tops.first[1].tap{|privilege| top_levels << privilege.text_key}
others.each do |_, privilege|
arr << {name: privilege.name, level: privilege.level,
inherits: privilege.inherited && privilege.inherited.map(&:text_key)}
end
arr
end
js_data[:top_levels] = top_levels
js_data[:privileges] = privileges
rules = if arbitrator == Admission::Arbitration
rules.to_a.map do |scope, index|
index = index.to_a.map do |privilege, rule|
if rule.is_a? Proc
rule = 'proc'
end
[privilege.text_key, rule]
end
[scope, Hash[index]]
end
else
raise "not implemented for #{arbitrator.name}"
end
js_data[:rules] = Hash[rules]
js_data
end
|