module SemanticallyTaggable::Taggable

Public Class Methods

taggable?() click to toggle source
# File lib/semantically_taggable/semantically_taggable.rb, line 30
def self.taggable?
  true
end

Public Instance Methods

semantically_taggable(*scheme_names) click to toggle source

Make a model taggable in a specified scheme.

@param [Array] scheme_names An array of taggable scheme names (must exist in Scheme model)

Example:

class User < ActiveRecord::Base
  semantically_taggable :languages, :skills
end
# File lib/semantically_taggable/semantically_taggable.rb, line 16
    def semantically_taggable(*scheme_names)
      scheme_names = scheme_names.to_a.flatten.compact.map(&:to_sym)
      raise ArgumentError, "At least one scheme name required, none given" unless scheme_names.present?

      if taggable?
        write_inheritable_attribute(:scheme_names, (self.scheme_names + scheme_names).uniq)
      else
        write_inheritable_attribute(:scheme_names, scheme_names)
        class_inheritable_reader(:scheme_names)

        class_eval do
          has_many :taggings, :as => :taggable, :dependent => :destroy, :include => :tag, :class_name => "SemanticallyTaggable::Tagging"
          has_many :base_tags, :through => :taggings, :source => :tag, :class_name => "SemanticallyTaggable::Tag"

          def self.taggable?
            true
          end

          include SemanticallyTaggable::Taggable::Core
          include SemanticallyTaggable::Taggable::Collection
# TODO: reintroduce caching support
#          include SemanticallyTaggable::Taggable::Cache
        end
      end
    end
taggable?() click to toggle source
# File lib/semantically_taggable/semantically_taggable.rb, line 3
def taggable?
  false
end