droutes 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9ee275f75f3f7d41c1ca47ff00d5e21374f00c0
4
- data.tar.gz: 8f7a4017c5547d13e72ea09cc10efb4d1feba0e1
3
+ metadata.gz: 2487bf8257158a4e4eea12767861d62924a5882d
4
+ data.tar.gz: 5a31c97b169ca682f99b896770888d49063f5b67
5
5
  SHA512:
6
- metadata.gz: b7a35a2e01f9966a7b82105f7e47f68f54a45bb3dbde6fda2885b50db0a05ac78ea6f0b5fa8f4e8f2d40c6d106dcd7bef8b21dca889385e0b3c4f9853123ac13
7
- data.tar.gz: 14aaced7ffabc0cf9fffcf29c5887009eea4d1bc0992b18812d8414ae84f9b97b3f532e1db50f77bf7f1f0a13e6b509fdd1b5332605078f05188f980b0bacda3
6
+ metadata.gz: 0f5a3ea1e82705e18f1b9e23d1b20b2a9d426060bec2752844d6b3305074ad49c593d37f910dd3c0a151ba311c7ae1e1899f07c52be4c1d5dfdf04c167c1d366
7
+ data.tar.gz: 5293285db0cb4bb36002cb274ec832e87c00de363d241c5bdaf6956a26c791b00b5c3499b9c74ea118a335c6f845a9f6b4e75a65d63b37d8a6eb3ce6c2c66f8c
@@ -25,7 +25,7 @@ module Droutes
25
25
  @klass = klass
26
26
  @action = action
27
27
  @verb = route.verb
28
- @path = route.path
28
+ @path = route.path.sub(/\(.:format\)/, "")
29
29
  @docs = docs
30
30
  end
31
31
 
@@ -0,0 +1,39 @@
1
+ module Droutes::Generators
2
+ class DocGenerator < Rails::Generators::Base
3
+ source_root File.expand_path("../templates", __FILE__)
4
+
5
+ def create_docs
6
+ @root = Droutes::Parser.new(Rails.application.routes.routes).parse
7
+ template("index.html", ".droutes/index.html")
8
+ @root.children.each do |klass|
9
+ @klass = klass
10
+ template("controller.html", ".droutes/#{klass.controller}.html")
11
+ end
12
+ end
13
+
14
+ protected
15
+
16
+ def example_json(params)
17
+ example_json = ''
18
+ params.each do |param|
19
+ eg_param = param.types.first
20
+ eg_text = if ["String", "Symbol"].include?(eg_param)
21
+ '"some string"'
22
+ elsif ["Fixnum", "Integer", "Int"].include?(eg_param)
23
+ rand(100)
24
+ elsif ["Float", "Double", "Numeric"].include?(eg_param)
25
+ (rand * 100.0).round(2)
26
+ elsif eg_param == "Hash"
27
+ '{}'
28
+ elsif eg_param == "Arrray"
29
+ '[]'
30
+ end
31
+ example_json += "\n \"#{param.name}\": #{eg_text},"
32
+ end
33
+ unless example_json.blank?
34
+ example_json = "<p>Example JSON Body</p><pre><code>{#{example_json}\n}</code></pre>"
35
+ end
36
+ example_json
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,74 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title><%= Rails.application.class.parent_name %> :: <%= @klass.controller %></title>
7
+ <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
8
+ </head>
9
+
10
+ <body>
11
+ <div class="container">
12
+ <div class="row">
13
+ <div class="col-xs-10 col-offset-xs-1">
14
+ <h1><%= @klass.controller.camelize %> API</h1>
15
+ <h4>Return to index</h4>
16
+
17
+ <div class="api">
18
+
19
+ <p class="summary">
20
+ <%= @klass.docs.gsub(/\n/, " ") %>
21
+ </p>
22
+
23
+ <div class="toc">
24
+ <h3>Routes</h3>
25
+ <% structs = @klass.paths.keys.sort.collect {|key| @klass.paths[key].values}.flatten %>
26
+ <dl>
27
+ <% structs.each do |struct| %>
28
+ <dt>
29
+ <a href="<%= struct.action %>">
30
+ <%= "#{struct.verb} #{struct.path}" %>
31
+ </a>
32
+ </dt>
33
+ <dd><%= struct.docs.summary %></dd>
34
+ <% end %>
35
+ </dl>
36
+ </div>
37
+
38
+ <div class="routes">
39
+ <h3>Documentation</h3>
40
+ <% structs.each do |struct| %>
41
+ <div class="route panel panel-default">
42
+ <div class="panel-heading">
43
+ <h2 class="panel-title">
44
+ <code><%= "#{struct.verb} #{struct.path}" %></code> <small><%= struct.action %></small>
45
+ </h2>
46
+ </div>
47
+ <div class="panel-body">
48
+ <p class="summary"><%= struct.docs.summary %></p>
49
+ <dl class="dl-horizontal">
50
+ <% struct.docs.tags("param").each do |param| %>
51
+ <dt><%= param.name %></dt>
52
+ <dd>[<%= param.types.join("|") %>] <%= param.text %></dd>
53
+ <% end %>
54
+ <% ret = struct.docs.tags("return").first %>
55
+ <% if ret %>
56
+ <dt>[return]</dt>
57
+ <dd>[<%= ret.types.join("|") %>] <%= ret.text %></dd>
58
+ <% end %>
59
+ </dl>
60
+ <% eg_json = example_json(struct.docs.tags("param")) %>
61
+ <% unless eg_json.blank? %>
62
+ <div><%= eg_json %></div>
63
+ <% end %>
64
+ </div>
65
+ </div>
66
+ <% end %>
67
+ </div>
68
+
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </div>
73
+ </body>
74
+ </html>
@@ -0,0 +1,41 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title><%= Rails.application.class.parent_name %> :: Route Index</title>
7
+ <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
8
+ </head>
9
+
10
+ <body>
11
+ <div class="container">
12
+ <div class="row">
13
+ <h1><%= Rails.application.class.parent_name %> :: Route Index</h1>
14
+ <p>
15
+ Below is a collection of controllers and their paths. Some paths may
16
+ have multiple verbs associated with it (like a call that accepts both
17
+ GET and POST requests).
18
+ </p>
19
+ <div class="col-xs-8 col-offset-xs-2">
20
+ <% @root.children.each do |klass| %>
21
+ <h3>
22
+ <a href="<%= klass.controller %>.html">
23
+ <%= klass.controller.camelize %>
24
+ </a>
25
+ </h3>
26
+ <ul>
27
+ <% klass.paths.each do |path, actions| %>
28
+ <% struct = actions.values.first %>
29
+ <li>
30
+ <a href="<%= klass.controller %>.html#<%= struct.action %>">
31
+ <%= path %>
32
+ </a>
33
+ </li>
34
+ <% end %>
35
+ </ul>
36
+ <% end %>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ </body>
41
+ </head>
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.7
4
+ version: 0.0.8
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-27 00:00:00.000000000 Z
11
+ date: 2014-07-28 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.
@@ -23,7 +23,9 @@ files:
23
23
  - README.md
24
24
  - lib/droutes.rb
25
25
  - lib/droutes/parser.rb
26
- - lib/generators/droutes/documentation_generator.rb
26
+ - lib/generators/droutes/doc/doc_generator.rb
27
+ - lib/generators/droutes/doc/templates/controller.html
28
+ - lib/generators/droutes/doc/templates/index.html
27
29
  homepage: https://github.com/kolorahl/droutes
28
30
  licenses:
29
31
  - GPLv3
@@ -1,141 +0,0 @@
1
- module Droutes::Generators
2
- class DocumentationGenerator < Rails::Generators::Base
3
- source_root File.expand_path("../templates", __FILE__)
4
-
5
- desc "Parse application routes and create REST API documentation."
6
- def create_docs
7
- @root = Droutes::Parser.new(Rails.application.routes.routes).parse
8
- @root.children.each do |klass|
9
- next if klass.paths.empty?
10
- content = class_doc(klass)
11
- create_file(".droutes/#{klass.controller}.html", page_wrapper(klass.controller.camelcase, content))
12
- end
13
- create_file(".droutes/index.html", index_page)
14
- end
15
-
16
- protected
17
-
18
- def action_id(struct)
19
- "#{struct.controller}_#{struct.action}"
20
- end
21
-
22
- private
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
-
50
- def page_wrapper(title, content)
51
- <<HTML
52
- <!doctype html>
53
- <html lang="en">
54
- <head>
55
- <meta charset="utf-8">
56
- <meta name="viewport" content="width=device-width, initial-scale=1">
57
- <title>#{title}</title>
58
- <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
59
- </head>
60
-
61
- <body>
62
- #{content}
63
-
64
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
65
- <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
66
- </body>
67
- </html>
68
- HTML
69
- end
70
-
71
- def class_doc(klass)
72
- structs = []
73
- klass.paths.keys.sort.each {|path| structs += klass.paths[path].values}
74
- <<DOC
75
- <div class="container-fluid">
76
- <h1>#{klass.controller} API</h1>
77
- <div id="#{klass.controller}" class="controller">
78
- <p class="summary">#{klass.docs.gsub(/\n/, " ")}</p>
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>
91
- </div>
92
- </div>
93
- DOC
94
- end
95
-
96
- def action_doc(struct)
97
- <<DOC
98
- <div id="#{action_id(struct)}" class="action panel panel-default">
99
- <div class="panel-heading">
100
- <h2 class="route panel-title"><code>#{struct.verb} #{struct.path}</code> <small>#{struct.action}</small></h2>
101
- </div>
102
- <div class="comments panel-body">
103
- #{comments_doc(struct.docs)}
104
- </div>
105
- </div>
106
- DOC
107
- end
108
-
109
- def comments_doc(doc)
110
- params_dl = '<dl class="dl-horizontal params">'
111
- example_json = ''
112
- doc.tags("param").each do |param|
113
- params_dl += " <dt>#{param.name}</dt><dd>[#{param.types.join('|')}] #{param.text}</dd>"
114
- eg_param = param.types.first
115
- eg_text = if ["String", "Symbol"].include?(eg_param)
116
- '"some string"'
117
- elsif ["Fixnum", "Integer", "Int"].include?(eg_param)
118
- rand(100)
119
- elsif ["Float", "Double", "Numeric"].include?(eg_param)
120
- (rand * 100.0).round(2)
121
- elsif eg_param == "Hash"
122
- '{}'
123
- elsif eg_param == "Arrray"
124
- '[]'
125
- end
126
- example_json += "\n \"#{param.name}\": #{eg_text},"
127
- end
128
- unless example_json.blank?
129
- example_json = "<p>Example JSON Body</p><pre><code>{#{example_json}\n}</code></pre>"
130
- end
131
- <<DOC
132
- <p class="summary">#{doc.summary}</p>
133
- <dl class="dl-horizontal params">
134
- #{params_dl}
135
- #{(ret = doc.tags("return").first) and "<dt>[return]</dt><dd>#{ret.text}</dd>"}
136
- </dl>
137
- #{example_json}
138
- DOC
139
- end
140
- end
141
- end