class Fencepost::Gate
Attributes
allow_array[R]
deny_array[R]
model[R]
model_list[R]
Public Class Methods
new(model_list, params)
click to toggle source
# File lib/fencepost/gate.rb, line 4 def initialize(model_list, params) @allow_array = [] @deny_array = [] @model_list = model_list @model = model end
Public Instance Methods
allow(*elements)
click to toggle source
# File lib/fencepost/gate.rb, line 17 def allow(*elements) @allow_array += elements self end
allow_permissions(perms)
click to toggle source
# File lib/fencepost/gate.rb, line 27 def allow_permissions(perms) hash_values(allow_array).each do |hash_value| perms = nested_operations(perms, hash_value, :+) end perms + scalar_values(allow_array) end
build_permits(model, permits_array)
click to toggle source
# File lib/fencepost/gate.rb, line 72 def build_permits(model, permits_array) model_attributes(model).each {|k| permits_array << k } model_nested_attributes(model).each do |nao, value| node = get_node(:nested_collection_name, nao) node = get_node(:demodulized_name, nao) if node.keys.size == 0 node = node.values[0] permits_array << {node[:nested_attributes_name] => build_permits(node[:model], [])} end permits_array end
deny(*elements)
click to toggle source
# File lib/fencepost/gate.rb, line 22 def deny(*elements) @deny_array += elements self end
deny_permissions(perms)
click to toggle source
# File lib/fencepost/gate.rb, line 34 def deny_permissions(perms) hash_values(deny_array).each do |hash_value| perms = nested_operations(perms, hash_value, :-) end perms - scalar_values(deny_array) end
get_node(key, value)
click to toggle source
# File lib/fencepost/gate.rb, line 91 def get_node(key, value) self.model_list.select {|k,v| v[key] == value} end
hash_values(arry)
click to toggle source
# File lib/fencepost/gate.rb, line 45 def hash_values(arry) arry.select{|x| x.is_a?(Hash)} end
model_attributes(model)
click to toggle source
# File lib/fencepost/gate.rb, line 83 def model_attributes(model) get_node(:model, model).values[0][:attributes] end
model_nested_attributes(model)
click to toggle source
# File lib/fencepost/gate.rb, line 87 def model_nested_attributes(model) get_node(:model, model).values[0][:nested_attributes_options] end
nested_operations(perms, hash, operator)
click to toggle source
# File lib/fencepost/gate.rb, line 49 def nested_operations(perms, hash, operator) perms.each do |perm| hash.each do |key, value| set_permission_value(perm, key, value, operator) end end end
open(params, key, model)
click to toggle source
# File lib/fencepost/gate.rb, line 11 def open(params, key, model) perms = deny_permissions(allow_permissions(build_permits(model, []))) params = params.permit!.to_h if params.respond_to?(:permit!) ActionController::Parameters.new(params).require(key).permit(perms) end
recurse_permissions(perm, key, value, operator)
click to toggle source
# File lib/fencepost/gate.rb, line 64 def recurse_permissions(perm, key, value, operator) hash_values(perm[key]).each do |pk| hash_values(value).each do |hk| set_permission_value(pk, hk.keys[0], hk.values[0], operator) end end end
scalar_values(arry)
click to toggle source
# File lib/fencepost/gate.rb, line 41 def scalar_values(arry) arry.select{|x| x.is_a?(String) || x.is_a?(Symbol)} end
set_permission_value(perm, key, value, operator)
click to toggle source
# File lib/fencepost/gate.rb, line 57 def set_permission_value(perm, key, value, operator) if perm.is_a?(Hash) && perm.keys.index(key) && perm[key].is_a?(Array) perm[key] = perm[key].send(operator, value) recurse_permissions(perm, key, value, operator) end end