add support for LINK and UNLINK requests

This commit is contained in:
Konstantin Haase 2013-03-09 18:09:56 +01:00
parent be1df6209a
commit 82009d446f
7 changed files with 45 additions and 7 deletions

View File

@ -1,5 +1,7 @@
= 1.4.0 / Not Yet Released
* Add support for LINK and UNLINK requests. (Konstantin Haase)
* Add support for Yajl templates. (Jamie Hodge)
* Add support for Rabl templates. (Jesse Cooke)

View File

@ -138,6 +138,14 @@ end
options '/' do
.. appease something ..
end
link '/' do
.. affiliate something ..
end
unlink '/' do
.. separate something ..
end
```
Routes are matched in the order they are defined. The first route that

View File

@ -48,7 +48,15 @@ module Sinatra
end
def idempotent?
safe? or put? or delete?
safe? or put? or delete? or link? or unlink?
end
def link?
request_method == "LINK"
end
def unlink?
request_method == "UNLINK"
end
private
@ -1354,6 +1362,8 @@ module Sinatra
def head(path, opts = {}, &bk) route 'HEAD', path, opts, &bk end
def options(path, opts = {}, &bk) route 'OPTIONS', path, opts, &bk end
def patch(path, opts = {}, &bk) route 'PATCH', path, opts, &bk end
def link(path, opts = {}, &bk) route 'LINK', path, opts, &bk end
def unlink(path, opts = {}, &bk) route 'UNLINK', path, opts, &bk end
private
def route(verb, path, options = {}, &block)
@ -1860,10 +1870,10 @@ module Sinatra
end
end
delegate :get, :patch, :put, :post, :delete, :head, :options, :template, :layout,
:before, :after, :error, :not_found, :configure, :set, :mime_type,
:enable, :disable, :use, :development?, :test?, :production?,
:helpers, :settings, :register
delegate :get, :patch, :put, :post, :delete, :head, :options, :link, :unlink,
:template, :layout, :before, :after, :error, :not_found, :configure,
:set, :mime_type, :enable, :disable, :use, :development?, :test?,
:production?, :helpers, :settings, :register
class << self
attr_accessor :target

View File

@ -60,7 +60,7 @@ class DelegatorTest < Test::Unit::TestCase
assert_equal Sinatra::Application, Sinatra::Delegator.target
end
%w[get put post delete options patch].each do |verb|
%w[get put post delete options patch link unlink].each do |verb|
it "delegates #{verb} correctly" do
delegation_app do
send(verb, '/hello') { 'Hello World' }

View File

@ -97,6 +97,14 @@ class Test::Unit::TestCase
request(uri, env.merge(:method => "PATCH", :params => params), &block)
end
def link(uri, params = {}, env = {}, &block)
request(uri, env.merge(:method => "LINK", :params => params), &block)
end
def unlink(uri, params = {}, env = {}, &block)
request(uri, env.merge(:method => "UNLINK", :params => params), &block)
end
# Delegate other missing methods to response.
def method_missing(name, *args, &block)
if response && response.respond_to?(name)

View File

@ -22,6 +22,10 @@ class ReadmeTest < Test::Unit::TestCase
delete('/') { ".. annihilate something .." }
options('/') { ".. appease something .." }
link('/') { ".. affiliate something .." }
unlink('/') { ".. separate something .." }
end
get '/'
@ -41,6 +45,12 @@ class ReadmeTest < Test::Unit::TestCase
options '/'
assert_body '.. appease something ..'
link '/'
assert_body '.. affiliate something ..'
unlink '/'
assert_body '.. separate something ..'
end
example do

View File

@ -23,7 +23,7 @@ class RegexpLookAlike
end
class RoutingTest < Test::Unit::TestCase
%w[get put post delete options patch].each do |verb|
%w[get put post delete options patch link unlink].each do |verb|
it "defines #{verb.upcase} request handlers with #{verb}" do
mock_app {
send verb, '/hello' do