Sha256: 003607073564223304e2ed3ec33a0b29ce4a9413693d0187c94a5273d1cd1b27

Contents?: true

Size: 1.81 KB

Versions: 3

Compression:

Stored size: 1.81 KB

Contents

module ActsAsTaggableOn
  module Taggable
    def taggable?
      false
    end

    ##
    # This is an alias for calling <tt>acts_as_taggable_on :tags</tt>.
    #
    # Example:
    #   class Book < ActiveRecord::Base
    #     acts_as_taggable
    #   end
    def acts_as_taggable
      acts_as_taggable_on :tags
    end

    ##
    # Make a model taggable on specified contexts.
    #
    # @param [Array] tag_types An array of taggable contexts
    #
    # Example:
    #   class User < ActiveRecord::Base
    #     acts_as_taggable_on :languages, :skills
    #   end
    def acts_as_taggable_on(*tag_types)
      tag_types = tag_types.to_a.flatten.compact.map(&:to_sym)

      if taggable?
        if RAILS_3
          self.tag_types = (self.tag_types + tag_types).uniq        
        else
          write_inheritable_attribute(:tag_types, (self.tag_types + tag_types).uniq)                  
        end
      else
        if RAILS_3
          class_attribute :tag_types
          self.tag_types = tag_types
        else
          write_inheritable_attribute(:tag_types, tag_types)
          class_inheritable_reader(:tag_types)
        end
        
        class_eval do
          has_many :taggings, :as => :taggable, :dependent => :destroy, :include => :tag, :class_name => "ActsAsTaggableOn::Tagging"
          has_many :base_tags, :through => :taggings, :source => :tag, :class_name => "ActsAsTaggableOn::Tag"

          def self.taggable?
            true
          end
          
          include ActsAsTaggableOn::Utils        
          include ActsAsTaggableOn::Taggable::Core
          include ActsAsTaggableOn::Taggable::Collection
          include ActsAsTaggableOn::Taggable::Cache
          include ActsAsTaggableOn::Taggable::Ownership
          include ActsAsTaggableOn::Taggable::Related
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
rylwin-acts-as-taggable-on-2.1.1a lib/acts_as_taggable_on/taggable.rb
acts-as-taggable-on-2.1.1 lib/acts_as_taggable_on/acts_as_taggable_on.rb
acts-as-taggable-on-2.1.0 lib/acts_as_taggable_on/acts_as_taggable_on.rb