A Series Of Tubes
This is a simple web development framework built in Ruby! It is currently under development, so stay tuned for more updates!
Installation
Add this line to your application's Gemfile:
gem 'a_series_of_tubes'
And then execute:
$ bundle
Or install it yourself as:
$ gem install a_series_of_tubes
Usage
A Series of Tubes is a toolset for creating simple RESTful websites in Ruby. If you are interested in learning how to use it in your project, check out the Sample Server for a suggested application structure.
There are five main components to A Series of Tubes:
Tubes
Tubes are the individual routes users can navigate on your server. You can create a Tube
via the Tuber
class. An example set-up is as follows:
tuber = ASeriesOfTubes::Tubes::Tuber.new
tuber.draw do
get Regexp.new('^/$'), CatsController, :index
get Regexp.new('^/cats$'), CatsController, :index
get Regexp.new('^/cats/new$'), CatsController, :new
post Regexp.new('^/cats$'), CatsController, :create
end
The Tuber
itself is mainly useful as a means for creating the various instances of Tube
using its draw
function. Within draw
you create a Tube
with the following syntax:
METHOD REGEX_FOR_PATH, TUBE_CONTROLLER_NAME, TUBE_CONTROLLER_ACTIONS
# METHOD can be get, post, put, or delete
TubeController
The TubeController
is the class that will actually render your HTML/ERB views. For example, in our sample server, the CatsController#index
action looks like this:
class CatsController < ASeriesOfTubes::TubeController
def index
@cats =
end
def
session['cats'] ? session['cats'] : []
end
end
When a Tube
gets matched to the index
action, an instance variable @cats
is created and is populated with any data in the session cookie under the key cats
. This is another important feature of the TubeController
! You can user session[KEY]
to store data to the session cookies of the site. Similarly, there is flash[KEY]
and flash.now[KEY]
, which can be used to only store information for the next render or redirect.
TubeRecord
This module contains an ORM for working with SQL Databases. Take a look at the sample server to see it in action!
TubeSupport
This module just contains helper functions for the entire gem.
TubeState
This module contains the internal workings of the session
and flash
abilities of the TubeController
class.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/danmakenoise/a_series_of_tubes. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.