cdoc 0.1.5 → 0.1.6

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: d820713e809296ad393075f97bc7c4f1b0765855
4
- data.tar.gz: 4f62f92271bbe59df2ca5dcc0d04f5b9204c4e4b
3
+ metadata.gz: 330e5acf5e69b1f523fa79269626598381210081
4
+ data.tar.gz: ba839a48e9775992def0dd457e30748145b003a7
5
5
  SHA512:
6
- metadata.gz: 861e8677bf2e5736dda1cfe3ad259855604a751406b95a2d2f1678f26a4db0b349b0cfb57a484ca68e4426982b040f968dffd1c77adeb2b46f2161c2596bd5ab
7
- data.tar.gz: f9568d2ceb4f963ab377fe0b47d4125be4254bc0e18f0bfd5b7d60748d4cd00f5b58de305453ca37e18077b9501b48b7a4143736e4b3b0da163ac1511cd230c8
6
+ metadata.gz: 55f81bbabe959fd40ffa73eb2352178fddef674c4899d49a13b7d3c3df23c1a468d261bb4354e5ac559f48c6059e8de66432c0f17c4c57d39545fdf595006c83
7
+ data.tar.gz: 5ff8aa840889db2cc74fba3998cde069f45d9a314216fb91b7d0897976889821c446f96dd1d12f49e62f71a1d21e598c74deab344e00a3e713776ca3880fc104
data/Gemfile CHANGED
@@ -3,6 +3,5 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in cdoc.gemspec
4
4
  gemspec
5
5
 
6
- gem 'redcarpet'
7
6
  gem 'pygments.rb'
8
7
  gem 'pry'
data/README.md CHANGED
@@ -7,7 +7,7 @@ For example
7
7
 
8
8
  ```
9
9
  #doc
10
- # @endpoint /api/v1/accounts/list
10
+ # @api /api/v1/accounts/list
11
11
  # @params
12
12
  # {
13
13
  # user_id: '123456'
@@ -29,7 +29,17 @@ For example
29
29
  # }
30
30
  ```
31
31
 
32
- The code sections will be highligted if a 2 space indentation is used. Alos if the code section is a valid json then the section will be highlighted.
32
+ The code sections will be highligted if a 2 space indentation is used. Also if the code section is a valid json then the section will be highlighted.
33
+
34
+ ## Tags
35
+
36
+ If a line starts with `@word` then the line is considered as a tagged line. The text after the tagged line is simply highlighted.
37
+
38
+ eg : @api /api/v1/accounts/list will be rendered as
39
+
40
+ Api **/api/v1/accounts/list**
41
+
42
+ To make it simple none of the tags is considered special at the moment.
33
43
 
34
44
  ## Installation
35
45
 
@@ -51,8 +61,11 @@ Or install it yourself as:
51
61
 
52
62
  cd to your rails application and run
53
63
 
54
- $ cdoc
55
- $ open doc/index.html
64
+ $ cdoc TITLE="Fizbuz API Documentation"
65
+ $ cd doc
66
+ $ ruby -run -e httpd -- -p 5000 . # start a web server to serve the generated files
67
+
68
+ Now open the browser and go to [http://localhost:5000](http://localhost:5000) to view the documentation.
56
69
 
57
70
  ## Development
58
71
 
@@ -29,7 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.bindir = "bin"
30
30
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
- spec.add_runtime_dependency "redcarpet", "~>3.4.0"
33
32
  spec.add_runtime_dependency "pygments.rb", "~>1.1.1"
34
33
  spec.add_development_dependency "bundler", "~> 1.13"
35
34
  spec.add_development_dependency "rake", "~> 10.0"
@@ -1,6 +1,5 @@
1
1
  require 'cdoc/version'
2
2
  require 'rake'
3
- require 'redcarpet'
4
3
  require 'pygments'
5
4
  require 'json'
6
5
 
@@ -10,11 +9,8 @@ module Cdoc
10
9
  def to_id(str)
11
10
  str.gsub(/\W/, '').downcase
12
11
  end
13
- end
14
12
 
15
- class DocRenderer < Redcarpet::Render::HTML
16
- def block_code(code, lang='text')
17
- lang = lang && lang.split.first || "text"
13
+ def highlight(code, lang)
18
14
  Pygments.highlight(code, lexer: lang)
19
15
  end
20
16
  end
@@ -24,7 +20,6 @@ module Cdoc
24
20
  include Helpers
25
21
 
26
22
  def initialize
27
- @docstring = ''
28
23
  @content = []
29
24
  end
30
25
 
@@ -32,15 +27,23 @@ module Cdoc
32
27
  @title = title
33
28
  end
34
29
 
30
+ def sidebar(keys)
31
+ return if keys.empty?
32
+
33
+ tmpl_item = '<a href="#%{id}" class="list-group-item">%{item}</a>'
34
+
35
+ items = keys.map do |key|
36
+ tmpl_item % { id: to_id(key), item: key.capitalize }
37
+ end
38
+
39
+ @sidebar = ['<div class="list-group">', items, '</div>'].flatten.join("\n")
40
+ end
41
+
35
42
  def section(str)
36
43
  template = "<p id='%{id}'><h3>%{str}</h3></p>"
37
44
  @content << template % { id: to_id(str), str: str }
38
45
  end
39
46
 
40
- def sidebar(sidebar)
41
- @sidebar = sidebar
42
- end
43
-
44
47
  def subsection(str)
45
48
 
46
49
  template = %q(
@@ -53,7 +56,7 @@ module Cdoc
53
56
  </div>
54
57
  </div>)
55
58
 
56
- lines = str.split("\n")
59
+ lines = str.split("\n")
57
60
  index = 0
58
61
  section_header = ''
59
62
  sub_section = []
@@ -78,7 +81,7 @@ module Cdoc
78
81
  begin
79
82
  json = JSON.parse(code_str)
80
83
  code_str = JSON.pretty_generate(json)
81
- block = ['<pre><code>', code_str, '</code></pre>'].join('')
84
+ block = highlight(code_str, 'json')
82
85
  rescue JSON::ParserError => e
83
86
  # puts e.message
84
87
  block = ['<pre><code>', code_str, '</code></pre>'].join("\n")
@@ -90,6 +93,24 @@ module Cdoc
90
93
  index = index + 1
91
94
  end
92
95
  end
96
+ elsif unordered_list?(line)
97
+ list_block = []
98
+ list_block << line.sub(/\-|\*/, '').strip
99
+
100
+ loop do
101
+ line = lines[index + 1]
102
+
103
+ if line.nil? || !unordered_list?(line)
104
+ list_block.join('\n')
105
+ break
106
+ else
107
+ list_block << line.sub(/\-|\*/, '').strip
108
+ index = index + 1
109
+ end
110
+ end
111
+
112
+ list_block = list_block.map { |i| ['<footer>', i, '</footer>'].join('') }
113
+ block = ['<blockquote>', list_block, '</blockquote>'].flatten.join("\n")
93
114
  else
94
115
  block = [line, '<br/>'].join('')
95
116
  end
@@ -106,6 +127,11 @@ module Cdoc
106
127
  @content << template % { section_header: section_header, section_body: sub_section.join("\n")}
107
128
  end
108
129
 
130
+ def unordered_list?(line)
131
+ l = line.strip
132
+ l.start_with?('- ') || l.start_with?('* ')
133
+ end
134
+
109
135
  def tagged_line(line, tag)
110
136
  if ['url', 'endpoint', 'api'].include?(tag.downcase)
111
137
  # set the title of the section
@@ -123,16 +149,9 @@ module Cdoc
123
149
 
124
150
  def finish
125
151
  FileUtils.mkdir_p('doc') unless Dir.exists?('doc')
126
- render_as_markdown
127
152
  render_as_html
128
153
  end
129
154
 
130
- def render_as_markdown
131
- f = File.open('doc/index.md', 'w+')
132
- f.write(@docstring)
133
- f.close
134
- end
135
-
136
155
  def content
137
156
  @content.flatten.join('')
138
157
  end
@@ -141,16 +160,11 @@ module Cdoc
141
160
  layout_file = File.join(File.dirname(__FILE__), 'layouts/bootstrap.html')
142
161
  layout = File.read(layout_file)
143
162
  f = File.open('doc/index.html', 'w+')
144
- renderer = DocRenderer.new
145
- markdown = Redcarpet::Markdown.new(renderer, fenced_code_blocks: true)
146
163
  html = layout % { title: @title, sidebar: @sidebar, content: content }
147
164
  f.write(html)
148
165
  f.close
149
166
 
150
- unless Dir.exists?('doc/css')
151
- puts File.join(File.dirname(__FILE__), 'styles')
152
- FileUtils.cp_r(File.join(File.dirname(__FILE__), 'styles'), 'doc/css')
153
- end
167
+ FileUtils.cp_r(File.join(File.dirname(__FILE__), 'styles'), 'doc/')
154
168
  end
155
169
  end
156
170
 
@@ -166,26 +180,16 @@ module Cdoc
166
180
  @doc = DocString.new
167
181
  end
168
182
 
169
- def generate_sidebar(keys)
170
- tmpl_item = '<a href="#%{id}" class="list-group-item">%{item}</a>'
171
-
172
- items = keys.map do |key|
173
- tmpl_item % { id: to_id(key), item: key.capitalize }
174
- end
175
-
176
- ['<div class="list-group">', items, '</div>'].flatten.join("\n")
177
- end
178
-
179
183
  def generate
180
- @doc.title('Chillr API Documentaion')
181
-
182
- @file_groups = files.group_by { |f| File.basename(f, '_controller.rb') }
184
+ @doc.title(ENV['TITLE'] || 'Chillr API Documentaion')
183
185
 
184
- sidebar = generate_sidebar(@file_groups.keys)
186
+ file_groups = files.group_by { |f| File.basename(f, '_controller.rb') }
185
187
 
186
- @doc.sidebar(sidebar)
188
+ # Generates sidebar
189
+ @doc.sidebar(file_groups.keys)
187
190
 
188
- @file_groups.each do |group, files|
191
+ # Generates body
192
+ file_groups.each do |group, files|
189
193
  @doc.section(group.capitalize)
190
194
  files.each do |file|
191
195
  docs = extract_documentation(file)
@@ -206,8 +210,8 @@ module Cdoc
206
210
  return
207
211
  end
208
212
 
209
- docs = []
210
- doclines = []
213
+ sections = []
214
+ section_doc_lines = []
211
215
  recording = false
212
216
 
213
217
  lines.each do |line|
@@ -222,22 +226,20 @@ module Cdoc
222
226
  if line.empty?
223
227
  next
224
228
  elsif line.start_with?('#')
225
- doclines << line.strip.sub('#', '')
229
+ section_doc_lines << line.strip.sub('#', '')
226
230
  else
227
231
  recording = false
228
- docs << doclines.join("\n")
229
- doclines = []
232
+ sections << section_doc_lines.join("\n")
233
+ section_doc_lines = []
230
234
  end
231
235
  end
232
236
  end
233
237
 
234
- if recording && (doclines.length != 0)
235
- recording = false
236
- docs << doclines.join("\n")
237
- doclines = []
238
+ if recording && (section_doc_lines.length != 0)
239
+ sections << section_doc_lines.join("\n")
238
240
  end
239
241
 
240
- docs
242
+ sections
241
243
  end
242
244
  end
243
245
  end
@@ -1,3 +1,3 @@
1
1
  module Cdoc
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -10,6 +10,15 @@
10
10
  <!-- Bootstrap -->
11
11
  <!--<link href="/css/bootstrap.min.css" rel="stylesheet">-->
12
12
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
13
+ <link href="/styles/fruity.css" rel="stylesheet">
14
+
15
+ <style>
16
+ pre {
17
+ color: #ffffff;
18
+ background-color: black;
19
+ border-color: #0f140f;
20
+ }
21
+ </style>
13
22
  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
14
23
  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
15
24
  <!--[if lt IE 9]>
@@ -28,20 +37,8 @@
28
37
  <span class="icon-bar"></span>
29
38
  <span class="icon-bar"></span>
30
39
  </button>
31
- <a class="navbar-brand" href="#">Chillr</a>
40
+ <a class="navbar-brand" href="/">Chillr</a>
32
41
  </div>
33
-
34
- <!-- Collect the nav links, forms, and other content for toggling -->
35
- <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
36
- <ul class="nav navbar-nav navbar-right">
37
- <li class="dropdown">
38
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">More<span class="caret"></span></a>
39
- <ul class="dropdown-menu">
40
- <li><a href="#">Action</a></li>
41
- </ul>
42
- </li>
43
- </ul>
44
- </div><!-- /.navbar-collapse -->
45
42
  </div><!-- /.container-fluid -->
46
43
  </nav>
47
44
  <div class="container">
@@ -7,8 +7,8 @@
7
7
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
8
8
  <title>%{title}</title>
9
9
 
10
- <link href="css/markdown4.css" rel="stylesheet">
11
- <link href="css/pygments_github.css" rel="stylesheet">
10
+ <link href="styles/markdown4.css" rel="stylesheet">
11
+ <link href="styles/pygments_github.css" rel="stylesheet">
12
12
  </head>
13
13
  <body>
14
14
  %{content}
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cdoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Deepak Kumar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-08 00:00:00.000000000 Z
11
+ date: 2017-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: redcarpet
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 3.4.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 3.4.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: pygments.rb
29
15
  requirement: !ruby/object:Gem::Requirement