docushin 0.0.1 → 0.0.2
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 +7 -0
- data/.gitignore +5 -1
- data/app/controllers/docushin/application_controller.rb +19 -0
- data/app/controllers/docushin/collections_controller.rb +42 -0
- data/app/controllers/docushin/home_controller.rb +12 -0
- data/app/controllers/docushin/routes_controller.rb +17 -30
- data/app/helpers/docushin/application_helper.rb +3 -0
- data/app/views/docushin/collections/create.html.erb +1 -0
- data/app/views/docushin/collections/index.html.erb +23 -0
- data/app/views/docushin/collections/new.html.erb +52 -0
- data/app/views/docushin/home/index.html.erb +25 -0
- data/app/views/docushin/routes/_form.html.erb +87 -21
- data/app/views/docushin/routes/index.html.erb +8 -8
- data/app/views/docushin/routes/show.html.erb +6 -5
- data/app/views/layouts/docushin.html.erb +113 -82
- data/config/routes.rb +3 -1
- data/docushin.gemspec +3 -1
- data/lib/docushin.rb +9 -0
- data/lib/docushin/route.rb +52 -11
- data/lib/docushin/route_set.rb +18 -8
- data/lib/docushin/version.rb +1 -1
- data/spec/docushin/route_set_spec.rb +2 -2
- data/spec/docushin/route_spec.rb +22 -9
- data/spec/dummy/config/routes.rb +1 -1
- data/spec/dummy/doc/docushin/collections.yml +7 -0
- data/spec/dummy/doc/docushin/fff1454d69c4340014bef52217525fed.md +5 -0
- data/spec/requests/collections_spec.rb +11 -0
- data/spec/requests/home_spec.rb +8 -0
- data/spec/requests/requests_helper.rb +1 -0
- data/spec/requests/routes_spec.rb +7 -0
- data/spec/spec_helper.rb +3 -1
- metadata +61 -34
- data/spec/dummy/log/development.log +0 -0
- data/spec/dummy/log/test.log +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ff44f887590f3c84d28dc2956398a3a647b861ce
|
4
|
+
data.tar.gz: 1f3bb7880b63f6989f74d89bbfc46c07ce8edbcb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cdc378fb7c22a1e920e793f51ac1e861a5414aef39446b688378b97f7cb1567fe8c9620633315d1c4ceb8cf3c3a887bf22b60271951acc9c77e9bf6201816a10
|
7
|
+
data.tar.gz: abe028ef7c8e8412e0733c04de4600476611205bf0311448f0390a84a2841262706f84eaa984d3007191ee34dc65577336faf41865676876488192a8bd7891ea
|
data/.gitignore
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
*.gem
|
2
2
|
*.rbc
|
3
|
+
*.log
|
4
|
+
.\#*
|
5
|
+
\#*\#
|
3
6
|
.bundle
|
4
7
|
.config
|
5
8
|
.yardoc
|
@@ -8,10 +11,11 @@ Gemfile.lock
|
|
8
11
|
InstalledFiles
|
9
12
|
_yardoc
|
10
13
|
coverage
|
11
|
-
doc/
|
12
14
|
lib/bundler/man
|
13
15
|
pkg
|
14
16
|
rdoc
|
17
|
+
spec/dummy/log/test.log
|
18
|
+
spec/dummy/log/development.log
|
15
19
|
spec/reports
|
16
20
|
test/tmp
|
17
21
|
test/version_tmp
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Docushin
|
2
|
+
class ApplicationController < ActionController::Base
|
3
|
+
layout "docushin"
|
4
|
+
|
5
|
+
private
|
6
|
+
def authorize!
|
7
|
+
render :text => "Unauthorized" unless Rails.env.development?
|
8
|
+
return false
|
9
|
+
end
|
10
|
+
|
11
|
+
def load_route_set
|
12
|
+
@route_set = Docushin::RouteSet.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_default_base_path
|
16
|
+
File.join(Rails.root, 'doc', 'docushin')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Docushin
|
2
|
+
class CollectionsController < Docushin::ApplicationController
|
3
|
+
before_filter :authorize!, :only => [:edit, :update, :destroy]
|
4
|
+
before_filter :set_default_base_path, :load_route_set
|
5
|
+
|
6
|
+
def index
|
7
|
+
@content = YAML.load_documents(File.open(File.join(Rails.root, "doc", "docushin", "collections.yml"))) rescue nil
|
8
|
+
@collections = @content.nil? ? [] : @content
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
end
|
16
|
+
|
17
|
+
def edit
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
@content = YAML.load_documents(File.open(File.join(Rails.root, "doc", "docushin", "collections.yml"))) rescue nil
|
22
|
+
@content.reject! {|obj| obj[:id] == params[:id]}
|
23
|
+
File.open(File.join(set_default_base_path,"collections.yml"), "w") do |file|
|
24
|
+
@content.each do|item|
|
25
|
+
file.write item.to_yaml
|
26
|
+
end
|
27
|
+
file.close
|
28
|
+
end
|
29
|
+
redirect_to collections_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def create
|
33
|
+
params[:title] = params[:title].blank? ? "Default Title" : params[:title]
|
34
|
+
@data = {:id => Digest::MD5.hexdigest(DateTime.now.to_s), :title => params[:title], :route_set_ids => params[:route_set_ids] }
|
35
|
+
FileUtils.mkdir_p(set_default_base_path) unless File.exists?(set_default_base_path)
|
36
|
+
File.open(File.join(set_default_base_path,"collections.yml"), "a+") do |file|
|
37
|
+
file.write @data.to_yaml
|
38
|
+
file.close
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Docushin
|
2
|
+
class HomeController < Docushin::ApplicationController
|
3
|
+
before_filter :load_route_set
|
4
|
+
|
5
|
+
def index
|
6
|
+
@routes = Dir["#{File.join(Rails.root, "doc/docushin")}/*.md"].collect do |file|
|
7
|
+
@route_set.find(File.basename(file, ".md"))
|
8
|
+
end
|
9
|
+
@routes = @routes.compact.sort_by(&:updated_at).reverse.take(10)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,36 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Docushin
|
2
|
+
class RoutesController < Docushin::ApplicationController
|
3
|
+
before_filter :load_route_set
|
4
|
+
before_filter :authorize!, :only => [:edit, :update]
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def show
|
9
|
-
@route = @routes_collection.find_by_filename_hash(params[:id])
|
10
|
-
end
|
11
|
-
|
12
|
-
def edit
|
13
|
-
@route = @routes_collection.find_by_filename_hash(params[:id])
|
14
|
-
end
|
6
|
+
def index
|
7
|
+
end
|
15
8
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
FileUtils.mkdir_p(@path) unless File.exists?(@path)
|
9
|
+
def show
|
10
|
+
@route = @route_set.find(params[:id])
|
11
|
+
end
|
20
12
|
|
21
|
-
|
22
|
-
|
23
|
-
file.write "description: " + params[:route][:description] + "\n"
|
24
|
-
file.write "---\n"
|
25
|
-
file.write params[:route][:content]
|
26
|
-
file.close
|
13
|
+
def edit
|
14
|
+
@route = @route_set.find(params[:id])
|
27
15
|
end
|
28
|
-
redirect_to routes_path
|
29
|
-
end
|
30
16
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
17
|
+
def update
|
18
|
+
@route = @route_set.find(params[:id])
|
19
|
+
@route.update_attributes(params[:route])
|
20
|
+
redirect_to routes_path
|
21
|
+
end
|
35
22
|
end
|
36
|
-
end
|
23
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Awesome
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<% if @collections.empty? %>
|
2
|
+
<h2> You haven't created collections yet. </h2>
|
3
|
+
<% else %>
|
4
|
+
<% @collections.each do |collection| %>
|
5
|
+
<table>
|
6
|
+
<tr><th><%= collection[:title]%> <span><%= link_to("x", collection_path(collection[:id]), :method => :delete) %></span></th></tr>
|
7
|
+
<% collection[:route_set_ids].each do |item| %>
|
8
|
+
<tr>
|
9
|
+
<p>
|
10
|
+
<% route = @route_set.find(item) %>
|
11
|
+
<% if route.saved? %>
|
12
|
+
<td><%= link_to "#{route.description}", route_path(item), :title => "#{route.verb} #{route.path}" %></td>
|
13
|
+
<% else %>
|
14
|
+
<td><%= link_to "Add description to #{route.path}", route_path(item) %></td>
|
15
|
+
<% end %>
|
16
|
+
</p>
|
17
|
+
</tr>
|
18
|
+
<% end %>
|
19
|
+
</table>
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<%= link_to "Create a new Collection", new_collection_path%>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<script type="text/javascript">
|
2
|
+
$(document).ready(function() {
|
3
|
+
$("ul.droptrue").sortable({
|
4
|
+
connectWith: "ul"
|
5
|
+
});
|
6
|
+
$("#sortable, #sortable_container").disableSelection();
|
7
|
+
return $("#create_collection").submit(function(e) {
|
8
|
+
e.preventDefault();
|
9
|
+
var routeSetIds = new Array();
|
10
|
+
$.each($("#sortable_container li"), function(key, item) {
|
11
|
+
return routeSetIds.push($(item).attr("id"));
|
12
|
+
});
|
13
|
+
return $.post($(this).attr("action"), {
|
14
|
+
route_set_ids: routeSetIds,
|
15
|
+
title: $("#title").val()
|
16
|
+
}, function(data) {
|
17
|
+
return window.location.replace(window.location.href.replace("/new", ""));
|
18
|
+
});
|
19
|
+
});
|
20
|
+
});
|
21
|
+
</script>
|
22
|
+
<h2>Create a new collection</h2>
|
23
|
+
<%= form_tag collections_path, :id => "create_collection" do %>
|
24
|
+
<table>
|
25
|
+
<tr>
|
26
|
+
<td>
|
27
|
+
Title:
|
28
|
+
</td>
|
29
|
+
<td>
|
30
|
+
<%= text_field_tag :title %>
|
31
|
+
</td>
|
32
|
+
</tr>
|
33
|
+
<tr>
|
34
|
+
<td colspan="2">
|
35
|
+
<ul id="sortable" class="droptrue">
|
36
|
+
<% @route_set.routes.each do |route| %>
|
37
|
+
<li class="ui-state-highlight" id="<%= route.id %>">
|
38
|
+
<span class="label"><%= route.verb %></span> <%= link_to route.path, route_path(:id => generate_name(route.verb, route.path)) %>
|
39
|
+
</li>
|
40
|
+
<% end %>
|
41
|
+
</ul>
|
42
|
+
<ul id="sortable_container" class="droptrue container">
|
43
|
+
</ul>
|
44
|
+
</td>
|
45
|
+
<td>
|
46
|
+
</td>
|
47
|
+
</tr>
|
48
|
+
</table>
|
49
|
+
<div class="actions">
|
50
|
+
<%= submit_tag %>
|
51
|
+
</div>
|
52
|
+
<% end %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<% unless @routes.empty? %>
|
2
|
+
<div>
|
3
|
+
<h3>Recent updates</h3>
|
4
|
+
<table>
|
5
|
+
<thead>
|
6
|
+
<tr>
|
7
|
+
<th>Resource</th>
|
8
|
+
<th>Updated at</th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<% @routes.each do |item|%>
|
13
|
+
<tr>
|
14
|
+
<td>
|
15
|
+
<%= link_to item.verb + " " + item.path, route_path(:id => generate_name(item.verb, item.path)) %>
|
16
|
+
</td>
|
17
|
+
<td>
|
18
|
+
<%= time_ago_in_words(Time.at(item.updated_at))%> ago
|
19
|
+
</td>
|
20
|
+
</tr>
|
21
|
+
<% end %>
|
22
|
+
</tbody>
|
23
|
+
</table>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
@@ -1,24 +1,90 @@
|
|
1
1
|
<h3 id="title"><%= @route.verb + " " + @route.path %></h3>
|
2
2
|
<%= form_for(@route) do |f| %>
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<td>
|
6
|
+
<%= f.label :description %>
|
7
|
+
</td>
|
8
|
+
<td>
|
9
|
+
<%= f.text_field :description %>
|
10
|
+
</td>
|
11
|
+
</tr>
|
12
|
+
<tr>
|
13
|
+
<td>
|
14
|
+
<%= f.label :content %>
|
15
|
+
</td>
|
16
|
+
<td>
|
17
|
+
<%= f.text_area(:content, :cols => 50, :rows => 20) %>
|
18
|
+
</td>
|
19
|
+
</tr>
|
20
|
+
<tr>
|
21
|
+
<td>
|
22
|
+
</td>
|
23
|
+
<td>
|
24
|
+
|
25
|
+
Docushin parses documents with GitHub Flavored Markdown. Scroll down to read the documentation.
|
26
|
+
</td>
|
27
|
+
</tr>
|
28
|
+
</table>
|
29
|
+
<div class="actions">
|
30
|
+
<%= f.submit %>
|
31
|
+
</div>
|
24
32
|
<% end %>
|
33
|
+
<div class="content">
|
34
|
+
<h2>Markdown Cheat Sheet</h2>
|
35
|
+
|
36
|
+
<div class="cheatsheet-content">
|
37
|
+
|
38
|
+
<div class="mod">
|
39
|
+
<div class="col">
|
40
|
+
<h3>Format Text</h3>
|
41
|
+
<p>Headers</p>
|
42
|
+
<pre># This is an <h1> tag
|
43
|
+
## This is an <h2> tag
|
44
|
+
###### This is an <h6> tag</pre>
|
45
|
+
<p>Text styles</p>
|
46
|
+
<pre>*This text will be italic*
|
47
|
+
_This will also be italic_
|
48
|
+
**This text will be bold**
|
49
|
+
__This will also be bold__
|
50
|
+
|
51
|
+
*You **can** combine them*
|
52
|
+
</pre>
|
53
|
+
</div>
|
54
|
+
<div class="col">
|
55
|
+
<h3>Lists</h3>
|
56
|
+
<p>Unordered</p>
|
57
|
+
<pre>* Item 1
|
58
|
+
* Item 2
|
59
|
+
* Item 2a
|
60
|
+
* Item 2b</pre>
|
61
|
+
<p>Ordered</p>
|
62
|
+
<pre>1. Item 1
|
63
|
+
2. Item 2
|
64
|
+
3. Item 3
|
65
|
+
* Item 3a
|
66
|
+
* Item 3b</pre>
|
67
|
+
</div>
|
68
|
+
<div class="col">
|
69
|
+
<h3>Miscellaneous</h3>
|
70
|
+
<p>Images</p>
|
71
|
+
<pre>
|
72
|
+
Format: 
|
73
|
+
</pre>
|
74
|
+
<p>Links</p>
|
75
|
+
<pre>http://github.com - automatic!
|
76
|
+
[GitHub](http://github.com)</pre>
|
77
|
+
<p>Blockquotes</p>
|
78
|
+
<pre>As Kanye West said:
|
79
|
+
|
80
|
+
> We're living the future so
|
81
|
+
> the present is our past.
|
82
|
+
</pre>
|
83
|
+
</div>
|
84
|
+
</div>
|
85
|
+
<div class="rule"></div>
|
86
|
+
|
87
|
+
</div>
|
88
|
+
|
89
|
+
</div><p>
|
90
|
+
<a href="http://github.github.com/github-flavored-markdown/" class="gfm-help" target="_blank">GitHub Flavored Markdown</a></p>
|
@@ -1,24 +1,24 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<h3>Application Routes</h3>
|
2
|
+
<% @route_set.routes.group_by{ |r| r.controller }.each do |controller, routes| %>
|
3
3
|
<table>
|
4
4
|
<thead>
|
5
5
|
<tr>
|
6
|
-
<th
|
6
|
+
<th><%= controller.titleize.gsub("/", "::") %></th>
|
7
7
|
<th>Description</th>
|
8
8
|
</tr>
|
9
9
|
</thead>
|
10
|
-
<tbody>
|
11
|
-
<% routes.each do |route|%>
|
10
|
+
<tbody>
|
11
|
+
<% routes.each do |route|%>
|
12
12
|
<tr>
|
13
13
|
<td class="resource">
|
14
|
-
<%= link_to route.verb
|
14
|
+
<%= link_to "#{route.verb} #{route.path}", route_path(:id => generate_name(route.verb, route.path)) %>
|
15
15
|
</td>
|
16
16
|
<td>
|
17
17
|
<% if file_exists?(route.verb, route.path) %>
|
18
18
|
<%= route.description %>
|
19
|
-
<%= link_to 'Update', edit_route_path(generate_name(route.verb, route.path))
|
19
|
+
<%= link_to 'Update', edit_route_path(generate_name(route.verb, route.path)) if is_in_dev?%>
|
20
20
|
<% else %>
|
21
|
-
<%= link_to 'Create a description', edit_route_path(generate_name(route.verb, route.path))
|
21
|
+
<%= link_to 'Create a description', edit_route_path(generate_name(route.verb, route.path)) if is_in_dev?%>
|
22
22
|
<% end %>
|
23
23
|
</td>
|
24
24
|
</tr>
|
@@ -1,7 +1,8 @@
|
|
1
1
|
<h1 id="title"><%= @route.verb + " " + @route.path %></h1>
|
2
|
-
<
|
3
|
-
<%= File.join(request.protocol, request.host, @route.path) %>
|
4
|
-
<h3>Description</h3>
|
2
|
+
<p><pre class="route-url"><%= File.join(request.protocol, request.host_with_port, @route.path) %></pre></p>
|
5
3
|
<%= @route.description %>
|
6
|
-
<
|
7
|
-
<%= @route.
|
4
|
+
<div class="markdown"><%= @route.content %></div>
|
5
|
+
<%= button_to "Update", edit_route_path(generate_name(@route.verb, @route.path)), :method => :get %>
|
6
|
+
<% if @route.updated_at %>
|
7
|
+
<h4>This document has been updated at: <%= Time.at(@route.updated_at).strftime('%H:%M:%S, %A %d, %B') %></h4>
|
8
|
+
<% end %>
|
@@ -3,98 +3,129 @@
|
|
3
3
|
<head>
|
4
4
|
<meta charset="utf-8" />
|
5
5
|
<title>Routes</title>
|
6
|
+
|
7
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.js"></script>
|
8
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.js"></script>
|
9
|
+
<script src="https://raw.github.com/rails/jquery-ujs/master/src/rails.js"></script>
|
10
|
+
|
11
|
+
<script src="https://raw.github.com/coreyti/showdown/v0.3.1/src/showdown.js"></script>
|
12
|
+
<script src="https://raw.github.com/coreyti/showdown/v0.3.1/src/extensions/github.js"></script>
|
13
|
+
<script src="https://raw.github.com/coreyti/showdown/v0.3.1/src/extensions/table.js"></script>
|
14
|
+
|
15
|
+
<script src="https://raw.github.com/ccampbell/rainbow/1.1.8/js/rainbow.js"></script>
|
16
|
+
<script src="https://raw.github.com/ccampbell/rainbow/1.1.8/js/language/generic.js"></script>
|
17
|
+
<script src="https://raw.github.com/ccampbell/rainbow/1.1.8/js/language/javascript.js"></script>
|
18
|
+
|
19
|
+
<script>
|
20
|
+
$(document).ready(function() {
|
21
|
+
var converter = new Showdown.converter({extensions: ["github"] });
|
22
|
+
$(".markdown").each(function() {
|
23
|
+
console.log(this)
|
24
|
+
$(this).html(converter.makeHtml($(this).text()));
|
25
|
+
});
|
26
|
+
});
|
27
|
+
</script>
|
28
|
+
|
6
29
|
<style>
|
7
|
-
body
|
30
|
+
body{background-color:#fff;color:#333;margin:0;}
|
31
|
+
body,p,ol,ul,td{font-family:helvetica, verdana, arial, sans-serif;font-size:13px;line-height:18px;}
|
32
|
+
ul.droptrue{list-style-type:none;float:left;}
|
33
|
+
ul.droptrue.container{min-height:250px;min-width:350px;background:#FFF;border:1px solid gray;}
|
34
|
+
|
35
|
+
#container{width:960px;padding-top:50px;margin:0 auto;}
|
36
|
+
#header-outer{position:fixed;width:100%;top:0;height:40px;z-index:999;-moz-box-shadow:0 1px 3px rgba(0,0,0,0.25),0 -1px 0 rgba(0,0,0,0.1) inset;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25),0 -1px 0 rgba(0,0,0,0.1) inset;box-shadow:0 1px 3px rgba(0,0,0,0.25),0 -1px 0 rgba(0,0,0,0.1) inset;background:#00A0D1 repeat-x 0 0;}
|
37
|
+
#header{width:960px;margin:0 auto;}
|
38
|
+
#logo{float:left;padding-left:32px;display:block;height:40px;color:#FFF;font-size:150%;font-weight:200;line-height:38px;}
|
39
|
+
.label{display:inline-block;font-size:11.844px;font-weight:700;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:2px 4px;}
|
40
|
+
.route-url{background:#EAF2F5;display:inline-block;margin-right:8px;font-size:12px;line-height:24px;border-radius:3px;padding:0 5px;}
|
41
|
+
|
42
|
+
h1{font-size:28px;font-weight:300;line-height:1.1;margin-bottom:.75em;}
|
43
|
+
table{width:100%;margin:0 0 3em;}
|
44
|
+
tr:hover td,tr:hover td.active{background:#F8F8F8;}
|
45
|
+
td{vertical-align:top;background:#FFF;padding:8px 0;}
|
46
|
+
th{text-align:left;border-bottom:1px solid #EEE;}
|
47
|
+
td.resource{width:60%;}
|
48
|
+
pre{background-color:#eee;font-size:11px;white-space:pre-wrap;padding:10px;}
|
49
|
+
a{text-decoration:none;color:#0080A6;}
|
50
|
+
a:visited{color:#0080A6;}
|
51
|
+
a:hover{text-decoration:underline;color:#0080A6;}
|
52
|
+
a.logo{color:#FFF;text-decoration:none;}
|
53
|
+
li a:hover{background:#0089B3;color:#FFF;text-decoration:none;}
|
54
|
+
|
55
|
+
#title-nav{margin-bottom:0;margin-top:0;}
|
56
|
+
#title-nav li{position:relative;float:left;display:block;line-height:40px;margin-left:20px;padding:0;}
|
57
|
+
#title-nav a{display:block;-webkit-font-smoothing:subpixel-antialiased;text-shadow:0 -1px 0 rgba(0,0,0,0.3);outline:none;color:#BFE4EF;padding:0 10px;}
|
8
58
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
}
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
}
|
30
|
-
#
|
31
|
-
|
32
|
-
|
33
|
-
}
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
}
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
}
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
}
|
54
|
-
tr
|
55
|
-
|
56
|
-
}
|
57
|
-
td {
|
58
|
-
padding: 8px 0 8px 0;
|
59
|
-
vertical-align: top;
|
60
|
-
background: white;
|
61
|
-
}
|
62
|
-
th {
|
63
|
-
text-align: left;
|
64
|
-
border-bottom: 1px solid #EEE;
|
65
|
-
}
|
66
|
-
td.resource {
|
67
|
-
width: 320px;
|
68
|
-
}
|
69
|
-
pre {
|
70
|
-
background-color: #eee;
|
71
|
-
padding: 10px;
|
72
|
-
font-size: 11px;
|
73
|
-
white-space: pre-wrap;
|
74
|
-
}
|
59
|
+
.right{float:right;}
|
60
|
+
.markdown{padding-top:10px;padding-bottom:10px;font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:13px;line-height:1.6;}
|
61
|
+
.markdown>:first-child{margin-top:0!important;}
|
62
|
+
.markdown>:last-child{margin-bottom:0!important;}
|
63
|
+
.markdown a{color:#4183C4;text-decoration:none;}
|
64
|
+
.markdown a:hover{text-decoration:underline;}
|
65
|
+
.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:700;-webkit-font-smoothing:antialiased;margin:20px 0 10px;padding:0;}
|
66
|
+
.markdown h1 tt,.markdown h1 code,.markdown h2 tt,.markdown h2 code,.markdown h3 tt,.markdown h3 code,.markdown h4 tt,.markdown h4 code,.markdown h5 tt,.markdown h5 code,.markdown h6 tt,.markdown h6 code{font-size:inherit;}
|
67
|
+
.markdown h1{font-size:28px;color:#000;}
|
68
|
+
.markdown h2{font-size:24px;border-bottom:1px solid #ccc;color:#000;}
|
69
|
+
.markdown h3{font-size:18px;}
|
70
|
+
.markdown h4{font-size:16px;}
|
71
|
+
.markdown h5{font-size:14px;}
|
72
|
+
.markdown h6{color:#777;font-size:14px;}
|
73
|
+
.markdown p,.markdown blockquote,.markdown ul,.markdown ol,.markdown dl,.markdown li,.markdown table,.markdown pre{margin:15px 0;}
|
74
|
+
.markdown hr{border:0 none;color:#ccc;height:4px;padding:0;}
|
75
|
+
.markdown>h2:first-child,.markdown>h1:first-child,.markdown>h1:first-child+h2,.markdown>h3:first-child,.markdown>h4:first-child,.markdown>h5:first-child,.markdown>h6:first-child{margin-top:0;padding-top:0;}
|
76
|
+
.markdown li p.first{display:inline-block;}
|
77
|
+
.markdown ul,.markdown ol{padding-left:30px;}
|
78
|
+
.markdown dl dt{font-size:14px;font-weight:700;font-style:italic;margin:15px 0 5px;padding:0;}
|
79
|
+
.markdown dl dd{margin:0 0 15px;padding:0 15px;}
|
80
|
+
.markdown blockquote{border-left:4px solid #DDD;color:#777;padding:0 15px;}
|
81
|
+
.markdown table{border-collapse:collapse;border-spacing:0;font-size:100%;font:inherit;padding:0;}
|
82
|
+
.markdown table tr{border-top:1px solid #ccc;background-color:#fff;margin:0;padding:0;}
|
83
|
+
.markdown table tr:nth-child(2n){background-color:#f8f8f8;}
|
84
|
+
.markdown table tr th{font-weight:700;}
|
85
|
+
.markdown table tr th,.markdown table tr td{border:1px solid #ccc;text-align:left;margin:0;padding:6px 13px;}
|
86
|
+
.markdown img{max-width:100%;}
|
87
|
+
.markdown span.frame{display:block;overflow:hidden;}
|
88
|
+
.markdown span.frame>span{border:1px solid #ddd;display:block;float:left;overflow:hidden;width:auto;margin:13px 0 0;padding:7px;}
|
89
|
+
.markdown span.frame span img{display:block;float:left;}
|
90
|
+
.markdown span.frame span span{clear:both;color:#333;display:block;padding:5px 0 0;}
|
91
|
+
.markdown span.align-center>span{display:block;overflow:hidden;text-align:center;margin:13px auto 0;}
|
92
|
+
.markdown span.align-center span img{text-align:center;margin:0 auto;}
|
93
|
+
.markdown span.align-right>span{display:block;overflow:hidden;text-align:right;margin:13px 0 0;}
|
94
|
+
.markdown span.align-right span img{text-align:right;margin:0;}
|
95
|
+
.markdown span.float-left{display:block;margin-right:13px;overflow:hidden;float:left;}
|
96
|
+
.markdown span.float-left span{margin:13px 0 0;}
|
97
|
+
.markdown span.float-right{display:block;margin-left:13px;overflow:hidden;float:right;}
|
98
|
+
.markdown span.float-right>span{display:block;overflow:hidden;text-align:right;margin:13px auto 0;}
|
99
|
+
.markdown code,.markdown tt{white-space:nowrap;border:1px solid #eaeaea;background-color:#f8f8f8;border-radius:3px;margin:0 2px;padding:0 5px;}
|
100
|
+
.markdown pre>code{white-space:pre;border:none;background:transparent;margin:0;padding:0;}
|
101
|
+
.markdown .highlight pre,.markdown pre{background-color:#f8f8f8;border:1px solid #ccc;font-size:13px;line-height:19px;overflow:auto;border-radius:3px;padding:6px 10px;}
|
102
|
+
.markdown pre code,.markdown pre tt{background-color:transparent;border:none;}
|
103
|
+
.markdown h1+p,.markdown h2+p,.markdown h3+p,.markdown h4+p,.markdown h5+p,.markdown h6+p,.markdown ul li>:first-child,.markdown ol li>:first-child,.markdown dl dt>:first-child,.markdown dl dd>:first-child,.markdown blockquote>:first-child,.markdown table tr th>:first-child,.markdown table tr td>:first-child{margin-top:0;}
|
104
|
+
.markdown ul li>:last-child,.markdown ol li>:last-child,.markdown dl dt>:last-child,.markdown dl dd>:last-child,.markdown blockquote>:last-child,.markdown table tr th>:last-child,.markdown table tr td>:last-child{margin-bottom:0;}
|
105
|
+
.markdown dl,.markdown dl dt:first-child{padding:0;}
|
106
|
+
.markdown span.align-center,.markdown span.align-right{display:block;overflow:hidden;clear:both;}
|
75
107
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
}
|
84
|
-
a.logo{
|
85
|
-
color: white;
|
86
|
-
text-decoration: none;
|
87
|
-
}
|
108
|
+
.rainbow{word-wrap:break-word;background:transparent;}
|
109
|
+
.rainbow .comment{color:#999;}
|
110
|
+
.rainbow .constant{color:#f26521;}
|
111
|
+
.rainbow .string,.rainbow .comment.docstring{color:#854a6f;}
|
112
|
+
.rainbow .entity{color:#4da943;}
|
113
|
+
.rainbow .support,.rainbow .function.call{color:#b6a500;}
|
114
|
+
.rainbow .variable{color:#1e4c66;}
|
88
115
|
</style>
|
89
116
|
</head>
|
90
117
|
<body>
|
91
118
|
<div id="header-outer">
|
92
119
|
<div id="header">
|
93
|
-
<div id="logo"><%= link_to "Docushin",
|
94
|
-
|
120
|
+
<div id="logo"><%= link_to "Docushin", root_path, :class => "logo" %></div>
|
121
|
+
<ul id="title-nav">
|
122
|
+
<li class="leaf"><%= link_to "Routes", routes_path %></li>
|
123
|
+
<li class="leaf last"><%= link_to "Collections", collections_path %></li>
|
124
|
+
</ul>
|
125
|
+
</div>
|
95
126
|
</div>
|
96
127
|
<div id="container">
|
97
128
|
<%= yield %>
|
98
129
|
</div>
|
99
130
|
</body>
|
100
|
-
</html>
|
131
|
+
</html>
|
data/config/routes.rb
CHANGED
data/docushin.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.email = ["tagrudev@gmail.com", "aganov@gmail.com"]
|
7
7
|
gem.description = %q{Builds documentation based on your Ruby on Rails application routes.}
|
8
8
|
gem.summary = %q{Useful for generating docs on your routes.}
|
9
|
-
gem.homepage = "http://github.com/
|
9
|
+
gem.homepage = "http://appsbakery.github.com/docushin/"
|
10
10
|
|
11
11
|
|
12
12
|
gem.files = `git ls-files`.split($\)
|
@@ -20,4 +20,6 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_development_dependency "pry"
|
21
21
|
gem.add_development_dependency "rake"
|
22
22
|
gem.add_development_dependency "rspec", "~> 2.0"
|
23
|
+
gem.add_development_dependency "capybara"
|
24
|
+
gem.add_development_dependency "capybara-webkit"
|
23
25
|
end
|
data/lib/docushin.rb
CHANGED
data/lib/docushin/route.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'digest/md5'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
2
3
|
|
3
4
|
module Docushin
|
4
5
|
class Route
|
@@ -15,8 +16,9 @@ module Docushin
|
|
15
16
|
attr_accessor :data
|
16
17
|
attr_accessor :file_name
|
17
18
|
attr_accessor :content
|
18
|
-
|
19
|
-
|
19
|
+
|
20
|
+
alias :id :file_name
|
21
|
+
|
20
22
|
def initialize(route)
|
21
23
|
@controller = route.defaults[:controller]
|
22
24
|
@base = File.join(Rails.root, 'doc', 'docushin')
|
@@ -25,28 +27,67 @@ module Docushin
|
|
25
27
|
@path = route.path.spec.to_s.sub('(.:format)', '')
|
26
28
|
@requirements = route.requirements
|
27
29
|
@file_name = Digest::MD5.hexdigest(@verb.to_s + @path)
|
28
|
-
|
30
|
+
self.load
|
29
31
|
end
|
30
32
|
|
31
|
-
def
|
32
|
-
|
33
|
+
def description
|
34
|
+
@data["description"]
|
33
35
|
end
|
34
36
|
|
35
|
-
|
37
|
+
def updated_at
|
38
|
+
@data["updated_at"] || File.mtime(File.join(@base,"#{@file_name}.md")).to_i rescue nil
|
39
|
+
end
|
36
40
|
|
37
|
-
|
38
|
-
|
41
|
+
# Updates the attributes of the model from the passed-in hash
|
42
|
+
# and saves the route
|
43
|
+
def update_attributes(attributes)
|
44
|
+
attributes.to_hash
|
45
|
+
self.attributes = attributes
|
46
|
+
self.save
|
47
|
+
end
|
48
|
+
|
49
|
+
def attributes=(attributes)
|
50
|
+
attributes = attributes.with_indifferent_access.to_hash
|
51
|
+
@content = attributes.delete("content")
|
52
|
+
@data = attributes
|
53
|
+
end
|
54
|
+
|
55
|
+
# Saves the route
|
56
|
+
#
|
57
|
+
# If the route is new, a document gets created in the doc folder, otherwise
|
58
|
+
# the existing document gets updated.
|
59
|
+
def save
|
60
|
+
@data["updated_at"] = DateTime.now.to_i
|
61
|
+
FileUtils.mkdir_p(@base) unless File.exists?(@base)
|
62
|
+
File.open(File.join(@base,"#{@file_name}.md"), "w+") do |file|
|
63
|
+
file.write @data.to_yaml
|
64
|
+
file.write "---\n"
|
65
|
+
file.write @content
|
66
|
+
file.close
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Return true if file/route is saved
|
71
|
+
def saved?
|
72
|
+
File.exists?(File.join(@base, "#{@file_name}.md")) ? true : false
|
73
|
+
end
|
74
|
+
|
75
|
+
def persisted?
|
76
|
+
true
|
77
|
+
end
|
39
78
|
|
79
|
+
# Read route's documentation
|
80
|
+
def load
|
40
81
|
begin
|
82
|
+
@content = File.read(File.join(@base, "#{@file_name}.md"))
|
41
83
|
if @content =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
|
42
84
|
@content = $'
|
43
85
|
@data = YAML.load($1)
|
44
|
-
@description = @data['description']
|
45
86
|
end
|
46
87
|
rescue => e
|
47
|
-
#
|
88
|
+
# Do nothing
|
48
89
|
end
|
49
90
|
@data ||= {}
|
50
91
|
end
|
51
92
|
end
|
52
|
-
end
|
93
|
+
end
|
data/lib/docushin/route_set.rb
CHANGED
@@ -1,20 +1,29 @@
|
|
1
1
|
module Docushin
|
2
2
|
class RouteSet
|
3
3
|
attr_accessor :routes
|
4
|
-
|
4
|
+
|
5
5
|
def initialize
|
6
6
|
@routes = []
|
7
7
|
Rails.application.routes.routes.each do |route|
|
8
|
-
next if route.app.is_a?(ActionDispatch::Routing::Mapper::Constraints)
|
8
|
+
# next if route.app.is_a?(ActionDispatch::Routing::Mapper::Constraints)
|
9
9
|
next if route.app.is_a?(Sprockets::Environment)
|
10
10
|
next if route.app == Docushin::Engine
|
11
11
|
|
12
12
|
if (rack_app = discover_rack_app(route.app)) && rack_app.respond_to?(:routes)
|
13
13
|
rack_app.routes.routes.each do |rack_route|
|
14
|
-
|
15
|
-
end
|
14
|
+
add_route Route.new(rack_route)
|
15
|
+
end if rack_app.routes.respond_to?(:routes)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
|
+
add_route Route.new(route)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_route(route)
|
23
|
+
if Docushin.path_regexp.nil?
|
24
|
+
@routes << route
|
25
|
+
else
|
26
|
+
@routes << route if route.path.match(Docushin.path_regexp)
|
18
27
|
end
|
19
28
|
end
|
20
29
|
|
@@ -27,10 +36,11 @@ module Docushin
|
|
27
36
|
end
|
28
37
|
end
|
29
38
|
|
30
|
-
def
|
39
|
+
def find(hash)
|
31
40
|
@routes.each do |route|
|
32
|
-
return route if route.
|
41
|
+
return route if route.id == hash
|
33
42
|
end
|
43
|
+
nil
|
34
44
|
end
|
35
45
|
end
|
36
|
-
end
|
46
|
+
end
|
data/lib/docushin/version.rb
CHANGED
@@ -3,8 +3,8 @@ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
3
3
|
describe Docushin::RouteSet do
|
4
4
|
describe 'Build route set from routes' do
|
5
5
|
let(:routes_collection) { Docushin::RouteSet.new }
|
6
|
-
it 'should have attr_accessor routes that is an array' do
|
6
|
+
it 'should have attr_accessor routes that is an array' do
|
7
7
|
routes_collection.routes.class.should == Array
|
8
8
|
end
|
9
9
|
end
|
10
|
-
end
|
10
|
+
end
|
data/spec/docushin/route_spec.rb
CHANGED
@@ -5,35 +5,48 @@ describe Docushin::Route do
|
|
5
5
|
let(:route) { route_set.routes.first }
|
6
6
|
|
7
7
|
describe 'create a new Route' do
|
8
|
-
it 'should have name, verb, path, requirements, data, content as attr' do
|
8
|
+
it 'should have name, verb, path, requirements, data, content as attr' do
|
9
9
|
route.should respond_to(:name)
|
10
10
|
route.should respond_to(:verb)
|
11
11
|
route.should respond_to(:path)
|
12
12
|
route.should respond_to(:requirements)
|
13
|
+
route.should respond_to(:updated_at)
|
13
14
|
route.should respond_to(:base)
|
14
15
|
route.should respond_to(:data)
|
15
16
|
route.should respond_to(:file_name)
|
16
17
|
route.should respond_to(:content)
|
17
18
|
route.should respond_to(:description)
|
19
|
+
route.should respond_to(:updated_at)
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
|
-
describe 'inspect the new Route' do
|
22
|
-
it 'should have attr defined' do
|
23
|
+
describe 'inspect the new Route' do
|
24
|
+
it 'should have attr defined' do
|
23
25
|
route.base.should == File.join(Rails.root, 'doc', 'docushin')
|
24
|
-
route.file_name.should == Digest::MD5.hexdigest(route.verb.to_s + route.path)
|
26
|
+
route.file_name.should == Digest::MD5.hexdigest(route.verb.to_s + route.path)
|
25
27
|
route.name.should == "foo_index"
|
26
28
|
route.path.should == "/foo"
|
27
29
|
route.requirements.should == {:action=>"index", :controller=>"foo"}
|
28
30
|
route.verb.should == "GET"
|
29
|
-
end
|
31
|
+
end
|
30
32
|
end
|
31
33
|
|
32
34
|
describe 'read markdown file' do
|
33
|
-
it 'should generate data and content' do
|
34
|
-
route.data.should == {"description"=>"I am so awesome"}
|
35
|
+
it 'should generate data and content' do
|
35
36
|
route.description.should == "I am so awesome"
|
36
|
-
route.content.should == "{\"id\":\"4f3a296ac8de6732fe000003\",\"first_name\":\"Todor\",\"last_name\":\"Grudev\",\"
|
37
|
+
route.content.should == "{\"id\":\"4f3a296ac8de6732fe000003\",\"first_name\":\"Todor\",\"last_name\":\"Grudev\",\"gender\":\"male\",\"email\":\"tagrudev@gmail.com\"}\n"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
describe 'update markdown file' do
|
41
|
+
it 'should update specified attributes' do
|
42
|
+
route.save
|
43
|
+
route.updated_at.should == File.mtime(File.join(route.base, "#{route.file_name}.md")).to_i
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe 'check if route is saved' do
|
48
|
+
it 'should return true if the file/route exists' do
|
49
|
+
route.saved?.should == true
|
37
50
|
end
|
38
51
|
end
|
39
|
-
end
|
52
|
+
end
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/requests_helper')
|
2
|
+
|
3
|
+
feature 'Visit Collections of Docushin', 'I am so awesome I want to be able to make some collections' do
|
4
|
+
let(:route_set) { Docushin::RouteSet.new }
|
5
|
+
let(:route) { route_set.routes.first }
|
6
|
+
|
7
|
+
scenario 'I click on the collections page' do
|
8
|
+
visit "/docushin/collections"
|
9
|
+
page.should have_content("Create a new Collection")
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/requests_helper')
|
2
|
+
|
3
|
+
feature 'Visit Home of Docushin', 'I am so awesome I want to be able to go to my docushin home path' do
|
4
|
+
scenario 'I click on the home page' do
|
5
|
+
visit "/docushin"
|
6
|
+
page.should have_content("Recent updates")
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
data/spec/spec_helper.rb
CHANGED
@@ -4,7 +4,9 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
4
4
|
ENV["RAILS_ENV"] ||= 'test'
|
5
5
|
require File.expand_path("../../spec/dummy/config/environment", __FILE__)
|
6
6
|
|
7
|
-
|
7
|
+
|
8
|
+
require 'capybara/rails'
|
9
|
+
require 'capybara/rspec'
|
8
10
|
require 'bundler/setup'
|
9
11
|
require 'docushin'
|
10
12
|
require 'pry'
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docushin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Todor Grudev
|
@@ -10,60 +9,53 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2013-10-28 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rails
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - '>='
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '0'
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: pry
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
|
-
- -
|
32
|
+
- - '>='
|
37
33
|
- !ruby/object:Gem::Version
|
38
34
|
version: '0'
|
39
35
|
type: :development
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
|
-
- -
|
39
|
+
- - '>='
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '0'
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: rake
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- -
|
46
|
+
- - '>='
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: '0'
|
55
49
|
type: :development
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - '>='
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '0'
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: rspec
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
60
|
- - ~>
|
69
61
|
- !ruby/object:Gem::Version
|
@@ -71,11 +63,38 @@ dependencies:
|
|
71
63
|
type: :development
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
67
|
- - ~>
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '2.0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: capybara
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: capybara-webkit
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
79
98
|
description: Builds documentation based on your Ruby on Rails application routes.
|
80
99
|
email:
|
81
100
|
- tagrudev@gmail.com
|
@@ -90,8 +109,15 @@ files:
|
|
90
109
|
- LICENSE
|
91
110
|
- README.md
|
92
111
|
- Rakefile
|
112
|
+
- app/controllers/docushin/application_controller.rb
|
113
|
+
- app/controllers/docushin/collections_controller.rb
|
114
|
+
- app/controllers/docushin/home_controller.rb
|
93
115
|
- app/controllers/docushin/routes_controller.rb
|
94
116
|
- app/helpers/docushin/application_helper.rb
|
117
|
+
- app/views/docushin/collections/create.html.erb
|
118
|
+
- app/views/docushin/collections/index.html.erb
|
119
|
+
- app/views/docushin/collections/new.html.erb
|
120
|
+
- app/views/docushin/home/index.html.erb
|
95
121
|
- app/views/docushin/routes/_form.html.erb
|
96
122
|
- app/views/docushin/routes/edit.html.erb
|
97
123
|
- app/views/docushin/routes/index.html.erb
|
@@ -122,12 +148,17 @@ files:
|
|
122
148
|
- spec/dummy/config/initializers/session_store.rb
|
123
149
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
124
150
|
- spec/dummy/config/routes.rb
|
125
|
-
- spec/dummy/
|
126
|
-
- spec/dummy/
|
151
|
+
- spec/dummy/doc/docushin/collections.yml
|
152
|
+
- spec/dummy/doc/docushin/fff1454d69c4340014bef52217525fed.md
|
127
153
|
- spec/dummy/script/rails
|
154
|
+
- spec/requests/collections_spec.rb
|
155
|
+
- spec/requests/home_spec.rb
|
156
|
+
- spec/requests/requests_helper.rb
|
157
|
+
- spec/requests/routes_spec.rb
|
128
158
|
- spec/spec_helper.rb
|
129
|
-
homepage: http://github.com/
|
159
|
+
homepage: http://appsbakery.github.com/docushin/
|
130
160
|
licenses: []
|
161
|
+
metadata: {}
|
131
162
|
post_install_message:
|
132
163
|
rdoc_options: []
|
133
164
|
require_paths:
|
@@ -135,28 +166,20 @@ require_paths:
|
|
135
166
|
- app
|
136
167
|
- config
|
137
168
|
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
169
|
requirements:
|
140
|
-
- -
|
170
|
+
- - '>='
|
141
171
|
- !ruby/object:Gem::Version
|
142
172
|
version: '0'
|
143
|
-
segments:
|
144
|
-
- 0
|
145
|
-
hash: 363757421
|
146
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
174
|
requirements:
|
149
|
-
- -
|
175
|
+
- - '>='
|
150
176
|
- !ruby/object:Gem::Version
|
151
177
|
version: '0'
|
152
|
-
segments:
|
153
|
-
- 0
|
154
|
-
hash: 363757421
|
155
178
|
requirements: []
|
156
179
|
rubyforge_project:
|
157
|
-
rubygems_version:
|
180
|
+
rubygems_version: 2.0.3
|
158
181
|
signing_key:
|
159
|
-
specification_version:
|
182
|
+
specification_version: 4
|
160
183
|
summary: Useful for generating docs on your routes.
|
161
184
|
test_files:
|
162
185
|
- spec/docushin/route_set_spec.rb
|
@@ -177,7 +200,11 @@ test_files:
|
|
177
200
|
- spec/dummy/config/initializers/session_store.rb
|
178
201
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
179
202
|
- spec/dummy/config/routes.rb
|
180
|
-
- spec/dummy/
|
181
|
-
- spec/dummy/
|
203
|
+
- spec/dummy/doc/docushin/collections.yml
|
204
|
+
- spec/dummy/doc/docushin/fff1454d69c4340014bef52217525fed.md
|
182
205
|
- spec/dummy/script/rails
|
206
|
+
- spec/requests/collections_spec.rb
|
207
|
+
- spec/requests/home_spec.rb
|
208
|
+
- spec/requests/requests_helper.rb
|
209
|
+
- spec/requests/routes_spec.rb
|
183
210
|
- spec/spec_helper.rb
|
File without changes
|
data/spec/dummy/log/test.log
DELETED
File without changes
|