docme 0.0.1 → 1.0.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/bin/docme +66 -1
- data/lib/docme.rb +38 -68
- data/lib/docme/utils.rb +155 -65
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 09a5b6fd5fd9781268bc673895ca0782893e05db
|
4
|
+
data.tar.gz: 0741976b799c2d6ee3eabe81884d54b48bdbee4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9de4cccc8755ac221de6c7901518a20fffff998879049accb1ce4a06be3755d1786796cb7f40822e233acc05a0a23c1f3a01c41ee0ee2366ed98cb2815ab5075
|
7
|
+
data.tar.gz: 9c11b04a5e3d8f979f2174e55153f51568c0aefbcb4e74ff792581605b327b8a4fd46230790bb053603f8f1e315c101b1d5e23a8ba5e2048039358e33edeb35b
|
data/bin/docme
CHANGED
@@ -1,4 +1,69 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'docme'
|
4
|
-
|
4
|
+
require 'docme/utils'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
files = Array.new
|
8
|
+
path = ARGV[0]
|
9
|
+
|
10
|
+
|
11
|
+
puts "\n ***Begining docme magix***"
|
12
|
+
|
13
|
+
#create the directory where the site will be stored
|
14
|
+
if !File::directory?("docme_site")
|
15
|
+
puts "+Setting up docme's living arrangements."
|
16
|
+
Dir.mkdir("docme_site")
|
17
|
+
puts "Woohoo! docme has a home!"
|
18
|
+
end
|
19
|
+
|
20
|
+
#if a directory was provided
|
21
|
+
if File.directory?(path)
|
22
|
+
#foreach file in the path specified
|
23
|
+
Dir.foreach(path) do |file|
|
24
|
+
next if file == '.' || file == '..'
|
25
|
+
|
26
|
+
next if file.rindex('.', 0)
|
27
|
+
|
28
|
+
if File.directory?(path+"/"+file)
|
29
|
+
Dir.foreach(path + "/"+ file) do |f|
|
30
|
+
next if f == '.' || f == '..'
|
31
|
+
|
32
|
+
next if f.rindex('.', 0)
|
33
|
+
|
34
|
+
next if File.directory?(path+"/"+f)
|
35
|
+
|
36
|
+
page = Docme.jsParse(path+"/"+file+"/"+f)
|
37
|
+
|
38
|
+
#add page to docme dir
|
39
|
+
if page != nil
|
40
|
+
FileUtils.mv(page, "docme_site/"+page)
|
41
|
+
files.push(page)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
else
|
46
|
+
page = Docme.jsParse(path+"/"+file)
|
47
|
+
|
48
|
+
if page != nil
|
49
|
+
FileUtils.mv(page, "docme_site/"+page)
|
50
|
+
files.push(page)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
else #if a single file was provided
|
56
|
+
page = Docme.jsParse(path)
|
57
|
+
FileUtils.mv(page, "docme_site/"+page)
|
58
|
+
files.push(page)
|
59
|
+
end
|
60
|
+
|
61
|
+
renderIndex(files)
|
62
|
+
|
63
|
+
#add page to docme dir
|
64
|
+
FileUtils.mv("index.html", "docme_site/index.html")
|
65
|
+
|
66
|
+
puts "\nFiles generated by docme:"
|
67
|
+
puts files
|
68
|
+
puts "\n ***Finished docme magic!***"
|
69
|
+
puts "\n You can find your docs inside the `docme_site` folder. \n Hint: look for index.html\n\n"
|
data/lib/docme.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'docme/utils'
|
4
4
|
require 'erb'
|
5
|
+
require 'fileutils'
|
5
6
|
|
6
7
|
class Docme
|
7
8
|
|
@@ -13,41 +14,30 @@ class Docme
|
|
13
14
|
raise "Please provide a path to the file you wish to docme."
|
14
15
|
end
|
15
16
|
|
16
|
-
puts "\n ***Begining docme magix***"
|
17
|
-
|
18
|
-
#create the directory where the site will be stored
|
19
|
-
if !File::directory?("docme_site")
|
20
|
-
puts "+Setting up docme's living arrangements."
|
21
|
-
Dir.mkdir("docme_site")
|
22
|
-
end
|
23
|
-
|
24
|
-
puts "Woohoo! docme has a home!"
|
25
|
-
|
26
|
-
|
27
17
|
#GLOBALS
|
28
18
|
sourceFile = File.open(file).read
|
29
|
-
|
19
|
+
file = cleanFilename(file)
|
30
20
|
items = Hash.new
|
31
21
|
collective = Array.new
|
32
22
|
block_content = Hash.new
|
33
23
|
block_attr = nil
|
34
24
|
block_flag = 0
|
35
|
-
|
36
|
-
code = ""
|
25
|
+
multi_line = ""
|
37
26
|
|
38
27
|
|
39
28
|
#PARSING
|
40
29
|
sourceFile.each_line do |line|
|
41
|
-
|
42
|
-
|
30
|
+
|
31
|
+
stripLine = line.lstrip
|
32
|
+
|
43
33
|
|
44
34
|
#if this is the begining of a comment block then start a new function doc
|
45
|
-
if
|
35
|
+
if stripLine.rindex("/*", 1) == 0
|
46
36
|
next
|
47
37
|
end
|
48
38
|
|
49
39
|
#if this is the end of a comment block then there is nothing to do
|
50
|
-
if
|
40
|
+
if stripLine.rindex("*/", 1) == 0
|
51
41
|
#end the function section of the erb file
|
52
42
|
collective.push(items)
|
53
43
|
items = Hash.new
|
@@ -55,19 +45,19 @@ class Docme
|
|
55
45
|
end
|
56
46
|
|
57
47
|
#if line begins with '+' then we are defining an attribute
|
58
|
-
if
|
59
|
-
parts =
|
48
|
+
if stripLine.rindex("+",0) == 0
|
49
|
+
parts = stripLine.split(":")
|
60
50
|
|
61
51
|
#parts[0] == the attribute name
|
62
52
|
attribute = cleanAttribute(parts[0])
|
53
|
+
attribute = attribute.upcase
|
63
54
|
|
64
|
-
content = parts[1]
|
55
|
+
content = cleanContent(parts[1])
|
65
56
|
|
66
|
-
#if the content begins with '{' then we have a block
|
67
|
-
if content.rindex("{",0) == 0
|
57
|
+
#if the content begins with '{' then we have a regular block
|
58
|
+
if content.rindex("{{",0) == 0
|
68
59
|
#go to the next line and look for '-', set block flag
|
69
60
|
#add the attribute to the doc
|
70
|
-
puts attribute
|
71
61
|
block_flag = 1
|
72
62
|
block_attr = attribute
|
73
63
|
next
|
@@ -75,77 +65,57 @@ class Docme
|
|
75
65
|
|
76
66
|
#add content to the doc
|
77
67
|
items.store(attribute, content)
|
78
|
-
|
79
|
-
puts content
|
68
|
+
next
|
80
69
|
end
|
81
70
|
|
82
|
-
#if line begins with a '-' then we are in a block
|
83
|
-
if
|
84
|
-
parts =
|
71
|
+
#if line begins with a '-' then we are in a block, if we are in a block but there are no sub attributes then do a multi-line
|
72
|
+
if stripLine.rindex("-",0) == 0
|
73
|
+
parts = stripLine.split(":")
|
85
74
|
|
86
75
|
#parts[0] == the attribute name
|
87
76
|
attribute = cleanAttribute(parts[0])
|
77
|
+
attribute = attribute.upcase
|
88
78
|
|
89
|
-
content = parts[1]
|
90
|
-
|
91
|
-
if attribute == "var"
|
92
|
-
# look for arrow
|
93
|
-
content_parts = content.split("->")
|
94
|
-
var_name = content_parts[0]
|
95
|
-
var_description = content_parts[1].lstrip
|
96
|
-
|
97
|
-
#put the var_name in the doc
|
98
|
-
#put the var_description in the doc
|
99
|
-
puts var_name
|
100
|
-
puts var_description
|
101
|
-
block_content.store(var_name, var_description)
|
102
|
-
next
|
103
|
-
end
|
104
|
-
|
105
|
-
if attribute == "code"
|
106
|
-
code_flag = 1
|
107
|
-
#go ahead and skip to next line and process code
|
108
|
-
next
|
109
|
-
end
|
79
|
+
content = cleanContent(parts[1])
|
110
80
|
|
111
81
|
#if !var and !code, then process as regular attributes
|
112
82
|
#put the attribute name
|
113
83
|
#put the content
|
114
|
-
puts attribute
|
115
|
-
puts content
|
116
84
|
block_content.store(attribute, content)
|
117
85
|
next
|
118
86
|
end
|
119
87
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
block_attr = nil
|
124
|
-
code = ""
|
125
|
-
code_flag = 0
|
88
|
+
if block_flag == 1 && stripLine.rindex("}}",0) != 0
|
89
|
+
line = cleanCode(line)
|
90
|
+
multi_line.concat(line)
|
126
91
|
next
|
127
92
|
end
|
128
93
|
|
129
94
|
#if the block flag is set and we reach the end of a block, then we reached the end of a regular block, unset flag
|
130
|
-
if block_flag == 1 &&
|
95
|
+
if block_flag == 1 && stripLine.rindex("}}",0) == 0
|
131
96
|
block_flag = 0
|
132
|
-
|
97
|
+
|
98
|
+
if multi_line.length > 0
|
99
|
+
items.store(block_attr, multi_line)
|
100
|
+
else
|
101
|
+
items.store(block_attr, block_content)
|
102
|
+
end
|
103
|
+
|
104
|
+
multi_line = ""
|
133
105
|
block_attr = nil
|
134
106
|
block_content = Hash.new
|
135
107
|
next
|
136
108
|
end
|
137
109
|
|
138
|
-
|
139
|
-
if code_flag == 1
|
140
|
-
puts line
|
141
|
-
code.concat(line)
|
142
|
-
next
|
143
|
-
end
|
144
|
-
|
110
|
+
end
|
145
111
|
|
112
|
+
#RENDER SITE
|
113
|
+
if collective.length > 0
|
114
|
+
page = renderSite(file,collective)
|
115
|
+
return page
|
146
116
|
end
|
147
117
|
|
148
|
-
|
118
|
+
return nil
|
149
119
|
|
150
120
|
end
|
151
121
|
end
|
data/lib/docme/utils.rb
CHANGED
@@ -1,99 +1,185 @@
|
|
1
1
|
#docme utils
|
2
2
|
|
3
|
-
template = '<!DOCTYPE html>
|
4
|
-
<html>
|
5
3
|
|
6
|
-
<head>
|
7
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
8
|
-
</head>
|
9
4
|
|
10
|
-
|
5
|
+
def cleanAttribute(attr)
|
6
|
+
attr = attr.delete("+[")
|
7
|
+
attr = attr.delete("]")
|
8
|
+
attr = attr.delete("-")
|
9
|
+
return attr
|
10
|
+
end
|
11
11
|
|
12
|
+
def cleanCode(line)
|
13
|
+
line.gsub!("<", "<")
|
14
|
+
line.gsub!(">", ">")
|
12
15
|
|
13
|
-
|
16
|
+
return line
|
17
|
+
end
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
<h3 class="panel-title"><% attribute[1] %></h3>
|
21
|
-
</div>
|
22
|
-
<% end %>
|
23
|
-
<div class="panel-body">
|
24
|
-
Panel Content
|
25
|
-
</div>
|
26
|
-
</div>
|
19
|
+
def cleanContent(line)
|
20
|
+
line = line.lstrip
|
21
|
+
line.chop!
|
22
|
+
return line
|
23
|
+
end
|
27
24
|
|
28
|
-
|
29
|
-
|
25
|
+
def cleanFilename(file)
|
26
|
+
file = File.basename(file)
|
27
|
+
file = file.split(".")
|
28
|
+
file = file[0]
|
29
|
+
return file
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
def renderIndex(pages)
|
33
|
+
#puts pages
|
33
34
|
|
34
|
-
|
35
|
+
@pages = pages
|
36
|
+
|
37
|
+
template = '<!DOCTYPE html>
|
38
|
+
<html>
|
39
|
+
|
40
|
+
<style type="text/css">
|
41
|
+
#wrapper{
|
42
|
+
width: 70%;
|
43
|
+
padding-left: 30%;
|
44
|
+
font-size:2em;
|
45
|
+
}
|
46
|
+
</style>
|
47
|
+
|
48
|
+
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" media="screen">
|
49
|
+
|
50
|
+
<body>
|
51
|
+
<div id="wrapper">
|
52
|
+
<div class="list-group">
|
53
|
+
<% for @page in @pages %>
|
54
|
+
|
55
|
+
<% @name = cleanFilename(@page) %>
|
56
|
+
<a href="<%= @page %>" class="list-group-item list-group-item-info"><%= @name %></a>
|
57
|
+
|
58
|
+
<% end %>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
</body>
|
62
|
+
|
63
|
+
</html>'
|
64
|
+
|
65
|
+
renderer = ERB.new(template)
|
66
|
+
|
67
|
+
File.open("index.html", "w+") do |f|
|
68
|
+
f.write(renderer.result(binding))
|
69
|
+
end
|
70
|
+
|
71
|
+
return "index.html"
|
35
72
|
|
36
|
-
def cleanAttribute(attr)
|
37
|
-
attr = attr.delete("+[")
|
38
|
-
attr = attr.delete("]")
|
39
|
-
attr = attr.delete("-")
|
40
|
-
return attr
|
41
73
|
end
|
42
74
|
|
43
|
-
def renderSite(content)
|
75
|
+
def renderSite(file, content)
|
44
76
|
|
45
77
|
@collective = content
|
78
|
+
@filename = file
|
46
79
|
|
47
|
-
puts content
|
80
|
+
#puts content
|
48
81
|
|
49
82
|
template = '<!DOCTYPE html>
|
50
83
|
<html>
|
51
84
|
|
52
85
|
<head>
|
53
86
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
87
|
+
|
88
|
+
<style type="text/css">
|
89
|
+
body{
|
90
|
+
}
|
91
|
+
#panels-wrapper{
|
92
|
+
width: 80%;
|
93
|
+
float: left;
|
94
|
+
padding-left: 10%;
|
95
|
+
}
|
96
|
+
#side-panel{
|
97
|
+
width: 10%;
|
98
|
+
float: left;
|
99
|
+
padding-left: 10px;
|
100
|
+
}
|
101
|
+
pre-scrollable{
|
102
|
+
overflow-x: scroll;
|
103
|
+
white-space: nowrap;
|
104
|
+
}
|
105
|
+
|
106
|
+
p.code{
|
107
|
+
border:1px solid #000000;
|
108
|
+
overflow-x:scroll;
|
109
|
+
white-space: pre;
|
110
|
+
font-family:monospace,monospace;
|
111
|
+
font-size:1em;
|
112
|
+
background-color:#f5f5f5;
|
113
|
+
padding:2em;
|
114
|
+
}
|
115
|
+
|
116
|
+
</style>
|
54
117
|
</head>
|
55
118
|
|
56
119
|
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" media="screen">
|
57
120
|
|
58
121
|
|
59
122
|
<body>
|
60
|
-
|
61
|
-
|
62
|
-
<div class="
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
<% end %>
|
82
|
-
<% if @attribute[0] == "example" %>
|
83
|
-
<h4><%= @attribute[0] %></h4>
|
84
|
-
<div class ="well">
|
85
|
-
<pre><code><%= @attribute[1] %></code></pre>
|
86
|
-
</div>
|
123
|
+
<nav class="navbar navbar-default navbar-static-top" role="navigation">
|
124
|
+
<div class="container">
|
125
|
+
<div class="collapse navbar-collapse">
|
126
|
+
<ul class="nav navbar-nav">
|
127
|
+
<li><a class="navbar-brand" href="#"><%= @filename%></a></li>
|
128
|
+
</ul>
|
129
|
+
</div>
|
130
|
+
</div>
|
131
|
+
</nav>
|
132
|
+
<div id="side-panel" class="panel panel-default">
|
133
|
+
<a href="index.html" class="list-group-item list-group-item-info">INDEX</a>
|
134
|
+
</div>
|
135
|
+
<div id="panels-wrapper">
|
136
|
+
<% for @borg in @collective %>
|
137
|
+
<div class="panel panel-primary">
|
138
|
+
<% for @attribute in @borg %>
|
139
|
+
<% if @attribute[0] == "TITLE" %>
|
140
|
+
<div class="panel-heading" id="<%= @attribute[1]%>">
|
141
|
+
<h2 class="panel-title"><%= @attribute[1] %></h2>
|
142
|
+
</div>
|
143
|
+
<div class="panel-body">
|
87
144
|
<% end %>
|
88
|
-
<% if @attribute[0]
|
89
|
-
|
90
|
-
|
145
|
+
<% if @attribute[0] == "CODE" %>
|
146
|
+
<h4>CODE</h4>
|
147
|
+
<p class="code"><%= @attribute[1] %></p>
|
91
148
|
<% end %>
|
92
|
-
|
93
|
-
|
149
|
+
<% if @attribute[0] != "TITLE" && @attribute[0] != "CODE" %>
|
150
|
+
<% if @attribute[1].class == Hash %>
|
151
|
+
<% if @attribute[0] == "ANCHOR" %>
|
152
|
+
<h4><%= @attribute[0] %></h4>
|
153
|
+
<table class="table">
|
154
|
+
<% for @item in @attribute[1]%>
|
155
|
+
<tr>
|
156
|
+
<th><%= @item[0] %></th>
|
157
|
+
<td><a href="#<%= @item[1] %>"><%= @item[1] %></a></td>
|
158
|
+
</tr>
|
159
|
+
<% end %>
|
160
|
+
</table>
|
161
|
+
<% else %>
|
162
|
+
<h4><%= @attribute[0] %></h4>
|
163
|
+
<table class="table">
|
164
|
+
<% for @item in @attribute[1]%>
|
165
|
+
<tr>
|
166
|
+
<th><%= @item[0] %></th>
|
167
|
+
<td><%= @item[1] %></td>
|
168
|
+
</tr>
|
169
|
+
<% end %>
|
170
|
+
</table>
|
171
|
+
<% end %>
|
172
|
+
<% end %>
|
173
|
+
<% if @attribute[0] != "CODE" && @attribute[0] != "TITLE" && @attribute[1].class != Hash%>
|
174
|
+
<h4><%= @attribute[0]%></h4>
|
175
|
+
<p><%= @attribute[1] %></p>
|
176
|
+
<% end %>
|
177
|
+
<% end %>
|
178
|
+
<% end %>
|
179
|
+
</div>
|
94
180
|
</div>
|
181
|
+
<% end %>
|
95
182
|
</div>
|
96
|
-
<% end %>
|
97
183
|
|
98
184
|
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
99
185
|
</body>
|
@@ -102,9 +188,13 @@ def renderSite(content)
|
|
102
188
|
|
103
189
|
renderer = ERB.new(template)
|
104
190
|
|
105
|
-
|
191
|
+
page = @filename + ".html"
|
192
|
+
|
193
|
+
File.open(page, "w+") do |f|
|
106
194
|
f.write(renderer.result(binding))
|
107
195
|
end
|
108
196
|
|
197
|
+
return page
|
198
|
+
|
109
199
|
end
|
110
200
|
|
metadata
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bailey Belvis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: A gem to support easy documentation for
|
13
|
+
description: A gem to support easy documentation for any file that recognizes `/*
|
14
|
+
*/` as a code block. This gem lets you easily parse multiple files in a directory
|
15
|
+
and generate documentation that can be viewed in the browser. See the homepage
|
16
|
+
for syntax and examples.
|
14
17
|
email: baileyb622@gmail.com
|
15
18
|
executables:
|
16
19
|
- docme
|
@@ -24,7 +27,7 @@ homepage: https://github.com/philosowaffle/docme
|
|
24
27
|
licenses:
|
25
28
|
- Mozilla Public License
|
26
29
|
metadata: {}
|
27
|
-
post_install_message:
|
30
|
+
post_install_message: 'Woohoo! You now have docme :) '
|
28
31
|
rdoc_options: []
|
29
32
|
require_paths:
|
30
33
|
- lib
|