Sha256: 75daf1feb58061ef6b82d72b5e2003dd2d7da9d84d90a8c4ab2c7383ce398cc5

Contents?: true

Size: 1.4 KB

Versions: 3

Compression:

Stored size: 1.4 KB

Contents

class Tag < ActiveRecord::Base
  include ActsAsTaggableOn::ActiveRecord::Backports if ActiveRecord::VERSION::MAJOR < 3
  
  attr_accessible :name

  ### ASSOCIATIONS:

  has_many :taggings, :dependent => :destroy

  ### VALIDATIONS:

  validates_presence_of :name
  validates_uniqueness_of :name, :scope => :store_id

  ### SCOPES:

  def self.named(name)
    where(["name LIKE ?", name])
  end
  
  def self.named_any(list)
    where(list.map { |tag| sanitize_sql(["name LIKE ?", tag.to_s]) }.join(" OR "))
  end
  
  def self.named_like(name)
    where(["name LIKE ?", "%#{name}%"])
  end

  def self.named_like_any(list)
    where(list.map { |tag| sanitize_sql(["name LIKE ?", "%#{tag.to_s}%"]) }.join(" OR "))
  end

  ### CLASS METHODS:

  def self.find_or_create_with_like_by_name(name)
    named_like(name).first || create(:name => name)
  end

  def self.find_or_create_all_with_like_by_name(*list)
    list = [list].flatten

    return [] if list.empty?

    existing_tags = Tag.named_any(list).all
    new_tag_names = list.reject { |name| existing_tags.any? { |tag| tag.name.mb_chars.downcase == name.mb_chars.downcase } }
    created_tags  = new_tag_names.map { |name| Tag.create(:name => name) }

    existing_tags + created_tags
  end

  ### INSTANCE METHODS:

  def ==(object)
    super || (object.is_a?(Tag) && name == object.name)
  end

  def to_s
    name
  end

  def count
    read_attribute(:count).to_i
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
axtro-acts-as-taggable-on-2.0.6 lib/acts_as_taggable_on/tag.rb
axtro-acts-as-taggable-on-2.0.5 lib/acts_as_taggable_on/tag.rb
axtro-acts-as-taggable-on-2.0.4 lib/acts_as_taggable_on/tag.rb