droutes 0.0.4 → 0.0.5
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/lib/droutes/parser.rb +9 -10
- data/lib/generators/droutes/documentation_generator.rb +46 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47ee0524691de209a3dee20c9ca1176a3862714c
|
4
|
+
data.tar.gz: a162c36703e06c9bd4c1c063d15cc4f9f53f0d5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25bab484f40f837a89140723d921e24f15831729b6004b67a7b9994ad2c7f34f1fb7a5966716618a6c42b173036221950bf768e02946290c96429229099f2e60
|
7
|
+
data.tar.gz: faf84bb566832af5926278dfe9e5b1f566627eea596d2ae67df129c24caf837de6a9d204ee95ffb4e2effdc428abf79a21571bdbcbc206ff34202b9dfb9363fd
|
data/lib/droutes/parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Droutes
|
2
2
|
class ClassStruct
|
3
|
-
attr_reader :name, :controller, :
|
3
|
+
attr_reader :name, :controller, :paths, :children, :docs
|
4
4
|
|
5
5
|
def initialize(class_name, docs="")
|
6
6
|
@name = class_name
|
@@ -8,13 +8,13 @@ module Droutes
|
|
8
8
|
controller = class_name.underscore
|
9
9
|
@controller = controller[0, controller.length - "_controller".length]
|
10
10
|
end
|
11
|
-
@
|
11
|
+
@paths = ::Hash.new { |h, k| h[k] = {} }
|
12
12
|
@children = []
|
13
13
|
@docs = docs || ""
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
@
|
16
|
+
def add_to_path(struct)
|
17
|
+
@paths[struct.path][struct.action] = struct
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -59,7 +59,6 @@ module Droutes
|
|
59
59
|
protected
|
60
60
|
|
61
61
|
def handle(ast, klass)
|
62
|
-
data = ::Hash.new {|h, k| h[k] = []}
|
63
62
|
ast.each {|node| handle_class(node, klass) if node.is_a?(YARD::Parser::Ruby::ClassNode)}
|
64
63
|
end
|
65
64
|
|
@@ -78,7 +77,7 @@ module Droutes
|
|
78
77
|
def handle_class(ast, klass)
|
79
78
|
class_name = ast.class_name.path.join("::")
|
80
79
|
newKlass = ClassStruct.new(class_name, ast.docstring)
|
81
|
-
|
80
|
+
handle_node(ast, newKlass)
|
82
81
|
klass.children.append(newKlass) if klass
|
83
82
|
end
|
84
83
|
|
@@ -86,10 +85,10 @@ module Droutes
|
|
86
85
|
action = ast.method_name(true).to_s
|
87
86
|
route = @routes[klass.controller][action]
|
88
87
|
return unless route
|
89
|
-
klass.
|
90
|
-
|
91
|
-
|
92
|
-
|
88
|
+
klass.add_to_path(Struct.new(klass,
|
89
|
+
action,
|
90
|
+
route,
|
91
|
+
YARD::Docstring.new(ast.docstring)))
|
93
92
|
end
|
94
93
|
end
|
95
94
|
end
|
@@ -4,12 +4,13 @@ module Droutes::Generators
|
|
4
4
|
|
5
5
|
desc "Parse application routes and create REST API documentation."
|
6
6
|
def create_docs
|
7
|
-
root = Droutes::Parser.new(Rails.application.routes.routes).parse
|
8
|
-
root.children.each do |klass|
|
9
|
-
next if klass.
|
7
|
+
@root = Droutes::Parser.new(Rails.application.routes.routes).parse
|
8
|
+
@root.children.each do |klass|
|
9
|
+
next if klass.paths.empty?
|
10
10
|
content = class_doc(klass)
|
11
11
|
create_file(".droutes/#{klass.controller}.html", page_wrapper(klass.controller.camelcase, content))
|
12
12
|
end
|
13
|
+
create_file(".droutes/index.html", index_page)
|
13
14
|
end
|
14
15
|
|
15
16
|
protected
|
@@ -20,6 +21,32 @@ module Droutes::Generators
|
|
20
21
|
|
21
22
|
private
|
22
23
|
|
24
|
+
def index_page
|
25
|
+
<<HTML
|
26
|
+
<!doctype html>
|
27
|
+
<html lang="en">
|
28
|
+
<head>
|
29
|
+
<meta charset="utf-8">
|
30
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
31
|
+
<title>Route Index</title>
|
32
|
+
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
|
33
|
+
</head>
|
34
|
+
|
35
|
+
<body>
|
36
|
+
<p>All available routes (sorted by name):</p>
|
37
|
+
<ul>
|
38
|
+
#{@root.children.collect do |node|
|
39
|
+
node.paths.collect do |path, actions|
|
40
|
+
struct = actions.values.first
|
41
|
+
" <li><a href=\"/#{struct.controller}.html##{action_id(struct)}\">#{path}</a></li>"
|
42
|
+
end.join("\n")
|
43
|
+
end.join("")}
|
44
|
+
</ul>
|
45
|
+
</body>
|
46
|
+
</html>
|
47
|
+
HTML
|
48
|
+
end
|
49
|
+
|
23
50
|
def page_wrapper(title, content)
|
24
51
|
<<HTML
|
25
52
|
<!doctype html>
|
@@ -42,12 +69,25 @@ HTML
|
|
42
69
|
end
|
43
70
|
|
44
71
|
def class_doc(klass)
|
72
|
+
structs = []
|
73
|
+
klass.paths.keys.sort.each {|path| structs += klass.paths[path].values}
|
45
74
|
<<DOC
|
46
75
|
<div class="container-fluid">
|
47
|
-
<h1>#{klass.controller
|
76
|
+
<h1>#{klass.controller} API</h1>
|
48
77
|
<div id="#{klass.controller}" class="controller">
|
49
78
|
<p class="summary">#{klass.docs.gsub(/\n/, " ")}</p>
|
50
|
-
|
79
|
+
<div class="toc">
|
80
|
+
<h3>Routes</h3>
|
81
|
+
<dl>
|
82
|
+
#{structs.collect do |struct|
|
83
|
+
" <dt><a href=\"##{action_id(struct)}\">#{struct.verb} #{struct.path}</a></dt><dd>#{struct.docs.summary}</dd>"
|
84
|
+
end.join("\n")}
|
85
|
+
</dl>
|
86
|
+
</div>
|
87
|
+
<div class="routes">
|
88
|
+
<h3>Documentation</h3>
|
89
|
+
#{structs.collect {|struct| action_doc(struct)}.join("\n")}
|
90
|
+
</div>
|
51
91
|
</div>
|
52
92
|
</div>
|
53
93
|
DOC
|
@@ -57,7 +97,7 @@ DOC
|
|
57
97
|
<<DOC
|
58
98
|
<div id="#{action_id(struct)}" class="action panel panel-default">
|
59
99
|
<div class="panel-heading">
|
60
|
-
<h2 class="route panel-title"><code>#{struct.path}</code> <small>#{struct.
|
100
|
+
<h2 class="route panel-title"><code>#{struct.verb} #{struct.path}</code> <small>#{struct.action}</small></h2>
|
61
101
|
</div>
|
62
102
|
<div class="comments panel-body">
|
63
103
|
#{comments_doc(struct.docs)}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: droutes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Margison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Generating documentation for REST endpoints for client developers can
|
14
14
|
be a pain, but droutes can make it easy.
|