Easily maintain a collection of Tag instances with aggregate counts from your model's tags.
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
spec
.gitignore
.rspec
.rubocop.yml
.rubocop_todo.yml
.travis.yml
CHANGELOG.md
CONTRIBUTING.md
Gemfile
LICENSE.md
README.md
Rakefile
mongoid-tag-collectible.gemspec

README.md

Mongoid::TagCollectible

Gem Version Build Status Dependency Status Code Climate

Easily maintain a collection of Tag instances with aggregate counts from your model's tags.

Compatibility

This gem supports Mongoid 3, Mongoid 4 and Mongoid 5.

Install

Add mongoid-tag-collectible to your Gemfile.

gem 'mongoid-tag-collectible'

Use

class Thing
  include Mongoid::Document
  include Mongoid::TagCollectible::Tagged
end

thing1 = Thing.create!(tags: [ 'funny', 'red' ])
thing2 = Thing.create!(tags: [ 'funny', 'yellow' ])

funny_tag = ThingTag.find('funny') # find by tag
funny_tag.name # "funny"
funny_tag.count # 2, not a database query
funny_tag.tagged # thing1 and thing2

Renaming Tags

You can rename a tag, which causes all the tags in your model's tags collection to be renamed.

ThingTag.find('funny').update_attributes!(name: 'sad')

Thing.first.tags # [ 'sad', 'red' ]

Destroying Tags

You can destroy a tag, which also removes it from your model's tags collection.

ThingTag.find('red').destroy
Thing.first.tags # [ 'sad' ]

Case-Sensitive

Tags are case-sensitive. Transform your tags in before_validation if you don't want this behavior.

class Thing
  before_validation :downcase_tags

  private

  def downcase_tags
    tags = tags.map(&:downcase) if tags
  end
end

Contribute

See CONTRIBUTING.

Copyright and License

Copyright Daniel Doubrovkine and Contributors, Artsy Inc., 2013-2015

MIT License