rapidoc 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +5 -1
- data/lib/rapidoc/action_doc.rb +6 -1
- data/lib/rapidoc/config.rb +4 -0
- data/lib/rapidoc/resources_extractor.rb +3 -0
- data/lib/rapidoc/routes_doc.rb +10 -1
- data/lib/rapidoc/templates/index.html.hbs +2 -2
- data/lib/rapidoc/version.rb +1 -1
- data/lib/rapidoc/yaml_parser.rb +1 -1
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/public/users_controller.yml +6 -0
- data/spec/lib/config_spec.rb +12 -0
- data/spec/lib/rapidoc_spec.rb +40 -19
- data/spec/lib/resource_doc_spec.rb +2 -0
- data/spec/lib/resources_extractor_spec.rb +1 -1
- data/spec/lib/routes_doc_spec.rb +44 -6
- data/spec/lib/templates_generator_spec.rb +9 -6
- data/spec/lib/yaml_parser_spec.rb +1 -1
- metadata +10 -2
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Rapidoc
|
2
2
|
|
3
|
-
REST API documentation generator for rails projects ( 0.
|
3
|
+
REST API documentation generator for rails projects ( 0.06 version ).
|
4
4
|
|
5
5
|
This gem let you generate API documentation of your rails project in html format.
|
6
6
|
It uses routes information, rapidoc comments and json examples for generate
|
@@ -125,6 +125,10 @@ For more details and options please visit the Wiki[https://github.com/drinor/rap
|
|
125
125
|
|
126
126
|
* If there is an error in your documentation, rapidoc show you an error message with the file name that contains the error and block lines.
|
127
127
|
|
128
|
+
* Trace mode ( configuration[https://github.com/drinor/rapidoc/wiki/Configuration] ).
|
129
|
+
|
130
|
+
* Simple and intuitive navigation.
|
131
|
+
|
128
132
|
== Contributing
|
129
133
|
|
130
134
|
1. Fork it
|
data/lib/rapidoc/action_doc.rb
CHANGED
@@ -21,10 +21,12 @@ module Rapidoc
|
|
21
21
|
def initialize( routes_info, controller_info, examples_route )
|
22
22
|
@resource = routes_info[:resource].to_s
|
23
23
|
@action = routes_info[:action].to_s
|
24
|
-
@action_method = routes_info[:method].to_s
|
24
|
+
@action_method = routes_info[:method].to_s || '-----'
|
25
25
|
@urls = routes_info[:urls]
|
26
26
|
@file = @resource + '_' + @action
|
27
27
|
|
28
|
+
puts " - Generating #{@action} action documentation..." if trace?
|
29
|
+
|
28
30
|
add_controller_info( controller_info ) if controller_info
|
29
31
|
load_examples( examples_route ) if examples_route
|
30
32
|
load_params_errors if default_errors? @action and @params
|
@@ -37,6 +39,7 @@ module Rapidoc
|
|
37
39
|
private
|
38
40
|
|
39
41
|
def add_controller_info( controller_info )
|
42
|
+
puts " + Adding info from controller..." if trace?
|
40
43
|
@description = controller_info["description"]
|
41
44
|
@response_formats = default_response_formats || controller_info["response_formats"]
|
42
45
|
@params = controller_info["params"]
|
@@ -74,12 +77,14 @@ module Rapidoc
|
|
74
77
|
def load_request( examples_route )
|
75
78
|
file = examples_route + '/' + @resource + '_' + @action + '_request.json'
|
76
79
|
return unless File.exists?( file )
|
80
|
+
puts " + Loading request examples..." if trace?
|
77
81
|
File.open( file ){ |f| @example_req = JSON.pretty_generate( JSON.parse(f.read) ) }
|
78
82
|
end
|
79
83
|
|
80
84
|
def load_response( examples_route )
|
81
85
|
file = examples_route + '/' + @resource + '_' + @action + '_response.json'
|
82
86
|
return unless File.exists?( file )
|
87
|
+
puts " + Loading response examples..." if trace?
|
83
88
|
File.open( file ){ |f| @example_res = JSON.pretty_generate( JSON.parse(f.read) ) }
|
84
89
|
end
|
85
90
|
end
|
data/lib/rapidoc/config.rb
CHANGED
@@ -16,6 +16,8 @@ module Rapidoc
|
|
16
16
|
# @return [RoutesDoc] class with routes info
|
17
17
|
#
|
18
18
|
def get_routes_doc
|
19
|
+
puts "Executing 'rake routes'..." if trace?
|
20
|
+
|
19
21
|
routes_doc = RoutesDoc.new
|
20
22
|
routes = Dir.chdir( ::Rails.root.to_s ) { `rake routes` }
|
21
23
|
|
@@ -35,6 +37,7 @@ module Rapidoc
|
|
35
37
|
resources_names = routes_doc.get_resources_names - resources_black_list
|
36
38
|
|
37
39
|
resources_names.map do |resource|
|
40
|
+
puts "Generating #{resource} documentation..." if trace?
|
38
41
|
ResourceDoc.new( resource, routes_doc.get_actions_route_info( resource ) )
|
39
42
|
end
|
40
43
|
end
|
data/lib/rapidoc/routes_doc.rb
CHANGED
@@ -11,12 +11,21 @@ module Rapidoc
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def add_route( route )
|
14
|
-
if route.split.size
|
14
|
+
if route.split.size > 3
|
15
15
|
method, url, controller_action = route.split.slice(1, 3)
|
16
|
+
elsif route.split.size == 2
|
17
|
+
url, controller_action = route.split
|
16
18
|
else
|
17
19
|
method, url, controller_action = route.split
|
18
20
|
end
|
19
21
|
|
22
|
+
# check when method is not specified
|
23
|
+
unless controller_action.include? '#'
|
24
|
+
controller_action = url
|
25
|
+
url = method
|
26
|
+
method = nil
|
27
|
+
end
|
28
|
+
|
20
29
|
add_resource_route( method, url, controller_action )
|
21
30
|
end
|
22
31
|
|
@@ -28,7 +28,7 @@
|
|
28
28
|
<div class="nav-collapse">
|
29
29
|
<ul class="nav">
|
30
30
|
<li class="active"><a href="index.html">Resources</a></li>
|
31
|
-
<li><a href="https://github.com/drinor/rapidoc.git">Contact</a></li>
|
31
|
+
<li><a target="_blank" href="https://github.com/drinor/rapidoc.git">Contact</a></li>
|
32
32
|
</ul>
|
33
33
|
</div>
|
34
34
|
</div>
|
@@ -64,7 +64,7 @@
|
|
64
64
|
</td>
|
65
65
|
<td>
|
66
66
|
{{#if ../this.has_controller_info}}
|
67
|
-
<a href="actions/{{../../this.resource}}_{{../../this.action}}.html"
|
67
|
+
<a href="actions/{{../../this.resource}}_{{../../this.action}}.html">{{this}}<a>
|
68
68
|
{{else}}
|
69
69
|
{{this}}
|
70
70
|
{{/if}}
|
data/lib/rapidoc/version.rb
CHANGED
data/lib/rapidoc/yaml_parser.rb
CHANGED
data/spec/dummy/config/routes.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
Dummy::Application.routes.draw do
|
2
|
+
match 'testing', :to => 'testing#redirect', :constraints => { :id => /[A-Z]\d{5}/ }
|
3
|
+
match '*tests', :controller => 'testing', :action => 'index'
|
4
|
+
|
2
5
|
resources :users, :only => [ :index, :show, :create ] do
|
3
6
|
resources :albums, :only => [ :index, :show, :create, :update, :destroy ] do
|
4
7
|
resources :images, :only => [ :index, :show, :create, :update, :destroy ]
|
data/spec/lib/config_spec.rb
CHANGED
@@ -23,6 +23,18 @@ describe Rapidoc::Config do
|
|
23
23
|
gem_templates_dir('template.hbs').should =~ /(.*)\/templates\/template\.hbs/
|
24
24
|
end
|
25
25
|
|
26
|
+
context "when call trace?" do
|
27
|
+
it "returns false with default options" do
|
28
|
+
trace?.should == false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns true when config has trace=true" do
|
32
|
+
File.open( config_file_path, 'w') { |file| file.write "trace: true" }
|
33
|
+
load_config
|
34
|
+
trace?.should == true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
26
38
|
context "when call controller_dir" do
|
27
39
|
context "when use default route" do
|
28
40
|
it "controller_dir returns correct dir" do
|
data/spec/lib/rapidoc_spec.rb
CHANGED
@@ -4,36 +4,57 @@ include Rapidoc
|
|
4
4
|
|
5
5
|
describe Rapidoc do
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
after :all do
|
13
|
-
remove_doc
|
14
|
-
end
|
7
|
+
context "when all is ok" do
|
8
|
+
before :all do
|
9
|
+
create_structure
|
10
|
+
load_config
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
File.exists?( config_dir( "rapidoc.yml" ) ).should == true
|
13
|
+
after :all do
|
14
|
+
remove_doc
|
19
15
|
end
|
20
16
|
|
21
|
-
|
22
|
-
|
17
|
+
context "when create estructure" do
|
18
|
+
it "should create config files" do
|
19
|
+
File.exists?( config_dir( "rapidoc.yml" ) ).should == true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should create target dir" do
|
23
|
+
File.directory?( target_dir ).should == true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should create example dir" do
|
27
|
+
File.directory?( examples_dir ).should == true
|
28
|
+
end
|
23
29
|
end
|
24
30
|
|
25
|
-
|
26
|
-
|
31
|
+
context "when executing genarate_doc function" do
|
32
|
+
before do
|
33
|
+
generate_doc
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should create new index.html file" do
|
37
|
+
File.exists?( ::Rails.root.to_s + "/rapidoc/index.html" ).should == true
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
29
41
|
|
30
|
-
context "when
|
31
|
-
before do
|
42
|
+
context "when there is an error" do
|
43
|
+
before :all do
|
44
|
+
create_structure
|
45
|
+
|
46
|
+
File.open( config_file_path, 'w') { |file| file.write "controllers_route: \"public\"" }
|
47
|
+
load_config
|
48
|
+
|
49
|
+
controller = controller_dir 'users_controller.yml'
|
50
|
+
File.open( controller, 'w' ) { |file|
|
51
|
+
file.write "# =begin action\nhttp_status:\n - 201\n #params:\n - name: 'name'\n# =end\n"
|
52
|
+
}
|
53
|
+
|
32
54
|
generate_doc
|
33
55
|
end
|
34
56
|
|
35
|
-
it "should
|
36
|
-
File.exists?( ::Rails.root.to_s + "/rapidoc/index.html" ).should == true
|
57
|
+
it "should return error" do
|
37
58
|
end
|
38
59
|
end
|
39
60
|
end
|
@@ -69,7 +69,7 @@ describe Rapidoc::ResourcesExtractor do
|
|
69
69
|
|
70
70
|
it "return correct order" do
|
71
71
|
names = @resources.map(&:name)
|
72
|
-
names.should == [ "albums", "images", "users" ]
|
72
|
+
names.should == [ "albums", "images", "testing", "users" ]
|
73
73
|
end
|
74
74
|
|
75
75
|
context "when check resource with controller" do
|
data/spec/lib/routes_doc_spec.rb
CHANGED
@@ -105,14 +105,52 @@ describe RoutesDoc do
|
|
105
105
|
end
|
106
106
|
|
107
107
|
context "when we call add_route function" do
|
108
|
-
|
109
|
-
|
108
|
+
context "when route has 3 normal elements" do
|
109
|
+
before do
|
110
|
+
@route = 'GET /users(.:format) users#index'
|
111
|
+
end
|
112
|
+
|
113
|
+
it "calls add_resource_route function with correct params" do
|
114
|
+
@routes_doc.should_receive( :add_resource_route ).
|
115
|
+
with( 'GET', '/users(.:format)', 'users#index' )
|
116
|
+
@routes_doc.add_route( @route )
|
117
|
+
end
|
110
118
|
end
|
111
119
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
120
|
+
context "when route has 3 elements" do
|
121
|
+
before do
|
122
|
+
@route = '/users/:id(.:format) users#index {:id=>/[A-Z]\d{5}/}'
|
123
|
+
end
|
124
|
+
|
125
|
+
it "calls add_resource_route function with correct params" do
|
126
|
+
@routes_doc.should_receive( :add_resource_route ).
|
127
|
+
with( nil, '/users/:id(.:format)', 'users#index' )
|
128
|
+
@routes_doc.add_route( @route )
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when route has 4 elements" do
|
133
|
+
before do
|
134
|
+
@route = 'user /users/:id(.:format) users#index {:id=>/[A-Z]\d{5}/}'
|
135
|
+
end
|
136
|
+
|
137
|
+
it "calls add_resource_route function with correct params" do
|
138
|
+
@routes_doc.should_receive( :add_resource_route ).
|
139
|
+
with( nil, '/users/:id(.:format)', 'users#index' )
|
140
|
+
@routes_doc.add_route( @route )
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context "when route has 2 elements" do
|
145
|
+
before do
|
146
|
+
@route = '/users/:id(.:format) users#index'
|
147
|
+
end
|
148
|
+
|
149
|
+
it "calls add_resource_route function with correct params" do
|
150
|
+
@routes_doc.should_receive( :add_resource_route ).
|
151
|
+
with( nil, '/users/:id(.:format)', 'users#index' )
|
152
|
+
@routes_doc.add_route( @route )
|
153
|
+
end
|
116
154
|
end
|
117
155
|
end
|
118
156
|
|
@@ -4,12 +4,13 @@ include Rapidoc
|
|
4
4
|
|
5
5
|
describe TemplatesGenerator do
|
6
6
|
|
7
|
-
before
|
8
|
-
|
7
|
+
before do
|
8
|
+
reset_structure
|
9
|
+
load_config
|
9
10
|
end
|
10
11
|
|
11
|
-
after
|
12
|
-
remove_doc
|
12
|
+
after do
|
13
|
+
#remove_doc
|
13
14
|
end
|
14
15
|
|
15
16
|
context "when call generate_index_template" do
|
@@ -35,8 +36,10 @@ describe TemplatesGenerator do
|
|
35
36
|
it "should create new action.html file for each action"do
|
36
37
|
@resources.each do |resource|
|
37
38
|
resource.actions_doc.each do |action_doc|
|
38
|
-
|
39
|
-
|
39
|
+
if action_doc.has_controller_info
|
40
|
+
route = actions_dir + "/#{resource.name}_#{action_doc.action}.html"
|
41
|
+
File.exists?( route ).should == true
|
42
|
+
end
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rapidoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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: 2013-
|
12
|
+
date: 2013-05-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -183,6 +183,7 @@ files:
|
|
183
183
|
- spec/dummy/public/favicon.ico
|
184
184
|
- spec/dummy/public/index.html
|
185
185
|
- spec/dummy/public/robots.txt
|
186
|
+
- spec/dummy/public/users_controller.yml
|
186
187
|
- spec/dummy/salida/users_create_response.json
|
187
188
|
- spec/dummy/script/rails
|
188
189
|
- spec/dummy/test/fixtures/.gitkeep
|
@@ -221,12 +222,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
221
222
|
- - ! '>='
|
222
223
|
- !ruby/object:Gem::Version
|
223
224
|
version: '0'
|
225
|
+
segments:
|
226
|
+
- 0
|
227
|
+
hash: -3398396139760812886
|
224
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
229
|
none: false
|
226
230
|
requirements:
|
227
231
|
- - ! '>='
|
228
232
|
- !ruby/object:Gem::Version
|
229
233
|
version: '0'
|
234
|
+
segments:
|
235
|
+
- 0
|
236
|
+
hash: -3398396139760812886
|
230
237
|
requirements: []
|
231
238
|
rubyforge_project:
|
232
239
|
rubygems_version: 1.8.25
|
@@ -273,6 +280,7 @@ test_files:
|
|
273
280
|
- spec/dummy/public/favicon.ico
|
274
281
|
- spec/dummy/public/index.html
|
275
282
|
- spec/dummy/public/robots.txt
|
283
|
+
- spec/dummy/public/users_controller.yml
|
276
284
|
- spec/dummy/salida/users_create_response.json
|
277
285
|
- spec/dummy/script/rails
|
278
286
|
- spec/dummy/test/fixtures/.gitkeep
|