sinatra-rabbit 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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