yard-sinatra 0.4.0.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ copyright (c) 2010 Konstantin Haase. All rights reserved.
2
+
3
+ Developed by: Konstantin Haase
4
+ http://github.com/rkh/big_band
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to
8
+ deal with the Software without restriction, including without limitation the
9
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
+ sell copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+ 1. Redistributions of source code must retain the above copyright notice,
13
+ this list of conditions and the following disclaimers.
14
+ 2. Redistributions in binary form must reproduce the above copyright
15
+ notice, this list of conditions and the following disclaimers in the
16
+ documentation and/or other materials provided with the distribution.
17
+ 3. Neither the name of Konstantin Haase, nor the names of other contributors
18
+ may be used to endorse or promote products derived from this Software without
19
+ specific prior written permission.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
27
+ WITH THE SOFTWARE.
data/README.md CHANGED
@@ -37,6 +37,11 @@ Add comments to your routes (well, that's optional):
37
37
  get "/settings" do
38
38
  haml :settings, {}, :settings => settings(current_user)
39
39
  end
40
+
41
+ # Error 404 Page Not Found
42
+ not_found do
43
+ haml :'404'
44
+ end
40
45
 
41
46
  end
42
47
 
data/lib/yard/sinatra.rb CHANGED
@@ -6,6 +6,10 @@ module YARD
6
6
  def self.routes
7
7
  YARD::Handlers::Sinatra::AbstractRouteHandler.routes
8
8
  end
9
+
10
+ def self.error_handlers
11
+ YARD::Handlers::Sinatra::AbstractRouteHandler.error_handlers
12
+ end
9
13
  end
10
14
 
11
15
  module CodeObjects
@@ -37,11 +41,19 @@ module YARD
37
41
  @routes ||= []
38
42
  end
39
43
 
44
+ def self.error_handlers
45
+ @error_handlers ||= []
46
+ end
47
+
40
48
  def process
41
- path = http_path
42
- path = $1 if path =~ /^"(.*)"$/
43
- register_route(http_verb, path)
44
- register_route('HEAD', path) if http_verb == 'GET'
49
+ case http_verb
50
+ when 'NOT_FOUND'
51
+ register_error_handler(http_verb)
52
+ else
53
+ path = http_path
54
+ path = $1 if path =~ /^"(.*)"$/
55
+ register_route(http_verb, path)
56
+ end
45
57
  end
46
58
 
47
59
  def register_route(verb, path, doc = nil)
@@ -63,6 +75,22 @@ module YARD
63
75
  AbstractRouteHandler.routes << route
64
76
  yield(route) if block_given?
65
77
  end
78
+
79
+ def register_error_handler(verb, doc = nil)
80
+ error_handler = register CodeObjects::RouteObject.new(namespace, verb, :instance) do |o|
81
+ o.visibility = "public"
82
+ o.source = statement.source
83
+ o.signature = verb
84
+ o.explicit = true
85
+ o.scope = scope
86
+ o.docstring = statement.comments
87
+ o.http_verb = verb
88
+ o.real_name = verb
89
+ o.add_file(parser.file, statement.line)
90
+ end
91
+ AbstractRouteHandler.error_handlers << error_handler
92
+ yield(error_handler) if block_given?
93
+ end
66
94
  end
67
95
 
68
96
  # Route handler for YARD's source parser.
@@ -74,6 +102,7 @@ module YARD
74
102
  handles method_call(:put)
75
103
  handles method_call(:delete)
76
104
  handles method_call(:head)
105
+ handles method_call(:not_found)
77
106
 
78
107
  def http_verb
79
108
  statement.method_name(true).to_s.upcase
@@ -88,7 +117,7 @@ module YARD
88
117
  module Legacy
89
118
  class RouteHandler < Ruby::Legacy::Base
90
119
  include AbstractRouteHandler
91
- handles /\A(get|post|put|delete|head)[\s\(].*/m
120
+ handles /\A(get|post|put|delete|head|not_found)[\s\(].*/m
92
121
 
93
122
  def http_verb
94
123
  statement.tokens.first.text.upcase
data/spec/example_app.rb CHANGED
@@ -17,7 +17,12 @@ class ExampleApp < Sinatra::Base
17
17
  get "/settings" do
18
18
  haml :settings, {}, :settings => settings(current_user)
19
19
  end
20
-
20
+
21
+ # Error 404 Page Not Found
22
+ not_found do
23
+ haml :'404'
24
+ end
25
+
21
26
  put("/settings") { }
22
27
  delete("/settings") { }
23
28
  post("/settings") { }
@@ -7,7 +7,7 @@ describe YARD::Sinatra do
7
7
  end
8
8
 
9
9
  it "reads sinatra routes" do
10
- YARD::Sinatra.routes.size.should == 6
10
+ YARD::Sinatra.routes.size.should == 5
11
11
  end
12
12
 
13
13
  it "sets properties correctly" do
@@ -18,4 +18,17 @@ describe YARD::Sinatra do
18
18
  route.docstring.should =~ /Displays a settings page for the current user/ if route.http_verb == "GET"
19
19
  end
20
20
  end
21
+
22
+ it "reads sinatra error handlers" do
23
+ YARD::Sinatra.error_handlers.size.should == 1
24
+ end
25
+
26
+ it "sets error handlers correctly" do
27
+ YARD::Sinatra.error_handlers.each do |error_handler|
28
+ %w[NOT_FOUND].should include(error_handler.http_verb)
29
+ error_handler.file.should =~ /example_app\.rb$/
30
+ error_handler.docstring.should =~ /Error 404 Page Not Found/ if error_handler.http_verb == "NOT_FOUND"
31
+ end
32
+ end
33
+
21
34
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yard-sinatra
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 11
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 4
8
+ - 5
8
9
  - 0
9
- - 1
10
- version: 0.4.0.1
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Konstantin Haase
@@ -15,16 +15,18 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-03-05 00:00:00 +01:00
18
+ date: 2010-07-09 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: yard
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
25
26
  requirements:
26
27
  - - ~>
27
28
  - !ruby/object:Gem::Version
29
+ hash: 13
28
30
  segments:
29
31
  - 0
30
32
  - 5
@@ -36,9 +38,11 @@ dependencies:
36
38
  name: rspec
37
39
  prerelease: false
38
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
39
42
  requirements:
40
43
  - - ">="
41
44
  - !ruby/object:Gem::Version
45
+ hash: 27
42
46
  segments:
43
47
  - 1
44
48
  - 3
@@ -60,6 +64,7 @@ files:
60
64
  - spec/example_app.rb
61
65
  - spec/yard/sinatra_spec.rb
62
66
  - README.md
67
+ - LICENSE
63
68
  has_rdoc: yard
64
69
  homepage: http://github.com/rkh/yard-sinatra
65
70
  licenses: []
@@ -70,23 +75,27 @@ rdoc_options: []
70
75
  require_paths:
71
76
  - lib
72
77
  required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
73
79
  requirements:
74
80
  - - ">="
75
81
  - !ruby/object:Gem::Version
82
+ hash: 3
76
83
  segments:
77
84
  - 0
78
85
  version: "0"
79
86
  required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
80
88
  requirements:
81
89
  - - ">="
82
90
  - !ruby/object:Gem::Version
91
+ hash: 3
83
92
  segments:
84
93
  - 0
85
94
  version: "0"
86
95
  requirements: []
87
96
 
88
97
  rubyforge_project:
89
- rubygems_version: 1.3.6
98
+ rubygems_version: 1.3.7
90
99
  signing_key:
91
100
  specification_version: 3
92
101
  summary: Displays Sinatra routes (including comments) in YARD output (part of BigBand).