module Monarchy::ActsAsHierarchy::ClassMethods
Public Instance Methods
acts_as_hierarchy()
click to toggle source
# File lib/monarchy/acts_as_hierarchy.rb, line 8 def acts_as_hierarchy extend Monarchy::ActsAsHierarchy::SupportMethods self.table_name = 'monarchy_hierarchies' has_closure_tree dependent: :destroy include_relations include_scopes include_validators extend Monarchy::ActsAsHierarchy::ClassMethods include Monarchy::ActsAsHierarchy::InstanceMethods end
ancestors_for(hierarchies)
click to toggle source
# File lib/monarchy/acts_as_hierarchy.rb, line 53 def ancestors_for(hierarchies) check_argument_type(hierarchies) return none unless hierarchies unscoped.joins('INNER JOIN monarchy_hierarchy_hierarchies ON '\ 'monarchy_hierarchies.id = monarchy_hierarchy_hierarchies.ancestor_id') .where(monarchy_hierarchy_hierarchies: { descendant_id: hierarchies.select(:id) }) .where('monarchy_hierarchy_hierarchies.generations > 0') end
children_for(hierarchies)
click to toggle source
# File lib/monarchy/acts_as_hierarchy.rb, line 34 def children_for(hierarchies) check_argument_type(hierarchies) hierarchies ? unscoped.where(parent: hierarchies) : none end
descendants_for(hierarchies)
click to toggle source
# File lib/monarchy/acts_as_hierarchy.rb, line 48 def descendants_for(hierarchies) check_argument_type(hierarchies) hierarchies ? unscoped.with_ancestor(hierarchies) : none end
hierarchies_for(resources)
click to toggle source
# File lib/monarchy/acts_as_hierarchy.rb, line 29 def hierarchies_for(resources) check_argument_type(resources) resources ? unscoped.where(resource: resources) : none end
parents_for(hierarchies)
click to toggle source
# File lib/monarchy/acts_as_hierarchy.rb, line 39 def parents_for(hierarchies) check_argument_type(hierarchies) return none unless hierarchies unscoped.joins('INNER JOIN monarchy_hierarchies AS hierarchies_children ON '\ 'monarchy_hierarchies.id = hierarchies_children.parent_id') .where(hierarchies_children: { id: hierarchies }) end
Private Instance Methods
check_argument_type(argument)
click to toggle source
# File lib/monarchy/acts_as_hierarchy.rb, line 65 def check_argument_type(argument) condition = argument.nil? || argument.is_a?(ActiveRecord::Base) || argument.is_a?(ActiveRecord::Relation) raise(ArgumentError, 'Argument has to be ActiveRecord!') unless condition end