Skip to content
Helps you write Rack middleware using Nokogiri.
Ruby JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib Changed the 'dirb' gem to 'diffy' (thanks to radiospiel for pointing … Nov 6, 2011



If you are creating Rack middleware that changes the HTML response, use Rack::Plastic to get a head start. Rack::Plastic takes care of the boilerplate Rack glue so that you can focus on simply changing the HTML.


There are two ways you can change the HTML: as a Nokogiri document or as a string. Simply define one of the following methods:

def change_nokogiri_doc(doc)
  ... insert code that changes the doc ...

def change_html_string(html)
  ... insert code that changes the html string ...

If you define both methods, change_nokogiri_doc will be called first, then the doc will be converted to an HTML string, then the string will be passed to change_html_string.

Rack::Plastic also provides some convenience methods for interacting with Rack and Nokogiri as well as some convenience methods for testing.


The examples/middlewares directory has examples of writing middleware using Rack::Plastic.

Rails Streaming

This middleware is not compatible with Rails HTTP streaming. According to Railscast #266: "Also, streaming is incompatible with some middleware. If the middleware modifies the response then it will not work with streaming."


Rack::Plastic comes with some test helpers that make it easier for you to write tests for your Rack middleware. Refer to the documentation for PlasticTestHelper for more details.

If you want to test Rack::Plastic itself, this gem doesn't come with automated tests, but it provides manual tests. Each of the example middlewares is inserted into a Sinatra, Rails, and Rack test app.

To run the Rails test app:

  • cd examples/railsapp
  • script/server
  • point your browser to http://localhost:3000

To run the Sinatra test app:

  • cd examples/sinatraapp
  • ruby app.rb
  • point your browser to http://localhost:4567

To run the Rack test app:

  • cd examples/rackapp
  • rackup
  • point your browser to http://localhost:9292
Something went wrong with that request. Please try again.