Go to file
Luis Lavena 7f348cae8c Extraction: initial import
Extract Radix Tree implementation from `Beryl` project into an
standalone library to facilitate usage by other developers.

- Move `Tree`, `Node` and `Result` into `Radix` namespace
- Clenaup standalone README and describe usage
2016-01-24 19:19:42 -03:00
spec Extraction: initial import 2016-01-24 19:19:42 -03:00
src Extraction: initial import 2016-01-24 19:19:42 -03:00
.gitignore Extraction: initial import 2016-01-24 19:19:42 -03:00
.travis.yml Extraction: initial import 2016-01-24 19:19:42 -03:00
LICENSE Extraction: initial import 2016-01-24 19:19:42 -03:00
README.md Extraction: initial import 2016-01-24 19:19:42 -03:00
shard.yml Extraction: initial import 2016-01-24 19:19:42 -03:00

README.md

Radix Tree

Radix tree implementation for Crystal language

Installation

Add this to your application's shard.yml:

dependencies:
  radix:
    github: luislavena/radix

Usage

You can associate a payload with each path added to the tree:

require "radix"

tree = Radix::Tree.new
tree.add "/products", :products
tree.add "/products/featured", :featured

result = tree.find "/products/featured"

if result.found?
  puts result.payload # => :featured
end

You can also extract values from placeholders (as named segments or globbing):

tree.add "/products/:id", :product

result = tree.find "/products/1234"

if result.found?
  puts result.params["id"]? # => "1234"
end

Please see Radix::Tree#add documentation for more usage examples.

Implementation

This project has been inspired and adapted from julienschmidt/httprouter and spriet2000/vertx-http-router Go and Java implementations, respectively.

Changes to logic and optimizations have been made to take advantage of Crystal's features.

Contributing

  1. Fork it ( https://github.com/luislavena/crystal-beryl/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors