Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Tagging plugin akin to acts_as_taggable_on, but this one works with MongoMapper.
Ruby
tree: d04a5e5119

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
rails
tasks let the tagging commence
test
.gitignore
MIT-LICENSE
README.markdown
Rakefile Added gem support and versioning
VERSION
acts_as_mongo_taggable.gemspec Regenerated gemspec for version 0.2.2
install.rb
uninstall.rb let the tagging commence

README.markdown

ActsAsMongoTaggable

Inspired by mbleigh's "acts_as_taggable_on," this tagging plugin works with MongoDB+MongoMapper.

Intends to be super-performant by taking advantage of the benefits of document-driven db denormalization.

Requirements

  • MongoDB
  • MongoMapper gem
  • Expects you to have a User model that includes MongoMapper::Document

Installation

Best practice -- install the gem:

gem install acts_as_mongo_taggable

… and add a line to your environment.rb:

config.gem 'acts_as_mongo_taggable'

or, if you're old-school, install as a plugin:

./script/plugin install git://github.com/mepatterson/acts_as_mongo_taggable.git

Finally, add this line to the Rails model class that you want to make taggable:

include ActsAsMongoTaggable

Yeah, that's it.

Usage

class User
  include MongoMapper::Document
end

class Widget
  include MongoMapper::Document
  include ActsAsMongoTaggable
end

To rate it:

widget.tag(word_or_words, user)
  • word_or_words can be a string, a string of comma-delimited words, or an array
  • user is the User who is tagging this widget

Basic search:

Widget.find_with_tag('vampires')

... will return the first Widget object that has been tagged with that phrase

Widget.find_all_with_tag('vampires')

... will return an array of Widget objects, all of which have been tagged with that phrase

Widget.most_tagged_with('vampires')

... will return the Widget object that has been tagged the most times with that phrase

Making tag clouds:

Widget.all_tags_with_counts

... will return a nice array of arrays, a la [["rails", 8],["ruby", 12], ["php", 6], ["java", 2]] Use this to make yourself a tag cloud for now. (maybe I'll implement a tag cloud view helper someday.)

Statistics on Tags:

Tag.top_25

... returns the top 25 most used tags across all taggable object classes in the system

Tag.top_25("Widget")

... returns the top 25 most used tags for Widget objects

Future

  • Performance improvements as I come across the need

Thanks To...

  • Jon Bell for some sweet refactorings and gem-ification
  • John Nunemaker and the rest of the folks on the MongoMapper Google Group
  • Kyle Banker and his excellent blog posts on grouping and aggregation
  • The MongoDB peoples and the MongoDB Google Group
  • mbleigh for the acts_as_taggable_on plugin for ActiveRecord

Copyright (c) 2009 [M. E. Patterson], released under the MIT license

Something went wrong with that request. Please try again.