acts_as_20ggable
This gem implements categories (‘Tags v2.0’) engine inspired by Dmitriy Smirnov’s post spectator.ru/technology/web-building/tags2null .
It is heavily based on acts_as_taggable_on_steroids by Jonathan Viney (thanks!): svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids/
Also, it is under development and not production-ready yet. Look at FIXMEs, TODOs and OPTIMIZEs in code. Interface is subject to change, too.
Instructions & usage
Almost everything concerned with original acts_as_taggable_on_steriods applies equally to this plugin, so read original README first:
http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids/README
Attention
TagHierarchyBuilder.rebuild_hierarchy relies on DB transactions. So, on non-transactional datastores everything can break suddenly.
Playground configuration
Generate and apply migration:
ruby script/generate acts_as_20ggable_migration
rake db:migrate
Let’s suppose we have photos and we want those photos to have tags:
class Photo < ActiveRecord::Base
acts_as_taggable
end
Also let’s suppose we already have some photos with some tags in DB.
Tags hierarchy editing
To dump tags hierarchy for editing, use
hierarchy = TagHierarchyBuilder. # => ['# Categories',
'# Synonyms',
'# Unlinked tags',
'Nature',
'Horse',
'Cat',
'Kitty',
'Animals']
Let user edit it as plain text, then to update hierarchy use
# hierarchy => ['# Categories',
'Nature / Animals',
'Animals / Horse',
'Nature / Animals / Cat',
'# Synonyms',
'Cat = Kitty']
TagHierarchyBuilder.rebuild_hierarchy(hierarchy)
Comments (“# …”) in hierarchy specification are purely optional and inserted only for user convenience.
TagHierarchyBuilder can throw TagHierarchyBuilder::WrongSpecificationSyntax or Tag::HierarchyCycle. Errors descriptions still not implemented, sorry.
Finding tagged objects
find_tagged_with by default returns models with all subtags:
Photo.find_tagged_with('Animals') # => Everything tagged with Animals, Horse, Cat, Kitty
Photo.find_tagged_with('Animals', :exclude_subtags => true) # => Only tagged with Animals
Other
Problems, comments, and suggestions all welcome. [email protected]