Skip to content

Instantly share code, notes, and snippets.

@elvuel
Forked from oisin/gist:952572
Created May 20, 2011 03:43
Show Gist options
  • Save elvuel/982304 to your computer and use it in GitHub Desktop.
Save elvuel/982304 to your computer and use it in GitHub Desktop.
API version checking using Sinatra's before filter
require 'sinatra'
# Set the version of the API being run here
#
MAJOR_VERSION = 1
MINOR_VERSION = 0
helpers do
def version_compatible?(nums)
return MAJOR_VERSION == nums[0].to_i && MINOR_VERSION >= nums[1].to_i
end
end
# Enforce compatibility before the call. Rewrite the
# URL in the request to remove the API versioning stuff
#
before %r{/api/v(\d)\.(\d)} do
if version_compatible?(params[:captures])
target = request.fullpath.split('/').last
request.path_info = "/#{target}"
else
halt 400, "Version not compatible with this server"
end
end
# Reach this route using
# http://localhost:4567/api/vX.Y/hello
#
get '/hello' do
"Hello there, compatible client."
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment