emmett 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.
- data/LICENSE +16 -19
- data/README.md +37 -0
- data/lib/emmett/configuration.rb +12 -1
- data/lib/emmett/document.rb +122 -19
- data/lib/emmett/document_manager.rb +33 -11
- data/lib/emmett/railtie.rb +1 -0
- data/lib/emmett/renderer.rb +1 -1
- data/lib/emmett/template.rb +14 -4
- data/lib/emmett/version.rb +1 -1
- data/templates/default/static/stylesheets/documentation.css +17 -2
- data/templates/default/templates/_endpoints.handlebars +3 -0
- data/templates/default/templates/_navigation.handlebars +20 -9
- data/templates/default/templates/index.handlebars +4 -8
- metadata +9 -2
data/LICENSE
CHANGED
@@ -1,22 +1,19 @@
|
|
1
|
-
Copyright (c) 2012
|
1
|
+
Copyright (c) 2012 Filter Squad
|
2
2
|
|
3
|
-
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
4
9
|
|
5
|
-
|
6
|
-
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -7,6 +7,39 @@ them and generate a nice, usable website people can use to consume the documenta
|
|
7
7
|
|
8
8
|
It doesn't automate the docs or the like - it just does the simplest thing possible.
|
9
9
|
|
10
|
+
## Doc Generation
|
11
|
+
|
12
|
+
Emmett is simply a pipeline for building documentation. It expects very little, namely:
|
13
|
+
|
14
|
+
* There is a specific api index page.
|
15
|
+
* There is a directory holding all API section information as markdown files
|
16
|
+
* Each page has a h1 with the section name
|
17
|
+
* Each page has one or more h2's with an api endpoint described inside a single one.
|
18
|
+
|
19
|
+
From this, it will generate compiled HTML from a template (the default is built on bootstrap)
|
20
|
+
with:
|
21
|
+
|
22
|
+
* Markdown processed much like on GitHub.
|
23
|
+
* A nav bar with your api name + drop downs of section titles.
|
24
|
+
* An index of endpoints in each section before any of the endpoints are described.
|
25
|
+
* An api index on the home page.
|
26
|
+
|
27
|
+
It'll automatically use Pygments for code highlighting, so for http examples we encourage the syntax like:
|
28
|
+
|
29
|
+
```http
|
30
|
+
GET /1/your/endpoint HTTP/1.1
|
31
|
+
Authorization: Bearer TOKEN
|
32
|
+
``
|
33
|
+
|
34
|
+
```http
|
35
|
+
HTTP/1.1 200 OK
|
36
|
+
Content-Type: text/plain
|
37
|
+
|
38
|
+
Alrighty then!
|
39
|
+
```
|
40
|
+
|
41
|
+
AKA, Calls described in the form of a simplified request lifecycle.
|
42
|
+
|
10
43
|
## Installation
|
11
44
|
|
12
45
|
Add this line to your application's Gemfile:
|
@@ -72,3 +105,7 @@ with the name being based on the current directory name.
|
|
72
105
|
3. Commit your changes (`git commit -am 'Added some feature'`)
|
73
106
|
4. Push to the branch (`git push origin my-new-feature`)
|
74
107
|
5. Create new Pull Request
|
108
|
+
|
109
|
+
## License
|
110
|
+
|
111
|
+
Emmett is released under the MIT License (see the [license file](https://github.com/filtersquad/emmett/blob/master/LICENSE)) and is copyright Filter Squad, 2012.
|
data/lib/emmett/configuration.rb
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
require 'emmett/template'
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
module Emmett
|
4
5
|
class Configuration
|
5
6
|
|
6
7
|
class Error < StandardError; end
|
7
8
|
|
8
|
-
attr_accessor :name, :template, :index_page, :section_dir, :output_dir
|
9
|
+
attr_accessor :name, :template, :index_page, :section_dir, :output_dir, :json_path
|
9
10
|
|
10
11
|
def verify!
|
11
12
|
errors = []
|
13
|
+
if json_path && File.exist?(json_path)
|
14
|
+
title = from_json['title']
|
15
|
+
self.name = title if title
|
16
|
+
else
|
17
|
+
errors << "The json path does not exist (Given #{json_path.inspect})"
|
18
|
+
end
|
12
19
|
errors << "You must set the name attribute for emmett" if !name
|
13
20
|
errors << "You must set the template attribute for emmett" if !template
|
14
21
|
errors << "The index_page file must exist" unless index_page && File.exist?(index_page)
|
@@ -22,6 +29,10 @@ module Emmett
|
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
32
|
+
def from_json
|
33
|
+
@json_config ||= JSON.parse(File.read(json_path))
|
34
|
+
end
|
35
|
+
|
25
36
|
def to_template
|
26
37
|
@template_instance ||= Template[template]
|
27
38
|
end
|
data/lib/emmett/document.rb
CHANGED
@@ -6,12 +6,128 @@ require 'nokogiri'
|
|
6
6
|
require 'emmett/http_request_processor'
|
7
7
|
|
8
8
|
module Emmett
|
9
|
+
|
10
|
+
def self.normalize_name(text)
|
11
|
+
text.strip.downcase.gsub(/\W+/, '-').gsub(/-+/, '-').gsub(/(^-|-$)/, '')
|
12
|
+
end
|
13
|
+
|
14
|
+
class Section < Struct.new(:name)
|
15
|
+
|
16
|
+
def groups
|
17
|
+
@groups ||= []
|
18
|
+
end
|
19
|
+
|
20
|
+
def groups=(value)
|
21
|
+
@groups = Array value
|
22
|
+
end
|
23
|
+
|
24
|
+
def singular?
|
25
|
+
@groups.one?
|
26
|
+
end
|
27
|
+
|
28
|
+
def ==(other)
|
29
|
+
other.is_a?(self.class) && other.name == name
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_hash
|
33
|
+
{
|
34
|
+
:name => name,
|
35
|
+
:singular => singular?,
|
36
|
+
:groups => groups.map(&:to_hash)
|
37
|
+
}.tap do |result|
|
38
|
+
if singular?
|
39
|
+
group = groups.first.to_hash
|
40
|
+
result[:endpoints] = group[:endpoints]
|
41
|
+
result[:url] = group[:url]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
class Group < Struct.new(:name)
|
49
|
+
|
50
|
+
attr_reader :slug, :document
|
51
|
+
|
52
|
+
def ==(other)
|
53
|
+
other.is_a?(self.class) && other.name == name
|
54
|
+
end
|
55
|
+
|
56
|
+
def initialize(name, document)
|
57
|
+
@slug = Emmett.normalize_name name
|
58
|
+
@document = document
|
59
|
+
super name
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_hash
|
63
|
+
{
|
64
|
+
:name => name,
|
65
|
+
:slug => slug,
|
66
|
+
:endpoints => endpoints.map(&:to_hash),
|
67
|
+
:url => document.to_path_name
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
def endpoints
|
72
|
+
@endpoints ||= []
|
73
|
+
end
|
74
|
+
|
75
|
+
def endpoints=(value)
|
76
|
+
@endpoints = Array value
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
class Endpoint < Struct.new(:name)
|
82
|
+
|
83
|
+
def ==(other)
|
84
|
+
other.is_a?(self.class) && other.name == name
|
85
|
+
end
|
86
|
+
|
87
|
+
attr_reader :slug, :document
|
88
|
+
|
89
|
+
def initialize(name, document)
|
90
|
+
@slug = Emmett.normalize_name name
|
91
|
+
@document = document
|
92
|
+
super name
|
93
|
+
end
|
94
|
+
|
95
|
+
def to_hash
|
96
|
+
{
|
97
|
+
:name => name,
|
98
|
+
:slug => slug,
|
99
|
+
:url => "#{document.to_path_name}##{slug}"
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
9
105
|
class Document < Struct.new(:file_name, :content, :type)
|
10
106
|
|
11
107
|
def self.from_path(path, type = :normal)
|
12
108
|
Document.new path, GitHub::Markup.render(path, File.read(path)), type
|
13
109
|
end
|
14
110
|
|
111
|
+
def group_names
|
112
|
+
@group_name ||= document.css('h1').map(&:text)
|
113
|
+
end
|
114
|
+
|
115
|
+
def endpoint_names
|
116
|
+
@endpoint_names ||= document.css('h2').map(&:text)
|
117
|
+
end
|
118
|
+
|
119
|
+
def groups
|
120
|
+
@groups ||= group_names.map do |name|
|
121
|
+
group = Group.new(name, self)
|
122
|
+
group.endpoints = endpoints
|
123
|
+
group
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def endpoints
|
128
|
+
@endpoints ||= endpoint_names.map { |name| Endpoint.new(name, self) }
|
129
|
+
end
|
130
|
+
|
15
131
|
def short_name
|
16
132
|
@short_name ||= begin
|
17
133
|
if type == :index
|
@@ -26,19 +142,8 @@ module Emmett
|
|
26
142
|
@document ||= Nokogiri::HTML(content)
|
27
143
|
end
|
28
144
|
|
29
|
-
def sections
|
30
|
-
@sections ||= document.css('h2').map(&:text)
|
31
|
-
end
|
32
|
-
|
33
|
-
def section_mapping
|
34
|
-
@section_mapping ||= sections.inject({}) do |acc, current|
|
35
|
-
acc[current] = current.strip.downcase.gsub(/\W+/, '-').gsub(/-+/, '-').gsub(/(^-|-$)/, '')
|
36
|
-
acc
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
145
|
def title
|
41
|
-
@title ||=
|
146
|
+
@title ||= group_names.first
|
42
147
|
end
|
43
148
|
|
44
149
|
def highlighted_html
|
@@ -52,7 +157,7 @@ module Emmett
|
|
52
157
|
block.replace highlighted_fragment
|
53
158
|
end
|
54
159
|
|
55
|
-
mapping =
|
160
|
+
mapping = endpoints.inject({}) { |acc, e| acc[e.name] = e.slug; acc }
|
56
161
|
doc.css('h2').each do |header|
|
57
162
|
if (identifier = mapping[header.text])
|
58
163
|
header[:id] = identifier
|
@@ -74,17 +179,13 @@ module Emmett
|
|
74
179
|
html << "<h2>Endpoints</h2>"
|
75
180
|
html << "<ul id='endpoints'>"
|
76
181
|
|
77
|
-
|
78
|
-
html << "<li><a href='##{slug}'>#{
|
182
|
+
endpoints.each do |endpoint|
|
183
|
+
html << "<li><a href='##{endpoint.slug}'>#{endpoint.name}</a></li>"
|
79
184
|
end
|
80
185
|
html << "</ul>"
|
81
186
|
end.join("")
|
82
187
|
end
|
83
188
|
|
84
|
-
def iterable_section_mapping
|
85
|
-
section_mapping.map { |(n,v)| {name: n, hash: v} }
|
86
|
-
end
|
87
|
-
|
88
189
|
def to_path_name
|
89
190
|
"#{short_name}.html"
|
90
191
|
end
|
@@ -104,6 +205,8 @@ module Emmett
|
|
104
205
|
end
|
105
206
|
end
|
106
207
|
|
208
|
+
# Extra / process HTTP blocks to get extra information.
|
209
|
+
|
107
210
|
def http_blocks
|
108
211
|
@http_blocks ||= code_blocks.select { |r| r.first == "http" }.map { |r| r[1..-1] }
|
109
212
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'emmett/document'
|
2
2
|
require 'emmett/renderer'
|
3
|
+
require 'set'
|
3
4
|
|
4
5
|
module Emmett
|
5
6
|
class DocumentManager
|
@@ -26,16 +27,15 @@ module Emmett
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
|
-
def
|
30
|
-
@
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end.sort_by { |r| r[:title].downcase }
|
30
|
+
def indexed_documents
|
31
|
+
@indexed_documents ||= inner_documents.inject({}) do |acc, document|
|
32
|
+
acc[document.short_name] = document
|
33
|
+
acc
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def sections
|
38
|
+
@sections ||= Hash.new.tap { |s| process_sections s }.values
|
39
39
|
end
|
40
40
|
|
41
41
|
def render_index(renderer)
|
@@ -49,6 +49,7 @@ module Emmett
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def render(renderer)
|
52
|
+
process_sections
|
52
53
|
render_index renderer
|
53
54
|
render_documents renderer
|
54
55
|
end
|
@@ -56,8 +57,10 @@ module Emmett
|
|
56
57
|
def render!
|
57
58
|
Renderer.new(configuration).tap do |renderer|
|
58
59
|
renderer.prepare_output
|
60
|
+
all_groups = sections.map(&:groups).flatten.sort_by(&:name).uniq
|
59
61
|
renderer.global_context = {
|
60
|
-
|
62
|
+
sections: sections.map(&:to_hash),
|
63
|
+
groups: all_groups.map(&:to_hash),
|
61
64
|
site_name: configuration.name
|
62
65
|
}
|
63
66
|
render renderer
|
@@ -77,6 +80,25 @@ module Emmett
|
|
77
80
|
|
78
81
|
private
|
79
82
|
|
83
|
+
def process_sections(into = {})
|
84
|
+
configuration_sections = Array(configuration.from_json['sections'])
|
85
|
+
seen = Set.new
|
86
|
+
configuration_sections.each do |s|
|
87
|
+
name = s['name']
|
88
|
+
section = (into[name] ||= Section.new(name))
|
89
|
+
entries = Array(s['children']).map { |n| indexed_documents[n] }.compact.map(&:groups).flatten.uniq
|
90
|
+
section.groups += entries
|
91
|
+
seen += entries
|
92
|
+
end
|
93
|
+
missing = (inner_documents.map(&:groups).flatten.uniq - seen.to_a)
|
94
|
+
missing.each do |group|
|
95
|
+
# This document doesn't have a section, so we need to specify it.
|
96
|
+
section = (into[group.name] ||= Section.new(group.name))
|
97
|
+
section.groups << group
|
98
|
+
end
|
99
|
+
into
|
100
|
+
end
|
101
|
+
|
80
102
|
def render_document(renderer, template_name, document, context = {})
|
81
103
|
renderer.render_to document.to_path_name, template_name, context.merge(content: document.highlighted_html)
|
82
104
|
end
|
data/lib/emmett/railtie.rb
CHANGED
data/lib/emmett/renderer.rb
CHANGED
data/lib/emmett/template.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
module Emmett
|
2
2
|
class Template
|
3
|
-
|
4
3
|
class Error < StandardError; end
|
5
4
|
|
5
|
+
REQUIRED_TEMPLATES = %w(index section)
|
6
|
+
|
6
7
|
class << self
|
7
8
|
|
8
9
|
def registry
|
@@ -33,16 +34,25 @@ module Emmett
|
|
33
34
|
@root = root.to_s
|
34
35
|
end
|
35
36
|
|
37
|
+
def template_format; "handlebars"; end
|
38
|
+
|
36
39
|
def verify!
|
37
40
|
errors = []
|
38
41
|
errors << "Ensure the root directory exists" unless File.directory?(root)
|
39
42
|
errors << "Ensure the name is set" unless name
|
40
43
|
errors << "Ensure the template has a templates subdirectory" unless File.directory?(template_path)
|
41
44
|
errors << "Ensure the template static path is a directory if present" if File.exist?(static_path) && !File.directory?(static_path)
|
45
|
+
errors << "Missing the following files in your template: #{missing_templates.join(", ")}" if missing_templates.any?
|
42
46
|
if errors.any?
|
43
47
|
message = "The following errors occured trying to add your template:\n"
|
44
|
-
errors.each { |e| message << "* #{
|
45
|
-
raise Error.new(
|
48
|
+
errors.each { |e| message << "* #{e}\n" }
|
49
|
+
raise Error.new(message)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def missing_templates
|
54
|
+
@missing_templates ||= REQUIRED_TEMPLATES.select do |template|
|
55
|
+
template_file_path(template).nil?
|
46
56
|
end
|
47
57
|
end
|
48
58
|
|
@@ -55,7 +65,7 @@ module Emmett
|
|
55
65
|
end
|
56
66
|
|
57
67
|
def template_file_path(name)
|
58
|
-
path = File.join(template_path, name)
|
68
|
+
path = File.join(template_path, "#{name}.#{template_format}")
|
59
69
|
File.exist?(path) ? path : nil
|
60
70
|
end
|
61
71
|
|
data/lib/emmett/version.rb
CHANGED
@@ -135,12 +135,27 @@ footer.footer {
|
|
135
135
|
color: #444;
|
136
136
|
}
|
137
137
|
|
138
|
-
#document-index .
|
138
|
+
#document-index .endpoints li {
|
139
139
|
line-height: 1.8em;
|
140
140
|
}
|
141
141
|
|
142
|
-
#document-index .
|
142
|
+
#document-index .endpoints a {
|
143
143
|
font-size: 1em;
|
144
144
|
font-weight: normal;
|
145
145
|
color: #666;
|
146
|
+
}
|
147
|
+
|
148
|
+
#page-navigation .dropdown .group-subtitle {
|
149
|
+
font-weight: bold;
|
150
|
+
}
|
151
|
+
|
152
|
+
#page-navigation .dropdown ul.endpoints {
|
153
|
+
list-style: none;
|
154
|
+
margin: 0;
|
155
|
+
padding: 0;
|
156
|
+
color: #333;
|
157
|
+
}
|
158
|
+
|
159
|
+
#page-navigation .dropdown ul.endpoints li a {
|
160
|
+
padding-left: 25px;
|
146
161
|
}
|
@@ -3,16 +3,27 @@
|
|
3
3
|
<div class='container'>
|
4
4
|
<a href="./index.html" class="brand">{{site_name}}</a>
|
5
5
|
<ul class='nav pull-right'>
|
6
|
-
{{#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
{{#sections}}
|
7
|
+
<li class='dropdown'>
|
8
|
+
{{#if singular}}
|
9
|
+
{{#groups}}
|
10
|
+
<a {{#url}}href='{{url}}'{{/url}} class='dropdown-toggle' data-toggle='dropdown'>{{name}} <b class="caret"></b></a>
|
11
|
+
<ul class="dropdown-menu singular endpoints">{{>endpoints}}</ul>
|
12
|
+
{{/groups}}
|
13
|
+
{{/if}}
|
14
|
+
{{#unless singular}}
|
15
|
+
<a class='dropdown-toggle' data-toggle='dropdown'>{{name}} <b class="caret"></b></a>
|
16
|
+
<ul class="dropdown-menu multiple">
|
17
|
+
{{#groups}}
|
18
|
+
<li class='group'>
|
19
|
+
<a href='{{url}}' class='group-subtitle'>{{name}}</a>
|
20
|
+
<ul class='endpoints'>{{>endpoints}}</ul>
|
21
|
+
</li>
|
22
|
+
{{/groups}}
|
13
23
|
</ul>
|
14
|
-
|
15
|
-
|
24
|
+
{{/unless}}
|
25
|
+
</li>
|
26
|
+
{{/sections}}
|
16
27
|
</ul>
|
17
28
|
</div>
|
18
29
|
</div>
|
@@ -14,16 +14,12 @@
|
|
14
14
|
<h2>API Index</h2>
|
15
15
|
<div id='inner-index'>
|
16
16
|
<ul>
|
17
|
-
{{#
|
17
|
+
{{#groups}}
|
18
18
|
<li>
|
19
|
-
<h3><a href="{{
|
20
|
-
<ul class="
|
21
|
-
{{#sections}}
|
22
|
-
<li><a href="{{../link}}#{{hash}}">{{name}}</a></li>
|
23
|
-
{{/sections}}
|
24
|
-
</ul>
|
19
|
+
<h3><a href="{{url}}">{{name}}</a></h4>
|
20
|
+
<ul class="endpoints">{{>endpoints}}</ul>
|
25
21
|
</li>
|
26
|
-
{{/
|
22
|
+
{{/groups}}
|
27
23
|
</ul>
|
28
24
|
</div>
|
29
25
|
</section>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emmett
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: github-markdown
|
@@ -169,6 +169,7 @@ files:
|
|
169
169
|
- templates/default/static/javascripts/jquery-1.7.2.min.js
|
170
170
|
- templates/default/static/stylesheets/bootstrap.min.css
|
171
171
|
- templates/default/static/stylesheets/documentation.css
|
172
|
+
- templates/default/templates/_endpoints.handlebars
|
172
173
|
- templates/default/templates/_footer.handlebars
|
173
174
|
- templates/default/templates/_head.handlebars
|
174
175
|
- templates/default/templates/_navigation.handlebars
|
@@ -186,12 +187,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
187
|
- - ! '>='
|
187
188
|
- !ruby/object:Gem::Version
|
188
189
|
version: '0'
|
190
|
+
segments:
|
191
|
+
- 0
|
192
|
+
hash: 1631976447622256131
|
189
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
194
|
none: false
|
191
195
|
requirements:
|
192
196
|
- - ! '>='
|
193
197
|
- !ruby/object:Gem::Version
|
194
198
|
version: '0'
|
199
|
+
segments:
|
200
|
+
- 0
|
201
|
+
hash: 1631976447622256131
|
195
202
|
requirements: []
|
196
203
|
rubyforge_project:
|
197
204
|
rubygems_version: 1.8.24
|