(735 lines, not counting any of it's own dependencies inside Rails. https://github.com/rails/rails/blob/master/actionpack/lib/ac...)
Sure, you wrote your own framework in 30 minutes -- by using a part of Rails which many many developer-hours have gone into, over many calendar years. (https://github.com/rails/rails/commits/master/actionpack/lib... history stops at rails3 four years ago, when they moved the router from one project to another... the actual history goes back further)
Rails may arguably be bloated, but as of Rails3 it's also amazingly modular and decoupled, allowing you to use just the parts of it you want. And OP thought the Router was awesome enough to want to reuse it. At least give it the credit it deserves, for that, when you're using Rails to write a framework you say shows how Rails is awful!
But my project doesn't need all that, you might say. Well, that's fine, then use something like Sinatra. But I wouldn't build a non-toy web application without the above things.
Rails specific and exclusive features are mostly conventions and the flow from routes to controller and views, which for me is very disagreeable.
I think it is a good thing for new and maybe even experienced Ruby developers to build their own, to see a way beyond all the meta magic and five minute blogs, and that you really don't need that much plumbing to get things moving and understandable.
At least it didn't say roll Rails in five minutes - it would take much longer than that to bake in all the security holes and to stick YAML parsers all over the shop.
Fast forward a month and two books later: I rewrote the whole thing in Django in half the time with 10% of the hacks. Drupal is great for what it does, just don't try to make it do anything it doesn't or customize it too much.
I, too, find Rails to be a bloated mess. Here's what I wanted out of my ideal framework:
- The "framework" has one single task: providing a DSL for routing requests, and dealing with the HTTP nitty-gritty.
- The default would be build for JSON APIs. The return value of routes gets serialized to JSON.
- Everything is explicit. No magic.
- You can organize you code in simple, maintainable units (files), grouped by functionality. (This is achieved through a tree routing structure, where controllers can pass / forward certain routes to other controllers.
- Code can be namespaced, can be tested easily, can be scripted easily. Functionality does not depend on naming conventions.