Skip to content

clrgit/hash_tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HashTree

The HashTree module contains the Set and Map classes that implements a tree where each node acts as a hash over child nodes. HashTree::Set stores the key internally while HashTree::Map use an external key

HashTree is still work-in-progress

Usage

Basic usage. Read the source for full(er) documentation

require 'hash_tree'

class MyNode < HashTree::Set
  attr_reader :name
end

# Create a root node
root = MyNode.new(nil, "ROOT")

# Build hierarchy through constructor
child1 = MyNode.new(root, "CHILD1")
child11 = MyNode.new(child1, "CHILD11")

# Build hierarchy using #attach
child2 = MyNode.new(root, "CHILD2")
child1.attach(child12)

# Parent object
root.parent   # -> nil
child1.parent # -> root

# Lookup value
puts child1["CHILD1"] # -> "CHILD1"

# Check if key exists
child1.key?("CHILD11") # -> true
child1.key?("no key")  # -> false

# Get the root object
child11.root # -> root

# List of parents up to the root element
child11.parents # -> [child1, root]

# List of ancestors from the root down to parent
child11.ancestors # -> [root, child1]

# String of dot-separated keys leading from the root down to self
child11.path # -> "CHILD1.CHILD11"

# Recursively lookup element by string dot-separated keys
root.dot("CHILD1.CHILD11") -> child11

Implementation

HashTree caches properties to avoid repetitive recursive lookups in #parents, #ancestors etc. The cache is reset every time a node is attached to or detached from a parent

Installation

Add this line to your application's Gemfile:

gem 'hash_tree'

And then execute:

$ bundle

Or install it yourself as:

$ gem install hash_tree

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/clrgit/hash_tree.

About

A ruby tree implementation acting as nested hashes

Resources

Stars

Watchers

Forks

Packages

No packages published