Module: Tagalong::Tagger::InstanceMethods

Defined in:
lib/tagalong/tagger.rb

Instance Method Summary collapse

Instance Method Details

#create_tag(tag_name) ⇒ Object



23
24
25
# File 'lib/tagalong/tagger.rb', line 23

def create_tag(tag_name)
  TagalongTag.create!(:tagger_id => self.id, :tagger_type => self.class.to_s, :name => tag_name)
end

#delete_tag(tag_name) ⇒ Object



33
34
35
36
37
38
# File 'lib/tagalong/tagger.rb', line 33

def delete_tag(tag_name)
  tag = tagalong_tags.find_by_name(tag_name)
  if tag.present?
    tag.destroy
  end
end

#has_tag?(tag_name) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/tagalong/tagger.rb', line 40

def has_tag?(tag_name)
  tags.include?(tag_name)
end

#tag(taggable_obj, tag_name) ⇒ Object



17
18
19
20
21
# File 'lib/tagalong/tagger.rb', line 17

def tag(taggable_obj, tag_name)
  raise Tagalong::TaggableNotPersisted, "Taggable must be persisted to tag it." if !taggable_obj.persisted?
  tag_manager = Tagalong::TagManager.new(taggable_obj, self)
  tag_manager.add_tag(tag_name)
end

#taggables_with(name) ⇒ Object



72
73
74
75
76
# File 'lib/tagalong/tagger.rb', line 72

def taggables_with(name)
  self.tagalong_tags.where(:name => name).each do |t|
    return t.taggables
  end
end

#tagsObject



44
45
46
# File 'lib/tagalong/tagger.rb', line 44

def tags
  self.tagalong_tags.order("name ASC").map { |r| r.name }
end

#tags_including(options = {}) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/tagalong/tagger.rb', line 48

def tags_including(options={})
  out = []
  query = self.tagalong_tags.order("name ASC")

  if options[:has_been_tagged]
    query = query.
              select("tagalong_tags.id, tagalong_tags.name, tagalong_tags.number_of_references, tagalong_taggings.id as used").
              joins("LEFT OUTER JOIN tagalong_taggings ON tagalong_taggings.tagalong_tag_id = tagalong_tags.id AND tagalong_taggings.taggable_id = '#{options[:has_been_tagged].id.to_s}'")
  end
  
  query.each do |tag|
    hash = {:name => tag.name}
    if options[:number_of_references]
      hash[:number_of_references] = tag.number_of_references
    end
    if options[:has_been_tagged]
      hash[:has_been_tagged] = !tag.used.nil?
    end
    out << hash
  end
  
  return out
end

#untag(taggable_obj, tag_name) ⇒ Object



27
28
29
30
31
# File 'lib/tagalong/tagger.rb', line 27

def untag(taggable_obj, tag_name)
  raise Tagalong::TaggableNotPersisted, "Taggable must be persisted to untag it." if !taggable_obj.persisted?
  tag_manager = Tagalong::TagManager.new(taggable_obj, self)
  tag_manager.remove_tag(tag_name)
end