Sha256: f9e77d9e2b7c2f92ce75f56ee7b7842d09df73440092443f200a54d9c710ab10
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
module ActsAsTaggableOn module Tagger def self.included(base) base.extend ClassMethods end module ClassMethods def acts_as_tagger(opts={}) has_many :owned_taggings, opts.merge(:as => :tagger, :dependent => :destroy, :include => :tag, :class_name => "Tagging") has_many :owned_tags, :through => :owned_taggings, :source => :tag, :uniq => true include ActsAsTaggableOn::Tagger::InstanceMethods extend ActsAsTaggableOn::Tagger::SingletonMethods end def is_tagger? false end end module InstanceMethods def self.included(base) end def tag(taggable, opts={}) opts.reverse_merge!(:force => true) return false unless taggable.respond_to?(:is_taggable?) && taggable.is_taggable? raise "You need to specify a tag context using :on" unless opts.has_key?(:on) raise "You need to specify some tags using :with" unless opts.has_key?(:with) raise "No context :#{opts[:on]} defined in #{taggable.class.to_s}" unless (opts[:force] || taggable.tag_types.include?(opts[:on])) taggable.set_owner_tag_list_on(self, opts[:on].to_s, opts[:with]) taggable.save end def is_tagger? self.class.is_tagger? end end module SingletonMethods def is_tagger? true end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
acts-as-taggable-on-2.0.0.pre3 | lib/acts_as_taggable_on/acts_as_tagger.rb |