Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
r3
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

mruby-r3 Build Status Build status

mruby binding for libr3, a high-performance path dispatching library.

tree << '/users/{user_id}/feeds/{feed_id}'

tree.match '/users/1/feeds/2'
# => { user_id: '1', feed_id: '2' }

Installation

Add the line below to your build_config.rb:

MRuby::Build.new do |conf|
  # ... (snip) ...
  conf.gem mgem: 'mruby-regexp-pcre' # Optional
  conf.gem mgem: 'mruby-r3'
end

Or add this line to your aplication's mrbgem.rake:

MRuby::Gem::Specification.new('your-mrbgem') do |spec|
  # ... (snap) ...
  spec.add_dependency 'mruby-regexp-pcre' # Optional
  spec.add_dependency 'mruby-r3'
end

Usage

First of all a tree object has to be created.

tree = R3::Tree.new

The size grows dynamically. However the initializer accepts an optional initial size. The default initial size is up to 5 routes.

tree = R3::Tree.new(100)

The pattern syntax for routes is the following. Enhanced support for regular expression requires mruby-regexp-pcre to be installed!

/blog/post/{id}      use [^/]+ regular expression by default.
/blog/post/{id:\d+}  use `\d+` regular expression instead of default.

Routes can be added to the tree at any time, however dont forget to call compile before using them.

tree << '/'
tree << '/blog/post'
tree << '/blog/post/{id}'
tree << '/user/{user_id}/feeds/{feed_id}'

Its also possible to specify the HTML method rather then to allow any.

tree.add('/blog/post/{id:\\d+}', R3::DELETE)

Once the tree has been compiled he's ready for dispatching.

tree << '/'
tree.add '/users', R3::ANY
tree.add '/posts', R3::GET
tree.add '/users/{user_id}/feeds/{feed_id}', R3::GET
tree.compile

tree.routes
# => ['GET /users/{user_id}/feeds/{feed_id}', ...]

tree.match? '/'
# => true
tree.match '/'
# => {}

tree.match? '/other'
# => false
tree.match '/other'
# => nil

tree.match? '/users', R3::POST
# => true
tree.match? '/posts', R3::POST
# => false

tree.match '/users/1/feeds/2'
# => { user_id: '1', feed_id: '2' }
tree.match '/users/1/feeds/2', R3::POST
# => nil

Before you're writing your own URL map, you can make use of the built-in feature to add any kind of data with the route.

tree.add('/user/{name}', R3::ANY, -> { 'callback handler' })
tree.compile

params, handler = tree.match('/user/bernd')
handler.call
# => 'callback handler'

Development

Clone the repo:

$ git clone https://github.com/katzer/mruby-r3.git && cd mruby-r3/

Compile the source:

$ rake compile

Run the tests:

$ rake test

TODO

  1. Add a route for multiple HTTP methods.
  2. missing asprintf() for MingGW 32-bit compiler.

Authors

  • Sebastián Katzer, Fa. appPlant GmbH

License

The mgem is available as open source under the terms of the MIT License.

Made with 😋 in Leipzig

© 2017 appPlant GmbH

About

mruby bindings for libr3

Topics

Resources

License

Releases

No releases published
You can’t perform that action at this time.