Class: Admission::Arbitration::RulesBuilder
- Inherits:
-
Object
- Object
- Admission::Arbitration::RulesBuilder
show all
- Defined in:
- lib/admission/arbitration.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(privilege_order) ⇒ RulesBuilder
Returns a new instance of RulesBuilder.
78
79
80
81
|
# File 'lib/admission/arbitration.rb', line 78
def initialize privilege_order
@rules = []
@privilege_order = privilege_order
end
|
Instance Attribute Details
#privilege_order ⇒ Object
Returns the value of attribute privilege_order.
76
77
78
|
# File 'lib/admission/arbitration.rb', line 76
def privilege_order
@privilege_order
end
|
Instance Method Details
#add_allowance_rule(actions, arbiter, **options) ⇒ Object
104
105
106
107
108
109
110
111
112
|
# File 'lib/admission/arbitration.rb', line 104
def add_allowance_rule actions, arbiter, **options
raise 'must be called within `privilege` block' unless @privilege
@rules << options.merge!(
privilege: @privilege,
actions: actions,
arbiter: arbiter
)
end
|
#allow(*actions, &block) ⇒ Object
90
91
92
93
|
# File 'lib/admission/arbitration.rb', line 90
def allow *actions, &block
raise "reserved action name #{Admission::ALL_ACTION}" if actions.include? Admission::ALL_ACTION
add_allowance_rule actions.flatten, (block || true)
end
|
#allow_all(&block) ⇒ Object
95
96
97
|
# File 'lib/admission/arbitration.rb', line 95
def allow_all &block
add_allowance_rule [Admission::ALL_ACTION], (block || true)
end
|
#create_index ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# File 'lib/admission/arbitration.rb', line 114
def create_index
index_instance = @rules.reduce Hash.new do |index, allowance|
privilege = allowance[:privilege]
actions = allowance[:actions]
arbiter = allowance[:arbiter]
actions.each do |action|
action_index = (index[action] ||= {})
action_index[privilege] = arbiter
end
index
end
index_instance.values.each &:freeze
index_instance.freeze
end
|
#forbid(*actions) ⇒ Object
99
100
101
102
|
# File 'lib/admission/arbitration.rb', line 99
def forbid *actions
raise "reserved action name #{Admission::ALL_ACTION}" if actions.include? Admission::ALL_ACTION
add_allowance_rule actions.flatten, :forbidden
end
|
#privilege(name, level = nil) ⇒ Object
83
84
85
86
87
88
|
# File 'lib/admission/arbitration.rb', line 83
def privilege name, level=nil
@privilege = privilege_order.get name, level
raise "no such privilege: #{name}#{Admission::Privilege::SEPARATOR}#{level}" unless @privilege
yield
@privilege = nil
end
|