Sha256: 7dfe15d980a6847c03bf5e6ef4bf9e0653e853800490d5a2fa58b23af2c8b0ae

Contents?: true

Size: 897 Bytes

Versions: 7

Compression:

Stored size: 897 Bytes

Contents

module Pulitzer
  class Tag < Pulitzer::ApplicationRecord
    has_many :post_tags, as: :label, dependent: :destroy, inverse_of: :label
    has_many :versions, through: :post_tags
    has_many :posts, through: :versions

    has_many :active_versions, -> { active }, through: :post_tags, source: :version
    has_many :active_posts, through: :active_versions, source: :post

    has_many :children, class_name: 'Pulitzer::Tag', dependent: :destroy, foreign_key: :parent_id
    belongs_to :parent, class_name: 'Pulitzer::Tag', touch: true

    validates :name, presence: true, uniqueness: true

    scope :hierarchical, -> { where hierarchical: true  }
    scope :flat,  -> { where hierarchical: false }
    scope :root,  -> { hierarchical.where(parent_id: nil) }

    def self.named(name = "")
      find_by name: name
    end

    def root?
      hierarchical? && parent_id.nil?
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pulitzer-0.15.19 app/models/pulitzer/tag.rb
pulitzer-0.15.18 app/models/pulitzer/tag.rb
pulitzer-0.15.17 app/models/pulitzer/tag.rb
pulitzer-0.15.16 app/models/pulitzer/tag.rb
pulitzer-0.15.15 app/models/pulitzer/tag.rb
pulitzer-0.15.14 app/models/pulitzer/tag.rb
pulitzer-0.15.13 app/models/pulitzer/tag.rb