class ViewModel::AccessControl::Tree::Node
Attributes
root_children_editable_ifs[R]
root_children_editable_unlesses[R]
root_children_visible_ifs[R]
root_children_visible_unlesses[R]
Public Class Methods
inherited(subclass)
click to toggle source
Calls superclass method
ViewModel::AccessControl::Composed::inherited
# File lib/view_model/access_control/tree.rb, line 152 def inherited(subclass) super subclass.initialize_as_node end
initialize_as_node()
click to toggle source
# File lib/view_model/access_control/tree.rb, line 157 def initialize_as_node @root = false @root_children_editable_ifs = [] @root_children_editable_unlesses = [] @root_children_visible_ifs = [] @root_children_visible_unlesses = [] end
inspect_checks()
click to toggle source
Calls superclass method
ViewModel::AccessControl::Composed::inspect_checks
# File lib/view_model/access_control/tree.rb, line 192 def inspect_checks checks = super if root? checks << 'no root checks' else checks << "root_children_visible_if: #{root_children_visible_ifs.map(&:reason)}" if root_children_visible_ifs.present? checks << "root_children_visible_unless: #{root_children_visible_unlesses.map(&:reason)}" if root_children_visible_unlesses.present? checks << "root_children_editable_if: #{root_children_editable_ifs.map(&:reason)}" if root_children_editable_ifs.present? checks << "root_children_editable_unless: #{root_children_editable_unlesses.map(&:reason)}" if root_children_editable_unlesses.present? end checks end
new(tree_access_control)
click to toggle source
Calls superclass method
ViewModel::AccessControl::new
# File lib/view_model/access_control/tree.rb, line 206 def initialize(tree_access_control) super() @tree_access_control = tree_access_control end
root?()
click to toggle source
# File lib/view_model/access_control/tree.rb, line 186 def root? @root end
Also aliased as: requires_root?
root_children_editable_if!(reason, &block)
click to toggle source
# File lib/view_model/access_control/tree.rb, line 176 def root_children_editable_if!(reason, &block) @root = true root_children_editable_ifs << new_permission_check(reason, &block) end
root_children_editable_unless!(reason, &block)
click to toggle source
# File lib/view_model/access_control/tree.rb, line 181 def root_children_editable_unless!(reason, &block) @root = true root_children_editable_unlesses << new_permission_check(reason, &block) end
root_children_visible_if!(reason, &block)
click to toggle source
# File lib/view_model/access_control/tree.rb, line 166 def root_children_visible_if!(reason, &block) @root = true root_children_visible_ifs << new_permission_check(reason, &block) end
root_children_visible_unless!(reason, &block)
click to toggle source
# File lib/view_model/access_control/tree.rb, line 171 def root_children_visible_unless!(reason, &block) @root = true root_children_visible_unlesses << new_permission_check(reason, &block) end
Public Instance Methods
editable_check(traversal_env)
click to toggle source
Calls superclass method
ViewModel::AccessControl::Composed#editable_check
# File lib/view_model/access_control/tree.rb, line 230 def editable_check(traversal_env) view = traversal_env.view deserialize_context = traversal_env.deserialize_context validate_root!(view, deserialize_context) if deserialize_context.root? save_root_editability!(traversal_env) super else root_editability = fetch_descendent_editability(deserialize_context.nearest_root_viewmodel) root_editability.merge { super } end end
visible_check(traversal_env)
click to toggle source
Calls superclass method
ViewModel::AccessControl::Composed#visible_check
# File lib/view_model/access_control/tree.rb, line 215 def visible_check(traversal_env) view = traversal_env.view context = traversal_env.context validate_root!(view, context) if context.root? save_root_visibility!(traversal_env) super else root_visibility = fetch_descendent_visibility(context.nearest_root_viewmodel) root_visibility.merge { super } end end
Private Instance Methods
save_root_editability!(traversal_env)
click to toggle source
# File lib/view_model/access_control/tree.rb, line 261 def save_root_editability!(traversal_env) result = check_delegates(traversal_env, self.class.each_check(:root_children_editable_ifs, ->(a) { a.is_a?(Node) }), self.class.each_check(:root_children_editable_unlesses, ->(a) { a.is_a?(Node) })) store_descendent_editability(traversal_env.view, result) end
save_root_visibility!(traversal_env)
click to toggle source
# File lib/view_model/access_control/tree.rb, line 253 def save_root_visibility!(traversal_env) result = check_delegates(traversal_env, self.class.each_check(:root_children_visible_ifs, ->(a) { a.is_a?(Node) }), self.class.each_check(:root_children_visible_unlesses, ->(a) { a.is_a?(Node) })) store_descendent_visibility(traversal_env.view, result) end
validate_root!(view, context)
click to toggle source
# File lib/view_model/access_control/tree.rb, line 247 def validate_root!(view, context) if self.class.requires_root? && !context.root? raise RuntimeError.new("AccessControl instance for #{view.class.view_name} node requires root context but was visited in owned context.") end end