Commit Graph

88 Commits

Author SHA1 Message Date
Fatih Kadir Akın 7d0d5add84 Implement radix algorithm for routing (thanks to beryl) 2016-01-22 23:06:13 +02:00
Luis Lavena df359d66c9 Build Route Regex once to reduce allocations
Right now every `match?` performed against the routes defined result
in a new Regex compiled for the exact same `@path`.

Since `@path` of the Route does not change on every request, we
pre-build it to avoid repeated allocations.

When testing this in release mode (against 0.10.2 [d1e3f0b]):

Before: 32408.48 req/s
After:  34862.07 req/s
2016-01-18 13:48:41 -03:00
Sdogruyol 788c7241d4 Handle cases when logger can be nil 2016-01-18 17:25:52 +02:00
Sdogruyol 0498801b0d Initialize logger in config 2016-01-17 14:22:47 +02:00
Sdogruyol 51092fbb91 Move logger to config 2016-01-17 14:18:18 +02:00
Sdogruyol 2af3648682 Make logger configurable 2016-01-17 13:08:12 +02:00
Sdogruyol 5fb5a4c6ae Small refactor 2016-01-16 12:56:01 +02:00
sdogruyol 7ffa6700de Update CLI to handle missing ssl_key and ssl_cert 2016-01-15 14:50:11 +02:00
Fatih Kadir Akın 37d40f4fbe Implement SSL handling, move option parser to another file to maintain
easier
2016-01-13 23:31:19 +02:00
sdogruyol b37dd29d4b Update router to handle method matching 2016-01-13 15:22:50 +02:00
sdogruyol 4c423e967f Refactor parse_url_params 2016-01-13 10:07:37 +02:00
Fatih Kadir Akın 3e8b2ae51c Implement parse_url_params 2016-01-13 00:06:19 +02:00
Sdogruyol 0b4a36953f Started reimplementing router 2016-01-12 21:37:12 +02:00
Sdogruyol aabfe4ff99 Add log macro 2016-01-08 18:44:37 +02:00
Serdar Dogruyol 2503bc4e3d Merge pull request #45 from aladagemre/master
Add 403 view
2016-01-05 19:24:42 +02:00
Ahmet Emre Aladağ 47f505ff76 Update view.cr 2016-01-05 17:35:07 +02:00
sdogruyol eb4c82043a Add add_handler macro 2016-01-05 14:20:40 +02:00
Sdogruyol 6a4ed2d9eb Add exception logging. Closes #41 2016-01-04 21:54:58 +02:00
Ahmet Emre Aladağ 87bbb2069f Realm added for Basic Authentication 2016-01-04 20:14:05 +02:00
sdogruyol 7ad319c70d v0.6.0 2016-01-03 22:13:10 +02:00
sdogruyol c21567fe17 Add macro specs 2016-01-03 13:22:43 +02:00
sdogruyol 211685ee74 Fix basic_auth 2015-12-31 14:03:11 +02:00
Serdar Dogruyol aaa2ee1e31 Add public_folder macro 2015-12-30 20:16:04 +02:00
Sdogruyol 743fd3682d Add HTTPBasicAuth middleware 2015-12-27 11:53:54 +02:00
Sdogruyol 8b6700695d Update delegate macro in context 2015-12-27 11:17:22 +02:00
Alfonso Uceda Pompa 8c0ea21d44 return raw json when we parse the request body 2015-12-24 17:09:33 +01:00
Alfonso Uceda Pompa e39770b433 Make compatyble with crystal 0.10.0 2015-12-24 16:25:00 +01:00
Sdogruyol fbc21b197a Rename to Kemal::WebSocketHandler 2015-12-22 20:51:27 +02:00
Sdogruyol 44af664748 Remove experimental fork mode 2015-12-19 10:00:29 +02:00
Sdogruyol 20ef2b2927 Add more documentation 2015-12-18 22:45:28 +02:00
Serdar Dogruyol 88c19f0051 Remove unnecessary handler 2015-12-16 17:06:06 +02:00
Sdogruyol 06ced7790b Adding websocket support :) 2015-12-15 23:11:21 +02:00
Sdogruyol 66c8b6d857 Move macros from view to macros 2015-12-14 20:05:46 +02:00
Sdogruyol 5c97942707 Add more documentation 2015-12-13 10:25:04 +02:00
Sdogruyol 58f9d8c590 Add read config from yml 2015-12-12 20:27:46 +02:00
Sdogruyol 85a383b328 Fix static file handler 2015-12-10 21:20:32 +02:00
Sdogruyol e4da65f1f2 Refactor static file handler 2015-12-10 21:15:28 +02:00
Sdogruyol 21a3c6ad3c Add static file handler 2015-12-10 20:40:39 +02:00
Serdar Dogruyol 12c6af7d79 Merge pull request #32 from ilatif/master
Removed env from redirect and changed redirect from method to macro.
2015-12-09 22:27:04 +02:00
Imran Latif 4d1e31cb41 Removed env from redirect and changed redirect from method to macro.
Removed `env.redirect` in-favor of `redirect` in-order to make Kemal's
API look more like Sinatra.

