Commit graph

18 commits

Author SHA1 Message Date
Luis Lavena
ae814c608c Prepare for release: v0.1.2 2016-03-10 20:18:59 -03:00
Luis Lavena
85d565c321 Merge pull request #6 from luislavena/correctly-split-named-parameters
Correctly split named parameters
2016-03-10 20:16:12 -03:00
Luis Lavena
e0ef8d83da Correctly split named parameters on tree insert
Our Radix implementation was literally considering every single
character as candidate for splitting, which caused keys that
contained named parameters markers (`:foo`) to be broken across
nodes:

    tree = Radix::Tree.new
    tree.add "/", :root
    tree.add "/:post", :post
    tree.add "/:category/:post", :category_post
    # /
    #  :
    #   post
    #   category/:post

This caused incorrect behavior when performing lookup (`Tree#find`)
and failing to detect and map the key name, even when the value
was properly captured:

    result = tree.find "/example"
    pp result.found? # => false

This change corrects the issue by identifying named parameter marker
and once detected, consider everything until a separator or the end
of the supplied string is reached to be a unique key:

    tree = Radix::Tree.new
    tree.add "/", :root
    tree.add "/:post", :post
    tree.add "/:category/:post", :category_post
    # /
    #  :category/:post
    #  :post

However, due how Radix tree is structured, two named parameters at the
same level might result in problems during lookup phase:

    tree = Radix::Tree.new
    tree.add "/", :root
    tree.add "/:post", :post
    tree.add "/:category/:post", :category_post
    # /
    #  :category/:post
    #  :post

    tree.root.sort!
    # /
    #  :post
    #  :category/:post

    result = tree.find "/example"
    pp result.found? # => false
    pp result.params # => {"post" => "example"}

    result = tree.find "/news/first-post"
    pp result.found? # => false
    pp result.params # => {"post" => "news"}

Causing lookup to fail and values be stored under incorrect keys
for the parameters.

Because of this, a deprecation warning will be shown to allow
users adjust and correct their code prior fully removing it and
raise error (you know, semantic versioning and all that jazz).

This fixes #5 and closes #4
2016-03-10 17:50:08 -03:00
Luis Lavena
689625acfe Correct typos in documentation 2016-03-10 17:50:08 -03:00
Luis Lavena
8e8cd530ea Add more details to Change Log
- Correct project name.
- Add links for Unreleased section.
- Indicate the versioning schema the project aims to comply with.
2016-03-10 16:49:49 -03:00
Luis Lavena
c54767a9b1 Prepare for release: v0.1.1 2016-02-29 12:11:12 -03:00
Luis Lavena
60acd49794 doc: Add CHANGELOG.md file with list of changes
[skip ci]
2016-02-29 12:09:34 -03:00
Luis Lavena
88863daab2 Merge pull request #3 from luislavena/detect-multiple-params
Correctly build key from detected parameters
2016-02-29 11:49:43 -03:00
Luis Lavena
fe1ebb7d76 Correctly build key from detected parameters
Given a key `/:foo/:bar`, the find mechanism was incorrectly picking
the separator character as part of the key name (`foo/`).

This caused incorrect match between expected name (`foo`) and the
one obtained.

When the key name was extracted from the named parameter, the size
of the returned key was not compensated, given that we move +1 positions
to avoid having ':' as part of the key.

This is now corrected by reducing the key size one shorter to
compensate.

Fixes Issue #2
2016-02-29 11:40:18 -03:00
Luis Lavena
2a7a3b77bc Merge pull request #1 from askn/master
Update README.md

[skip ci]
2016-01-24 20:04:41 -03:00
Luis Lavena
63bdc343f4 doc: Correct usage sample styles
Ensure Crystal is used as usage examples blocks covered in README.

[skip ci]
2016-01-24 20:01:31 -03:00
Aşkın Gedik
b33839e5f1 Update README.md 2016-01-25 01:00:30 +02:00
Luis Lavena
cc0f5ca225 doc: Correct typo in documentation link
Build link to documentation incorrectly, which resulted in 404 when
visited.

This commit corrects the issue.

[skip ci]
2016-01-24 19:58:29 -03:00
Luis Lavena
4543af0ae3 doc: Link to documentation (docrystal.org)
Add documentation reference badge to README

[skip ci]
2016-01-24 19:42:34 -03:00
Luis Lavena
f320d9fb1a ci: Add Travis build badge to README
[skip ci]
2016-01-24 19:35:39 -03:00
Luis Lavena
c9f474b927 ci: adjust Travis build options
Ensure both stable and nightly builds of Crystal are being used
to test this project.
2016-01-24 19:23:48 -03:00
Luis Lavena
c79f4e5c21 spec: ensure Node usage is tracked
Add missing spec for disable of node payload when collecting the
usage of them in `Result`.
2016-01-24 19:21:19 -03:00
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