Module: Parentry::InstanceMethods

Defined in:
lib/parentry/instance_methods.rb

Instance Method Summary collapse

Instance Method Details

#assign_parentryObject



16
17
18
# File 'lib/parentry/instance_methods.rb', line 16

def assign_parentry
  write_attribute(parentry_column, compute_parentry)
end

#cache_parentry_depthObject



20
21
22
# File 'lib/parentry/instance_methods.rb', line 20

def cache_parentry_depth
  update_column(:parentry_depth, depth)
end

#cascade_parentryObject



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/parentry/instance_methods.rb', line 24

def cascade_parentry
  old_path, new_path = changes[parentry_column]
  parentry_scope.where(
    ["#{parentry_column} <@ :ltree AND id != :id", ltree: old_path, id: id]
  ).update_all(
    [
      "#{parentry_column} = :new_path || subpath(#{parentry_column}, nlevel(:old_path))",
      new_path: new_path, old_path: old_path
    ]
  )
end

#commit_parentryObject



12
13
14
# File 'lib/parentry/instance_methods.rb', line 12

def commit_parentry
  update_column(parentry_column, compute_parentry)
end

#compute_parentryObject



36
37
38
# File 'lib/parentry/instance_methods.rb', line 36

def compute_parentry
  parent.present? ? "#{parent.parentry}.#{id}" : "#{id}"
end

#parentryObject



40
41
42
# File 'lib/parentry/instance_methods.rb', line 40

def parentry
  read_attribute(parentry_column)
end

#parentry_scopeObject



3
4
5
# File 'lib/parentry/instance_methods.rb', line 3

def parentry_scope
  self.class.base_class
end

#prevent_circular_parentryObject



7
8
9
10
# File 'lib/parentry/instance_methods.rb', line 7

def prevent_circular_parentry
  computed = compute_parentry
  errors.add(:parentry, 'contains a circular reference') unless computed.split('.').uniq == computed.split('.')
end