Thanks @sdogruyol and @f for introducing me to macros :-).

Binding HTTP::Server to 0.0.0.0
2015-12-10 01:24:49 +05:00
Fatih Kadir Akın 9ade49ae20 Add layout support for render macro. It should be improved in the future. 2015-12-09 17:54:49 +02:00
Sdogruyol a67a8508cf Add worker support (experimental) 2015-12-08 22:15:13 +02:00
Aşkın Gedik fd80fd2f1b fix default log color 2015-12-07 00:21:50 +02:00
Serdar Dogruyol 2ffb4dccdf Merge pull request #27 from f/master
Add render macro to kemal core.
2015-12-06 20:45:53 +02:00
Sdogruyol aa0d97aa42 Update .travis.yml 2015-12-06 17:56:04 +02:00
Fatih Kadir Akın 945fa59a6c Add render macro to kemal core to have dynamic rendering mechanism. It actually binds built-in ecr parser to the Kemal as a macro. 2015-12-06 16:55:35 +02:00
Imran Latif cd69a866d5 Adding method for doing browser redirection from inside any route.
Made some small changes
2015-12-05 02:23:18 +05:00
Imran Latif d25a611fbd Implemented HTTP `HEAD` method.
First I tried implementing this solution in such a way that it
explicitly clears body and set `Content-Length` header to body's size.
But for some reason, if I call the URL from cURL then `Content-Length`
header was blank which defeats the very purpose of `HEAD` requests.

I then later anticipated that since `HEAD` would be by-default
implemented by `HTTP::Server` module, there is no need to explicit
clears body and setting `Content-Length` but the way we have written
our previous specs were returning body as well. We could have used some
TestServer kind of thing but if we go to that route we explicitly need
to test non-existent route which I thought would create some
inconsistency among specs.

Crystal has clearly written specs for HEAD requests to make sure body
is not read for them. See
https://github.com/manastech/crystal/commit/acd0b6afb5af438a30529c36b11b
e7954336f23f. I decided to write simple specs which are easy to
maintain in long-run.

We are adding identical HEAD route for every GET route which will make
HEAD requests available for all defined GET requests.

https://github.com/sdogruyol/kemal/issues/19

Added comment for code line which is adding HEAD routes for defined GET routes.
2015-12-04 19:35:14 +05:00
Imran Latif c42f1f88e9 Added support for magic param `_method` just like Rails, Sinatra.
Following are the changes made in this commit:

- Added support for magic param `_method` just like Rails, Sinatra
etc.. Browsers which don't support `PUT`, `PATCH` and `DELETE` methods
can simulate them by sending `method` param in request body.

- The default Content-Type to parse request body submitted via forms
etc. is `application/x-www-form-urlencoded`. But if we send Ajax
request in Chrome ($.post) then by-default Content-Type is set to
`application/x-www-form-urlencoded; charset utf-8` which was not
getting matched. I changed the code from `==` to match against a
regular expression using `=~`.

- Print name and color of overridden HTTP method via Logger instead of
printing name and color or request's incoming HTTP method.

Making necessary changes as pointed by @sdogruyol

- Changed method name from`is_override_method_valid?` to
`override_method_valid?`.

- Refactored `if` condition in `override_method_valid?`.
2015-12-03 01:34:16 +05:00
Sdogruyol 171459eee9 Add 500 exception spec 2015-12-01 21:52:44 +02:00