1+ shared_examples_for "versioning" do
2+ it 'should set the API version' do
3+ subject . version 'v1' , macro_options
4+ subject . get :hello do
5+ "Version: #{ request . env [ 'api.version' ] } "
6+ end
7+ versioned_get '/hello' , 'v1' , macro_options
8+ last_response . body . should eql "Version: v1"
9+ end
10+
11+ it 'should add the prefix before the API version' do
12+ subject . prefix 'api'
13+ subject . version 'v1' , macro_options
14+ subject . get :hello do
15+ "Version: #{ request . env [ 'api.version' ] } "
16+ end
17+ versioned_get '/hello' , 'v1' , macro_options . merge ( :prefix => 'api' )
18+ last_response . body . should eql "Version: v1"
19+ end
20+
21+ it 'should be able to specify version as a nesting' do
22+ subject . version 'v2' , macro_options
23+ subject . get '/awesome' do
24+ "Radical"
25+ end
26+
27+ subject . version 'v1' , macro_options do
28+ get '/legacy' do
29+ "Totally"
30+ end
31+ end
32+
33+ versioned_get '/awesome' , 'v1' , macro_options
34+ last_response . status . should eql 404
35+
36+ versioned_get '/awesome' , 'v2' , macro_options
37+ last_response . status . should eql 200
38+ versioned_get '/legacy' , 'v1' , macro_options
39+ last_response . status . should eql 200
40+ versioned_get '/legacy' , 'v2' , macro_options
41+ last_response . status . should eql 404
42+ end
43+
44+ it 'should be able to specify multiple versions' do
45+ subject . version 'v1' , 'v2' , macro_options
46+ subject . get 'awesome' do
47+ "I exist"
48+ end
49+
50+ versioned_get '/awesome' , 'v1' , macro_options
51+ last_response . status . should eql 200
52+ versioned_get '/awesome' , 'v2' , macro_options
53+ last_response . status . should eql 200
54+ versioned_get '/awesome' , 'v3' , macro_options
55+ last_response . status . should eql 404
56+ end
57+
58+ it 'should allow the same endpoint to be implemented for different versions' do
59+ subject . version 'v2' , macro_options
60+ subject . get 'version' do
61+ request . env [ 'api.version' ]
62+ end
63+
64+ subject . version 'v1' , macro_options do
65+ get 'version' do
66+ "version " + request . env [ 'api.version' ]
67+ end
68+ end
69+
70+ versioned_get '/version' , 'v2' , macro_options
71+ last_response . status . should == 200
72+ last_response . body . should == 'v2'
73+ versioned_get '/version' , 'v1' , macro_options
74+ last_response . status . should == 200
75+ last_response . body . should == 'version v1'
76+ end
77+ end
0 commit comments