Module: Monarchy::ActsAsHierarchy::ClassMethods

Defined in:
lib/monarchy/acts_as_hierarchy.rb,
lib/monarchy/acts_as_hierarchy.rb

Instance Method Summary collapse

Instance Method Details

#acts_as_hierarchyObject



8
9
10
11
12
13
14
15
16
17
18
19
# 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) ⇒ Object



53
54
55
56
57
58
59
60
61
# 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) ⇒ Object



34
35
36
37
# 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) ⇒ Object



48
49
50
51
# 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) ⇒ Object



29
30
31
32
# 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) ⇒ Object



39
40
41
42
43
44
45
46
# 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