Sha256: a25abe2e4f506f32f06033dcbe9d9e8e69470756fb57ad0171449d2ebfe3d77f

Contents?: true

Size: 717 Bytes

Versions: 1

Compression:

Stored size: 717 Bytes

Contents

class Tag < ActiveRecord::Base
  class << self
    def find_or_initialize_with_name_like_and_kind(name, kind)
      name = normalize(name)
      with_name_like_and_kind(name, kind).first || new(:name => name, :kind => kind)
    end

    def normalize(name)
      name.gsub(/\s+/, ' ').strip
    end
  end

  has_many :taggings, :dependent => :destroy

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

  named_scope :with_name_like_and_kind, lambda { |name, kind| { :conditions => ["name like ? AND kind = ?", name, kind] } }
  named_scope :of_kind,                 lambda { |kind| { :conditions => {:kind => kind} } }
  
  def name=(name)
    super self.class.normalize(name)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
martinemde-is_taggable-0.2.0 lib/tag.rb