Sha256: ed85488f533afb16653eb6328501381c837a5e348649dbe52bbf9817d233b541

Contents?: true

Size: 1.81 KB

Versions: 9

Compression:

Stored size: 1.81 KB

Contents

class Tag < ActiveRecord::Base
  has_and_belongs_to_many :articles, :order => 'created_at DESC'
  validates_uniqueness_of :name

  def self.get(name)
    tagname = name.tr(' ', '').downcase
    tag = find_by_name_or_display_name(tagname, name)
    if tag.nil?
      tag = Tag.create(:name => tagname, :display_name => name)
    end

    tag
  end

  def self.find_by_name_or_display_name(tagname, name)
    self.find(:first, :conditions => [%{name = ? OR display_name = ? OR display_name = ?}, tagname, tagname, name])
  end

  def self.find_by_name(name, *args)
    self.send(:method_missing, :find_by_name, name, *args) ||
      self.new(:name => name)
  end

  def ensure_naming_conventions
    if self.display_name.blank?
      self.display_name = self.name
    end
    self.name = self.name.tr(' ', '').downcase
  end

  before_save :ensure_naming_conventions

  def self.find_all_with_article_counters(limit = 20)
    # Only count published articles
    self.find_by_sql([%{
      SELECT tags.id, tags.name, tags.display_name, COUNT(articles_tags.article_id) AS article_counter
      FROM #{Tag.table_name} tags LEFT OUTER JOIN #{Tag.table_name_prefix}articles_tags#{Tag.table_name_suffix} articles_tags
        ON articles_tags.tag_id = tags.id
      LEFT OUTER JOIN #{Tag.table_name_prefix + Article.table_name + Tag.table_name_prefix} articles
        ON articles_tags.article_id = articles.id
      WHERE articles.published = ?
      GROUP BY tags.id, tags.name, tags.display_name
      ORDER BY article_counter DESC
      LIMIT ?
      },true, limit]).each{|item| item.article_counter = item.article_counter.to_i }
  end

  def self.find_by_permalink(*args)
    self.find_by_name(*args)
  end

  def self.to_prefix
    'tags'
  end

  def published_articles
    articles.find_already_published
  end

  def permalink
    self.name
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
typo-3.99.0 app/models/tag.rb
typo-3.99.2 app/models/tag.rb
typo-3.99.3 app/models/tag.rb
typo-3.99.1 app/models/tag.rb
typo-4.0.2 app/models/tag.rb
typo-4.0.0 app/models/tag.rb
typo-3.99.4 app/models/tag.rb
typo-4.0.1 app/models/tag.rb
typo-4.0.3 app/models/tag.rb