sinatra-rabbit 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,10 +20,10 @@
20
20
  %th Name
21
21
  %th Constraints
22
22
  %th Description
23
- %tbody
23
+ %tbody.features
24
24
  - collection.features.each do |f|
25
25
  %tr
26
- %td
26
+ %td.feature
27
27
  %em=f.name
28
28
  %td
29
29
  - f.constraints.each do |c, v|
@@ -50,7 +50,7 @@
50
50
  %th HTTP method
51
51
  %th URL
52
52
  %th Description
53
- %tbody
53
+ %tbody.operations
54
54
  - collection.operations.each do |o|
55
55
  %tr
56
56
  %td
@@ -14,6 +14,7 @@
14
14
  # License for the specific language governing permissions and limitations
15
15
  # under the License.
16
16
 
17
+ require 'haml'
17
18
  require_relative './dsl'
18
19
  require_relative './param'
19
20
  require_relative './base_collection'
@@ -94,7 +95,7 @@ module Sinatra
94
95
  base.get '/docs' do
95
96
  css_file = File.read(File.join(File.dirname(__FILE__), '..', 'docs', 'bootstrap.min.css'))
96
97
  index_file = File.read(File.join(File.dirname(__FILE__), '..', 'docs', 'api.haml'))
97
- haml index_file, :locals => { :base => base.documentation_class, :css => css_file }
98
+ haml index_file, :locals => { :base => base.respond_to?(:documentation_class) ? base.documentation_class : base, :css => css_file }
98
99
  end
99
100
  end
100
101
 
@@ -107,14 +108,15 @@ module Sinatra
107
108
  @parent_collection = parent_collection
108
109
  class_eval(&block)
109
110
  generate_head_route unless Rabbit.disabled? :head_routes
110
- generate_option_route unless Rabbit.disabled? :options_routes
111
+ generate_options_route unless Rabbit.disabled? :options_routes
111
112
  generate_docs_route unless Rabbit.disabled? :docs
112
113
  self
113
114
  end
114
115
 
115
- def self.generate_option_route
116
- base_class.options '/docs' + full_path do
117
- header 'Allow' => operations.map { |o| o.operation_name }.join(',')
116
+ def self.generate_options_route
117
+ methods = (['OPTIONS'] + operations.map { |o| o.http_method.to_s.upcase }).uniq.join(',')
118
+ base_class.options full_path do
119
+ headers 'Allow' => methods
118
120
  status 200
119
121
  end
120
122
  end
@@ -257,7 +259,7 @@ module Sinatra
257
259
  # Define Sinatra route and generate OPTIONS route if enabled
258
260
  base_class.send(new_operation.http_method || http_method_for(operation_name), new_operation.full_path, route_options, &new_operation.control)
259
261
 
260
- new_operation.generate_option_route(root_path + route_for(path, operation_name, :no_id_and_member)) unless Rabbit.disabled?(:options_routes)
262
+ new_operation.generate_options_route(root_path + route_for(path, operation_name, :no_id_and_member)) unless Rabbit.disabled?(:options_routes)
261
263
  new_operation.generate_head_route(root_path + route_for(path, operation_name, :member)) unless Rabbit.disabled?(:head_routes)
262
264
  new_operation.generate_docs_route(new_operation.docs_url) unless Rabbit.disabled?(:doc_routes)
263
265
  self
@@ -314,7 +316,7 @@ module Sinatra
314
316
  end
315
317
  end
316
318
 
317
- def self.generate_option_route(path)
319
+ def self.generate_options_route(path)
318
320
  operation_params = params.map { |p| p.to_s }.join(',')
319
321
  @collection.base_class.options path do
320
322
  headers 'Allow' => operation_params
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
29
29
  a simple REST API using easy to undestand DSL.
30
30
  EOF
31
31
 
32
- s.version = '1.1.2'
32
+ s.version = '1.1.3'
33
33
  s.date = Time.now
34
34
  s.summary = %q{Sinatra REST API DSL}
