tagutils
tagutils gems - tag utilities (tag, taggings, tag list, etc.)
Usage
Schema / Tables
Use TagDb.create
to build the tags
and taggings
tables
and CategoryDb.create
to build the categories
and categorizations
tables.
Example:
# ...
TagDb.create
# ...
CategoryDb.create
# ...
Models
Add the associations yourself with the standard has_many
class macro:
class Movie < ActiveRecord::Base
# ...
has_many :taggings, class_name: 'TagDb::Model::Tagging', :as => :taggable
has_many :tags, class_name: 'TagDb::Model::Tag', :through => :taggings
# ...
has_many :categorizations, class_name: 'CategoryDb::Model::Categorizations', :as => :categorizable
has_many :categories, class_name: 'CategoryDb::Model::Category', :through => :categorizations
# ...
end
or use the built-in class macro shortcuts:
class Movie < ActiveRecord::Base
# ...
has_many_tags
# ...
has_many_categories
# ...
end
The has_many_tags
also adds the following methods:
Movie.with_tag( 'doc' )
# e.g. scope :with_tag, ->(tag_key){ joins(:tags).where('tags.key' => tag_key) }
The has_many_categories
also adds the following methods:
Movie.with_category( 'doc' )
# e.g. scope :with_category, ->(category_key){ joins(:categories).where('categories.key' => category_key) }
Reader
The TagReader
lets you read plain text fixtures (data sets). Example:
tags.1.yml:
-----------
# organizations
orgs: un, g5, g8, g20, eu, commonwealth, mercosur, nafta
football: fifa, uefa, afc, ofc, caf, csf, concacaf
# national regions
brasil: s|South, se|Southeast, co|Centerwest, ne|Northeast, n|North
To read the tags use:
TagReader.new( <include_path>).read( `tags.1` )
Real World Usage
- worlddb gem - continent, country, region, metro, city, district etc. models
- winedb gem - wine, winery, winemaker, vineyards, etc. models
- beerdb gem - beer, brand, brewery, etc. models
License
The tagutils
scripts are dedicated to the public domain.
Use it as you please with no restrictions whatsoever.