The Tree plugin adds additional associations and methods that allow you to treat a Model as a tree.
A column for holding the parent key is required and is :parent_id by default.
This may be overridden by passing column name via :key.
Optionally, a column to control order of nodes returned can be specified by passing column name via :order.
If you pass true for the :single_root option, the class will ensure there is only ever one root in the tree.
Examples:
class Node < Sequel::Model plugin :tree end class Node < Sequel::Model plugin :tree, :key=>:parentid, :order=>:position end
Classes and Modules
Public Class methods
Create parent and children associations. Any options specified are passed to both associations. You can also specify options to use for just the parent association using a :parent option, and options to use for just the children association using a :children option.
# File lib/sequel/plugins/tree.rb, line 30 def self.apply(model, opts=OPTS) opts = opts.dup opts[:class] = model model.instance_eval do @parent_column = (opts[:key] ||= :parent_id) @tree_order = opts[:order] end par = opts.merge(opts.fetch(:parent, {})) parent = par.fetch(:name, :parent) chi = opts.merge(opts.fetch(:children, {})) children = chi.fetch(:name, :children) par[:reciprocal] = children chi[:recripocal] = parent model.many_to_one parent, par model.one_to_many children, chi model.plugin SingleRoot if opts[:single_root] end