web_pipe
is a builder of composable rack applications through a pipe of
functions on an immutable struct.
web_pipe
plays incredibly well withhanami 2
. If you want to create ahanami 2
app withweb_pipe
, you can take inspiration from this sample todo application:https://github.com/waiting-for-dev/hanami_2_web_pipe_todo_app
- Introduction
- Design model
- Building a rack application
- Plugging operations
- Using rack middlewares
- Composing applications
- Connection struct
- Overriding instance methods
- DSL free usage
- Plugs
- Testing
- Extensions
- Recipes
# config.ru
require 'web_pipe'
WebPipe.load_extensions(:params)
class HelloApp
include WebPipe
AUTHORIZED_USERS = %w[Alice Joe]
plug :html
plug :authorize
plug :greet
private
def html(conn)
conn.add_response_header('Content-Type', 'text/html')
end
def authorize(conn)
user = conn.params['user']
if AUTHORIZED_USERS.include?(user)
conn.add(:user, user)
else
conn.
set_status(401).
set_response_body('<h1>Not authorized</h1>').
halt
end
end
def greet(conn)
conn.set_response_body("<h1>Hello #{conn.fetch(:user)}</h1>")
end
end
run HelloApp.new
web_pipe
is in active development but ready to be used in any environment.
Everyday needs are covered, and while you can expect some API changes,
they won't be essential, and we'll document everything appropriately.
Bug reports and pull requests are welcome on GitHub at https://github.com/waiting-for-dev/web_pipe.
web_pipe
follows the principles of semantic versioning.