0.2.71 • Published 3 years ago

ruta v0.2.71

Weekly downloads
15
License
MIT
Repository
github
Last release
3 years ago

RutaJS

Build Status NPM version Bower version

RouteKey-Value Collection for Browser and Node.js

Mainly used for an application routing, but can be used for any other purpose

Route
  • strict match part(s) - /user (same as !/user) does not match `/user/bob
  • begins with part(s) - ^/user matches /user/bob, but does not /users
  • optional parts - /?foo Matches only / and /foo paths
  • regexp - enclosed in parentheses '(regexp)' - (\.less$) - /user/:action(edit|delete) - /user/:action([a-z]{2,4})
  • method - $post /user
  • query string (matches key/value at any position(order) in query string) - ?debug - ?debug=js - ?debug=(js|less) (in parenthese regexp is used, note here is also full-match is used - ?:debugger(d|debug)=(js|less) match d=less like debugger: 'less'
Parts

Each route definition (path) is split into parts (folders).

Each part (folder) can be

  • strict (default behaviour) /user/:name - all are strict
  • optional: /user/?:name - user is strict, but next folder with alias name is optional.
  • alias, seen from example above: /user/:name
  • alias with regexp: /user/:name(\w{3,8})
  • alias with possible values /:action(create|edit|remove)

Collection

Route-Value Collection.

/**
  * @param route <String> : route definition
  * @param obj <Any> : value to store in collection
 \*/
ruta.Collection.prototype.add(route, obj <Any>);


/**
  * @param path <String>: url string
  * @param method <String>: optional, request method GET, POST, DELETE, PUT
  * @return route <Object> {
  *      value <Any> - stored value,
  *      current <Object> {
  *          params <Object>, - holds alias values and querystring arguments
  *          url <String>
  *      }
  * }
 \*/
ruta.Collection.prototype.get(path, ?method);
import ruta from 'ruta'

const collection = new ruta.Collection();

collection
    .add('/user/:id', {foo: 'bar'});

const route = collection.get('/user/20');

route.value === { foo: 'bar' };
route.current.params.id === 20;

Router

If collection is bound to a router, then each item value in the collection should be a function, which will be called, when router emits the URL-change event.

RutaJS supports History API and hashchanged routing.

:warning: ruta object is already the route collection itself. And there is History API Router bound to this collection, or hash as a fallback;

Api

  • .add(definition:String, mix:Any) Adds anything to the collection

    	- `definition` String routing definition
    	- `mix` Any Object, that you can later retrieve via `.get` method. When `mix` is a `Function`, then it will be additionally bound to the Router
  • .get(url:String) Gets first object from the collection matches the url

  • .getAll(url:String) Gets all objects from the collection matches the url

  • .navigate(url:String, ?options:Object) Navigate the Router to the url

    	- `options`
    
    		- `extend:Boolean` Preserve current query string parameters, which are not in url string
    		- `silent:Boolean` Default: `false`; Do not trigger change event
    		- `replace:Boolean` Default: `false`; For the History API `replaceState` is used.

Examples

var collection = new ruta.Collection();

collection.add('/user/:id', myObject);
collection.get('/user/10') // -> { key: '/user/:id', value: myObject, current: { id: 10 } }

// Will match '/foo', '/foo/bar', ...
collection.add('^/foo', x);

// Strict Pattern, match '/foo'
collection.add('/foo')
collection.add('/foo?query=string')


// Conditional
collection.add('/user/?:id')


// Query String
collection.add('/users', X);
collection.get('/users?loc=DE')
//> { key: '/users', value: X, current: { params: { loc: 'DE' }, url: '/users?loc=DE' } }

Atma.js Project

0.2.71

3 years ago

0.2.70

3 years ago

0.2.69

3 years ago

0.2.67

3 years ago

0.2.66

3 years ago

0.2.65

3 years ago

0.2.64

4 years ago

0.2.63

4 years ago

0.2.62

4 years ago

0.2.59

4 years ago

0.2.58

4 years ago

0.2.57

5 years ago

0.2.55

6 years ago

0.2.53

6 years ago

0.2.51

6 years ago

0.2.49

6 years ago

0.2.47

6 years ago

0.2.45

6 years ago

0.2.43

6 years ago

0.2.41

6 years ago

0.2.39

7 years ago

0.2.37

7 years ago

0.2.36

7 years ago

0.2.34

7 years ago

0.2.32

7 years ago

0.2.31

7 years ago

0.2.30

7 years ago

0.2.28

8 years ago

0.2.27

8 years ago

0.2.26

8 years ago

0.2.25

8 years ago

0.2.24

8 years ago

0.2.23

8 years ago

0.2.22

8 years ago

0.2.21

8 years ago

0.2.20

9 years ago

0.2.19

9 years ago

0.1.17

9 years ago

0.1.16

9 years ago

0.1.15

9 years ago

0.1.14

9 years ago

0.1.13

9 years ago

0.1.12

10 years ago

0.1.11

10 years ago

0.1.10

10 years ago

0.1.5

10 years ago

0.1.4

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago