api_doc_generation 0.2.1 → 0.4.0
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.
- checksums.yaml +4 -4
- data/README.md +25 -0
- data/lib/api_doc_generation/format_file.rb +10 -3
- data/lib/api_doc_generation/generation.rb +2 -2
- data/lib/api_doc_generation/version.rb +1 -1
- data/lib/api_doc_generation/view_helper.rb +3 -1
- data/templates/_javascript.js.erb +58 -0
- data/templates/_menu.html.erb +10 -1
- data/templates/_style.css.erb +45 -0
- data/templates/doc_detailed.html.erb +2 -63
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81d519ebc01140cc7b74d66069a3b6eb3f8a07c7
|
4
|
+
data.tar.gz: 47b6f328b09fc166044e4236ee927890d8527691
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06f370284d952468cf80dd44eeb0854264310913aacc96a7a9b80dd7d3dd755331252fe83906968320ce34662743a38b669704064fa9f5ce9f0dcfbbc0d6f800
|
7
|
+
data.tar.gz: ea5d24152928832e48c56e6406cb89b70928b30e94247afe10c5a2c4cac9a005b1271d8878953b99b951b606adf065c812c2525c92eecc2c933aef7d28341a20
|
data/README.md
CHANGED
@@ -72,6 +72,31 @@ __代码注释格式:__
|
|
72
72
|
|
73
73
|
上面已经给出了api说明,参数,返回,错误信息,而api地址和请求方法将会自动从Rails中查找出来
|
74
74
|
|
75
|
+
__总的来说,注释格式有三种__
|
76
|
+
|
77
|
+
1.
|
78
|
+
```
|
79
|
+
# 层级1: 说明
|
80
|
+
```
|
81
|
+
|
82
|
+
2.
|
83
|
+
```
|
84
|
+
# 层级1:
|
85
|
+
# 层级2: 说明
|
86
|
+
# 层级2: 说明
|
87
|
+
```
|
88
|
+
|
89
|
+
3.
|
90
|
+
```
|
91
|
+
# 层级1:
|
92
|
+
# 层级2: 说明
|
93
|
+
# 层级3
|
94
|
+
# 更多的层级,这些层级只会显示在层级2中,等于就是层级2的说明
|
95
|
+
# 字段2: 说明
|
96
|
+
```
|
97
|
+
|
98
|
+
|
99
|
+
上面的格式可以任意组合,要注意的是,解析时层级是按 (空格 / 2)来计算的
|
75
100
|
|
76
101
|
## Level
|
77
102
|
* 默认level显示所有
|
@@ -12,13 +12,20 @@ module ApiDocGeneration; module FormatFile; class << self
|
|
12
12
|
actions = actions.map do |action|
|
13
13
|
method = klass.instance_method action
|
14
14
|
filepath, line = method.source_location
|
15
|
+
|
15
16
|
note = FormatNote.analyze(filelines, line - 2)
|
16
17
|
note["Level"] ||= ''
|
17
18
|
note['Name'] = action.to_s
|
18
19
|
note = get_routes(klass, action).merge(note) unless note['Path']
|
20
|
+
|
19
21
|
note
|
20
22
|
end
|
21
23
|
|
24
|
+
actions.delete_if do |val|
|
25
|
+
val['Return'].nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
|
22
29
|
{
|
23
30
|
'Path' => path,
|
24
31
|
'Klass' => klass.to_s,
|
@@ -33,7 +40,7 @@ module ApiDocGeneration; module FormatFile; class << self
|
|
33
40
|
def get_controller_about(filelines, class_name)
|
34
41
|
filelines.each_with_index do |line, line_number|
|
35
42
|
next if line =~ /^\s*(\#.*)?$/
|
36
|
-
|
43
|
+
|
37
44
|
doc = FormatNote.analyze(filelines, line_number -1)
|
38
45
|
|
39
46
|
doc.delete_if {|key, v| key =~ /encoding/ }
|
@@ -71,7 +78,7 @@ module ApiDocGeneration; module FormatFile; class << self
|
|
71
78
|
require 'rails/application/route_inspector'
|
72
79
|
inspector = Rails::Application::RouteInspector.new
|
73
80
|
|
74
|
-
inspector.collect_routes(all_routes) +
|
75
|
-
inspector.instance_variable_get(:@engines).flatten
|
81
|
+
inspector.collect_routes(all_routes) +
|
82
|
+
inspector.instance_variable_get(:@engines).values.flatten
|
76
83
|
end
|
77
84
|
end; end; end
|
@@ -43,8 +43,8 @@ module ApiDocGeneration; class Generation
|
|
43
43
|
|
44
44
|
# API_CONTROLLERS_DIR = File.expand_path('app/controllers/api/**/*.rb', Rails.root)
|
45
45
|
def each_api_controllers_file(codes_path, &block)
|
46
|
-
|
47
|
-
|
46
|
+
paths = codes_path.end_with?('.rb') ? [codes_path] : Dir[codes_path + '/**/*.rb']
|
47
|
+
paths.each do |path|
|
48
48
|
next if path =~ /base_controller.*\.rb$/
|
49
49
|
block.call path
|
50
50
|
end
|
@@ -31,7 +31,9 @@ module ApiDocGeneration; class ViewHelper
|
|
31
31
|
################## View Helper ###################
|
32
32
|
|
33
33
|
def render(path, opts = {})
|
34
|
-
|
34
|
+
path = "templates/_#{path}.*.erb"
|
35
|
+
file_path = Dir[File.expand_path(path, ROOT_PATH)].first
|
36
|
+
raise "no found file '#{path}'" unless file_path
|
35
37
|
|
36
38
|
template = ERB.new(File.read(file_path))
|
37
39
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
$(function(){
|
2
|
+
var no_print_class = 'no_print';
|
3
|
+
var iframe = $('.helper_iframe')[0];
|
4
|
+
var idoc = iframe.contentDocument;
|
5
|
+
|
6
|
+
|
7
|
+
// 设置勾选内容的打印及显示
|
8
|
+
// 添加或移除no_print类
|
9
|
+
$('.print_selector').change(function(event){
|
10
|
+
var $this = $(this);
|
11
|
+
var $a = $this.next();
|
12
|
+
var $top = $a.parent();
|
13
|
+
var $target_el = $($a.attr('href'));
|
14
|
+
|
15
|
+
if ($this.is(":checked")) {
|
16
|
+
$top.removeClass(no_print_class)
|
17
|
+
$target_el.removeClass(no_print_class);
|
18
|
+
} else {
|
19
|
+
$top.addClass(no_print_class)
|
20
|
+
$target_el.addClass(no_print_class);
|
21
|
+
}
|
22
|
+
});
|
23
|
+
|
24
|
+
|
25
|
+
// 下载保存勾选的内容
|
26
|
+
$("a.save_to_file").click(function(event){
|
27
|
+
var head = document.head.innerHTML;
|
28
|
+
idoc.body.innerHTML = document.body.innerHTML;
|
29
|
+
|
30
|
+
$(idoc.body).find("." + no_print_class).remove();
|
31
|
+
|
32
|
+
var html = '<html><head>';
|
33
|
+
html += head + '</head><body>';
|
34
|
+
html += idoc.body.innerHTML + '</body></html>';
|
35
|
+
|
36
|
+
window.open('data:application/octet-stream;charset=utf-8,' + encodeURIComponent(html));
|
37
|
+
return false;
|
38
|
+
});
|
39
|
+
|
40
|
+
|
41
|
+
// 合并文档
|
42
|
+
$("#merge_doc").change(function(event){
|
43
|
+
var fr = new FileReader();
|
44
|
+
|
45
|
+
fr.onloadend = function(e){
|
46
|
+
var $body = $(document.body);
|
47
|
+
idoc.write(this.result);
|
48
|
+
|
49
|
+
var menus = $(idoc.body).find(".list>ul>li");
|
50
|
+
var controllers = $(idoc.body).find(".controller");
|
51
|
+
|
52
|
+
$body.find(".list>ul").append(menus);
|
53
|
+
$body.append(controllers);
|
54
|
+
}
|
55
|
+
|
56
|
+
fr.readAsText(this.files[0]);
|
57
|
+
});
|
58
|
+
});
|
data/templates/_menu.html.erb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
<div class='list'>
|
2
|
-
<strong class='no_print no_opacity about'>*
|
2
|
+
<strong class='no_print no_opacity about'>* 被勾选的内容才会被打印、保存</strong>
|
3
|
+
|
4
|
+
<div class='helpers'>
|
5
|
+
<label for='merge_doc' class='btn no_print no_opacity'>合并文档...</label>
|
6
|
+
<input type='file' id='merge_doc' style='display:none'/>
|
7
|
+
|
8
|
+
<a href='#' class='no_print no_opacity btn save_to_file'>保存到新文件</a>
|
9
|
+
|
10
|
+
<iframe class='helper_iframe' style='display:none'></iframe>
|
11
|
+
</div>
|
3
12
|
|
4
13
|
<ul>
|
5
14
|
<% @documents.each do |controller| %>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
.title {
|
2
|
+
text-align: center;
|
3
|
+
color: blank;
|
4
|
+
}
|
5
|
+
|
6
|
+
.controller, .list {
|
7
|
+
width: 900px;
|
8
|
+
border: 1px solid;
|
9
|
+
margin: 20px auto 40 auto;
|
10
|
+
}
|
11
|
+
|
12
|
+
.list {
|
13
|
+
padding-top: 20px;
|
14
|
+
}
|
15
|
+
|
16
|
+
.list .helpers {
|
17
|
+
padding: 20px;
|
18
|
+
}
|
19
|
+
|
20
|
+
.controller-title {
|
21
|
+
text-align: center;
|
22
|
+
}
|
23
|
+
|
24
|
+
.action {
|
25
|
+
margin-top: 40px;
|
26
|
+
padding: 20px 40px 20px 20px;
|
27
|
+
}
|
28
|
+
|
29
|
+
.about {
|
30
|
+
padding-left: 20px;
|
31
|
+
}
|
32
|
+
|
33
|
+
.no_print {
|
34
|
+
opacity: 0.4;
|
35
|
+
}
|
36
|
+
|
37
|
+
.no_opacity {
|
38
|
+
opacity: 1;
|
39
|
+
}
|
40
|
+
|
41
|
+
@media print {
|
42
|
+
.no_print {
|
43
|
+
display: none;
|
44
|
+
}
|
45
|
+
}
|
@@ -5,71 +5,10 @@
|
|
5
5
|
<title><%= @title %></title>
|
6
6
|
|
7
7
|
<link href='http://libs.baidu.com/bootstrap/2.3.2/css/bootstrap.css' rel='stylesheet'>
|
8
|
-
<style type='text/css'>
|
9
|
-
.title {
|
10
|
-
text-align: center;
|
11
|
-
color: blank;
|
12
|
-
}
|
13
|
-
|
14
|
-
.controller, .list {
|
15
|
-
width: 900px;
|
16
|
-
border: 1px solid;
|
17
|
-
margin: 20px auto 40 auto;
|
18
|
-
}
|
19
|
-
|
20
|
-
.list {
|
21
|
-
padding-top: 20px;
|
22
|
-
}
|
23
|
-
|
24
|
-
.controller-title {
|
25
|
-
text-align: center;
|
26
|
-
}
|
27
|
-
|
28
|
-
.action {
|
29
|
-
margin-top: 40px;
|
30
|
-
padding: 20px 40px 20px 20px;
|
31
|
-
}
|
32
|
-
|
33
|
-
.about {
|
34
|
-
padding-left: 20px;
|
35
|
-
}
|
36
|
-
|
37
|
-
.no_print {
|
38
|
-
opacity: 0.4;
|
39
|
-
}
|
40
|
-
|
41
|
-
.no_opacity {
|
42
|
-
opacity: 1;
|
43
|
-
}
|
44
|
-
|
45
|
-
@media print {
|
46
|
-
.no_print {
|
47
|
-
display: none;
|
48
|
-
}
|
49
|
-
}
|
50
|
-
</style>
|
8
|
+
<style type='text/css'><%= render 'style' %></style>
|
51
9
|
|
52
10
|
<script type='text/javascript' src='http://code.jquery.com/jquery-2.0.3.min.js'></script>
|
53
|
-
<script type='text/javascript'>
|
54
|
-
$(function(){
|
55
|
-
var no_print_class = 'no_print';
|
56
|
-
|
57
|
-
$('.print_selector').change(function(event){
|
58
|
-
var $this = $(this);
|
59
|
-
var $a = $this.next();
|
60
|
-
var $top = $a.parent();
|
61
|
-
var $target_el = $($a.attr('href'));
|
62
|
-
|
63
|
-
if ($this.is(":checked")) {
|
64
|
-
$top.removeClass(no_print_class)
|
65
|
-
$target_el.removeClass(no_print_class);
|
66
|
-
} else {
|
67
|
-
$top.addClass(no_print_class)
|
68
|
-
$target_el.addClass(no_print_class);
|
69
|
-
}
|
70
|
-
});
|
71
|
-
});
|
72
|
-
</script>
|
11
|
+
<script type='text/javascript'><%= render 'javascript' %></script>
|
73
12
|
</head>
|
74
13
|
|
75
14
|
<body>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_doc_generation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jiangzhi.xie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,8 +60,10 @@ files:
|
|
60
60
|
- lib/rake/api_doc_generation.rb
|
61
61
|
- lib/rake/tasks/api_doc.rake
|
62
62
|
- templates/_controller.html.erb
|
63
|
+
- templates/_javascript.js.erb
|
63
64
|
- templates/_menu.html.erb
|
64
65
|
- templates/_params_table.html.erb
|
66
|
+
- templates/_style.css.erb
|
65
67
|
- templates/doc.html.erb
|
66
68
|
- templates/doc_detailed.html.erb
|
67
69
|
homepage: ''
|