module Monarchy::ActsAsResource::InstanceMethods

Public Instance Methods

accessible_for(user, options = {}) click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 102
def accessible_for(user, options = {})
  Monarchy::Validators.user(user)
  hierarchy.accessible_for(user, options)
end
children() click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 83
def children
  @children ||= children_resources
end
children=(array) click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 87
def children=(array)
  hierarchy&.update(children: children_hierarchies(array))
  @children = array
end
ensure_hierarchy(force = false) click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 92
def ensure_hierarchy(force = false)
  return nil unless self.class.automatic_hierarchy || force

  self.hierarchy ||= Monarchy.hierarchy_class.create(
    resource: self,
    parent: parent.try(:hierarchy),
    children: children_hierarchies(children)
  )
end
parent() click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 73
def parent
  @parent = parent_resource || @parent
end
parent=(resource) click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 77
def parent=(resource)
  Monarchy::Validators.resource(resource, true)
  hierarchy&.update(parent: resource.try(:ensure_hierarchy))
  @parent = resource
end

Private Instance Methods

assign_parent(force = false) click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 109
def assign_parent(force = false)
  parentize = self.class.parentize_name
  return unless parentize

  keys = relation_keys(parentize)
  was_changed = saved_changes[keys[:foreign_key]] || saved_changes[keys[:foreign_type]]
  Monarchy::Validators.resource(send(parentize), true, false)
  self.parent = send(parentize) if was_changed || force
end
children_hierarchies(array) click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 136
def children_hierarchies(array)
  array&.compact!
  Array(array).map { |resource| Monarchy::Validators.resource(resource).hierarchy }
end
children_resources() click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 124
def children_resources
  resource_hierarchy = Monarchy.hierarchy_class.hierarchies_for(self)
  hierarchy_children = Monarchy.hierarchy_class.children_for(resource_hierarchy)
  hierarchy_children.includes(:resource).map(&:resource)
end
parent_resource() click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 130
def parent_resource
  resource_hierarchy = Monarchy.hierarchy_class.hierarchies_for(self)
  hierarchy_parent = Monarchy.hierarchy_class.parents_for(resource_hierarchy)
  hierarchy_parent.first&.resource
end
relation_keys(relation_name) click to toggle source
# File lib/monarchy/acts_as_resource.rb, line 119
def relation_keys(relation_name)
  reflection = self.class.reflections[relation_name.to_s]
  { foreign_key: reflection.foreign_key, foreign_type: reflection.foreign_type }
end