Sha256: e9ef9d1fc1a20ff51b5d5974fd44beb432942af21bab7ebca8e060d33b8df78a
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
class HaystackTag < BaseTag belongs_to :parent_tag, class_name: "HaystackTag", optional: true has_many :children, class_name: "HaystackTag", foreign_key: "parent_tag_id", dependent: :destroy, inverse_of: :parent_tag has_many :haystack_taggings, dependent: :destroy has_many :taggables, through: :haystack_taggings, source: :taggable validates :name, presence: true, uniqueness: true validates :description, presence: true validate :prevent_circular_reference def ancestors ancestors = [] current = self while current.parent_tag break if ancestors.include?(current.parent_tag) # Voorkom oneindige lus ancestors << current.parent_tag current = current.parent_tag end ancestors end def full_path ancestors.reverse.map(&:name).join(" > ") + " > " + name end def self.find_by_path(path) keys = path.split(".") current = nil keys.each do |key| current = current ? current.children.find_by(name: key) : find_by(name: key) return nil unless current end current end def descendants children + children.flat_map(&:descendants) end def siblings parent_tag ? parent_tag.children.where.not(id: id) : self.class.where(parent_tag_id: nil).where.not(id: id) end def root? parent_tag.nil? end def leaf? children.empty? end def depth ancestors.size end private def prevent_circular_reference if parent_tag == self || ancestors.include?(self) errors.add(:parent_tag, "kan geen circulaire referentie bevatten") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
needle_in_a_haystack-1.0.5 | lib/needle_in_a_haystack/models/haystack_tag.rb |