Skip to content

Instantly share code, notes, and snippets.

@oisin
Created May 2, 2011 23:36
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save oisin/952572 to your computer and use it in GitHub Desktop.
Save oisin/952572 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
@oisin
Copy link
Author

oisin commented May 23, 2011 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment