Skip to content

Latest commit

 

History

History
43 lines (32 loc) · 962 Bytes

File metadata and controls

43 lines (32 loc) · 962 Bytes

Composing applications

Previously, we have seen how to compose plugged operations and how to compose rack middlewares. The logical next step is composing web_pipe applications, which is the same as composing operations and middlewares simultaneously.

The DSL method compose does precisely that:

class HtmlApp
  include WebPipe
  
  use :session, Rack::Session::Cookie, key: 'my_app.session', secret: 'long'
  use :csrf, Rack::Csrf, raise: true
  
  plug :content_type
  plug :default_status
  
  private
  
  def content_type(conn)
    conn.add_response_header('Content-Type' => 'text/html')
  end
  
  def default_status(conn)
    conn.set_status(404)
  end
end

class MyApp
  include WebPipe
  
  compose :web, HtmlApp.new
  # It does exactly the same as:
  # use :web, HtmlApp.new
  # plug :web, HtmlApp.new
  
  # use ...
  # plug ...
end