35
35
  s.files = FileList[
data/tests/app_test.rb CHANGED
@@ -27,6 +27,19 @@ describe Sample do
27
27
  status.must_equal 200
28
28
  end
29
29
 
30
+ it "should respond to OPTIONS request for sample collection" do
31
+ options '/sample'
32
+ status.must_equal 200
33
+ allow_header = last_response.headers['Allow'].split(',')
34
+ allow_header.wont_be_empty
35
+ allow_header.must_include 'OPTIONS'
36
+ allow_header.must_include 'GET'
37
+ allow_header.must_include 'POST'
38
+ allow_header.must_include 'DELETE'
39
+ last_response.headers['Content-Length'].must_equal '0'
40
+ last_response.body.must_be_empty
41
+ end
42
+
30
43
  it "should respond 200 to HEAD request for index operation in sample collection" do
31
44
  head '/sample/index'
32
45
  status.must_equal 200
data/tests/docs_test.rb CHANGED
@@ -24,34 +24,29 @@ describe 'Documentation' do
24
24
 
25
25
  it "should return list of collections in entrypoint" do
26
26
  get '/docs'
27
- html.css('html body > h1').text.must_equal 'Sample'
27
+ html.css('html body h1').text.must_equal 'Sample'
28
28
  html.css('html body ul li').wont_be_empty
29
29
  html.css('html body ul li a').wont_be_empty
30
30
  end
31
31
 
32
32
  it "should return valid collection name when query collection documentation" do
33
33
  get '/docs/sample'
34
- html.css('html body > h1').text.must_equal 'SampleCollection'
34
+ html.css('html body h1').text.must_equal 'Sample'
35
35
  end
36
36
 
37
37
  it "should return valid collection description when query collection documentation" do
38
38
  get '/docs/sample'
39
- html.css('html body > blockquote').text.must_equal 'Test'
40
- end
41
-
42
- it "should return valid collection url when query collection documentation" do
43
- get '/docs/sample'
44
- html.css('html body > .url').text.must_equal '/sample'
39
+ html.css('html body blockquote p').text.strip.must_equal 'Test'
45
40
  end
46
41
 
47
42
  it "should return list of features when query collection documentation" do
48
43
  get '/docs/sample'
49
- html.css('html body .features .feature').map { |f| f.text}.must_include 'user_data', 'user_name'
44
+ html.css('html body .features .feature').map { |f| f.text.strip}.must_include 'user_data', 'user_name'
50
45
  end
51
46
 
52
47
  it "should return complete list of operations when query collection documentation" do
53
48
  get '/docs/sample'
54
- html.css('html body .operations tr').size.must_equal 7
49
+ html.css('html body .operations tr').size.must_equal 6
55
50
  end
56
51
 
57
52
  it "should provide valid links from entrypoint to collection" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-rabbit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-21 00:00:00.000000000 Z
12
+ date: 2012-11-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -37,20 +37,20 @@ extra_rdoc_files:
37
37
  files:
38
38
  - lib/sinatra/rabbit.rb
39
39
  - lib/sinatra/docs/api.haml
40
- - lib/sinatra/docs/collection.haml
41
40
  - lib/sinatra/docs/operation.haml
41
+ - lib/sinatra/docs/collection.haml
42
42
  - lib/sinatra/docs/bootstrap.min.css
43
43
  - lib/sinatra/rabbit/base.rb
44
- - lib/sinatra/rabbit/base_collection.rb
45
- - lib/sinatra/rabbit/dsl.rb
46
44
  - lib/sinatra/rabbit/features.rb
47
- - lib/sinatra/rabbit/param.rb
48
45
  - lib/sinatra/rabbit/validator.rb
46
+ - lib/sinatra/rabbit/dsl.rb
47
+ - lib/sinatra/rabbit/param.rb
48
+ - lib/sinatra/rabbit/base_collection.rb
49
49
  - tests/app_test.rb
50
+ - tests/params_test.rb
51
+ - tests/fixtures.rb
50
52
  - tests/docs_test.rb
51
53
  - tests/dsl_test.rb
52
- - tests/fixtures.rb
53
- - tests/params_test.rb
54
54
  - LICENSE
55
55
  - README.md
56
56
  - sinatra-rabbit.gemspec