Rack Middleware for bring Modernizr server-side
Ruby
Failed to load latest commit information.
lib default to cookie storage, it is safer Nov 14, 2010
test made modernizr consistently available from Rack.env Nov 14, 2010
.gitignore first commit Nov 3, 2010
.rvmrc made modernizr consistently available from Rack.env Nov 14, 2010
Gemfile first commit Nov 4, 2010
Gemfile.lock
LICENSE update license file Nov 7, 2010
README.md added usage and todo section. Nov 14, 2010
Rakefile moved some things around in preparation for publishing gem Nov 8, 2010
modernizr.gemspec

README.md

rack-modernizr

Modernizr is a javascript utility that interrogates a user's web browser to determine its capabilities. Unfortunately, all this delicious data is only available client-side.

rack-modernizr is a Rack Middleware that includes the Modernizr javascript and stuffs Modernizr's output into a cookie on the first page request.

Installation

Include it in your application.rb like so:

module ModernizrTestApp
  class Application < Rails::Application
    config.middleware.use Rack::Modernizr
  end
end

or in your config.ru:

# Initialize the rails application
MyApp::Application.initialize!

# This file is used by Rack-based servers to start the application.

require ::File.expand_path('../config/environment',  __FILE__)
require 'modernizr'

# WARNING: session storage is not working properly with config.ru initialization :/
use Rack::Modernizr

run MyApp::Application

Usage

In your rails code, Modernizr's client side detected browser functionality is now available from the Rack environment. (w00t!)

<%= request.env['X-rack-modernizr'].inspect %>

or

if 1==request.env['X-rack-modernizr']['video']['h264']
  # do stuff
end

Features

Rack-modernizr chews up 1k of cookie data (yikes!). If you are storing session data in the database or memcache, you can avoid the cookie tax by pushing modernizr data into the session:

module ModernizrTestApp
  class Application < Rails::Application
    config.middleware.use Rack::Modernizr, :storage => "session"
  end
end

TODO

(in no particular order)

  • Cool kid .accessorize method, like rack-flash.
  • Better unit testing for sessions and cookies.
  • Rails helper to clean up retrieval syntax
  • compression to cut down on 1k cookie storage size

Thanks

rack-modernizr was inspired by jamesgpearce's super awesome modernizr-server. Some javascript was used from that project.