rspec_api_documentation 3.0.0 → 3.1.0

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: 7cbc2ff27b6b9f2442e946657e47fc88c2c3e6ee
4
- data.tar.gz: a8f1639743ba2ecfed6c625231ecc3506c025d25
3
+ metadata.gz: b7e6c19ee26d9e8b093eda724140422fd0752308
4
+ data.tar.gz: 852e00b740d884e07466feebfbfbf34dd98b18f4
5
5
  SHA512:
6
- metadata.gz: f84d994ca272c1802358f4aa89d0549af42fa03f8fc8abc840e229ac1f74d828cd9758bb8d5e541b6314f75cefe6639390ad2b979ea889469178a040be70c50e
7
- data.tar.gz: d3f198afe1676a8abbadf41dfa8de83192128bed0dd293691cfeeded33766b7a0e08fff1fa2188a164c85da86cd218924bc27591e9206048c764c4508f508100
6
+ metadata.gz: b84b411b63bae9373d07dd30040a9c2dc64d789b6718d84da867f3774bb2a54731aa67fb2d5a530a1332d4562f3055e021e27c9087434de5b1c6be820fc02675
7
+ data.tar.gz: 6e994149dcb0875ca38ec9d6ad9a26d6f86e879294ffba13b5c1b4da4dc3f08b3ad37aec69cdc10c3e8baf44369b6284a5024cbaf5589e99c19893fb35c75c7b
@@ -3,6 +3,7 @@ require 'active_support/inflector'
3
3
  require 'cgi'
4
4
  require 'json'
5
5
 
6
+ # Namespace for RspecApiDocumentation
6
7
  module RspecApiDocumentation
7
8
  extend ActiveSupport::Autoload
8
9
 
@@ -32,6 +33,7 @@ module RspecApiDocumentation
32
33
  autoload :GeneralMarkupWriter
33
34
  autoload :HtmlWriter
34
35
  autoload :TextileWriter
36
+ autoload :MarkdownWriter
35
37
  autoload :JsonWriter
36
38
  autoload :AppendJsonWriter
37
39
  autoload :JsonIodocsWriter
@@ -49,6 +51,8 @@ module RspecApiDocumentation
49
51
  autoload :HtmlExample
50
52
  autoload :TextileIndex
51
53
  autoload :TextileExample
54
+ autoload :MarkdownIndex
55
+ autoload :MarkdownExample
52
56
  end
53
57
 
54
58
  def self.configuration
@@ -59,6 +63,13 @@ module RspecApiDocumentation
59
63
  @documentations ||= configuration.map { |config| ApiDocumentation.new(config) }
60
64
  end
61
65
 
66
+ # Configures RspecApiDocumentation
67
+ #
68
+ # See RspecApiDocumentation::Configuration for more information on configuring.
69
+ #
70
+ # RspecApiDocumentation.configure do |config|
71
+ # config.docs_dir = "doc/api"
72
+ # end
62
73
  def self.configure
63
74
  yield configuration if block_given?
64
75
  end
@@ -1,4 +1,7 @@
1
1
  module RspecApiDocumentation
2
+ # Base client class that documents all requests that go through it.
3
+ #
4
+ # client.get("/orders", { :page => 2 }, { "Accept" => "application/json" })
2
5
  class ClientBase < Struct.new(:context, :options)
3
6
  include Headers
4
7
 
@@ -13,6 +13,23 @@ module RspecApiDocumentation
13
13
  @groups ||= []
14
14
  end
15
15
 
16
+ # Defines a new sub configuration
17
+ #
18
+ # Automatically sets the `filter` to the group name, and the `docs_dir` to
19
+ # a subfolder of the parent's `doc_dir` named the group name.
20
+ #
21
+ # RspecApiDocumentation.configure do |config|
22
+ # config.docs_dir = "doc/api"
23
+ # config.define_group(:public) do |config|
24
+ # # Default values
25
+ # config.docs_dir = "doc/api/public"
26
+ # config.filter = :public
27
+ # end
28
+ # end
29
+ #
30
+ # Params:
31
+ # +name+:: String name of the group
32
+ # +block+:: Block configuration block
16
33
  def define_group(name, &block)
17
34
  subconfig = self.class.new(self)
18
35
  subconfig.filter = name
@@ -79,6 +96,7 @@ module RspecApiDocumentation
79
96
  @settings ||= {}
80
97
  end
81
98
 
99
+ # Yields itself and sub groups to hook into the Enumerable module
82
100
  def each(&block)
83
101
  yield self
84
102
  groups.map { |g| g.each &block }
@@ -2,6 +2,16 @@ require "rspec_api_documentation/dsl/resource"
2
2
  require "rspec_api_documentation/dsl/endpoint"
3
3
  require "rspec_api_documentation/dsl/callback"
4
4
 
5
+ # Custom describe block that sets metadata to enable the rest of RAD
6
+ #
7
+ # resource "Orders", :meta => :data do
8
+ # # ...
9
+ # end
10
+ #
11
+ # Params:
12
+ # +args+:: Glob of RSpec's `describe` arguments
13
+ # +block+:: Block to pass into describe
14
+ #
5
15
  def self.resource(*args, &block)
6
16
  options = if args.last.is_a?(Hash) then args.pop else {} end
7
17
  options[:api_doc_dsl] = :resource
@@ -1,4 +1,5 @@
1
1
  module RspecApiDocumentation::DSL
2
+ # DSL Methods for testing server callbacks
2
3
  module Callback
3
4
  extend ActiveSupport::Concern
4
5
 
@@ -3,6 +3,7 @@ require 'rack/utils'
3
3
  require 'rack/test/utils'
4
4
 
5
5
  module RspecApiDocumentation::DSL
6
+ # DSL methods available inside the RSpec example.
6
7
  module Endpoint
7
8
  extend ActiveSupport::Concern
8
9
  include Rack::Test::Utils
@@ -23,6 +24,7 @@ module RspecApiDocumentation::DSL
23
24
  end
24
25
 
25
26
  private
27
+
26
28
  # from rspec-core
27
29
  def relative_path(line)
28
30
  line = line.sub(File.expand_path("."), ".")
@@ -1,4 +1,5 @@
1
1
  module RspecApiDocumentation::DSL
2
+ # DSL methods available at the example group level
2
3
  module Resource
3
4
  extend ActiveSupport::Concern
4
5
 
@@ -0,0 +1,16 @@
1
+ module RspecApiDocumentation
2
+ module Views
3
+ class MarkdownExample < MarkupExample
4
+ EXTENSION = 'markdown'
5
+
6
+ def initialize(example, configuration)
7
+ super
8
+ self.template_name = "rspec_api_documentation/markdown_example"
9
+ end
10
+
11
+ def extension
12
+ EXTENSION
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module RspecApiDocumentation
2
+ module Views
3
+ class MarkdownIndex < MarkupIndex
4
+ def initialize(index, configuration)
5
+ super
6
+ self.template_name = "rspec_api_documentation/markdown_index"
7
+ end
8
+
9
+ def examples
10
+ @index.examples.map { |example| MarkdownExample.new(example, @configuration) }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -3,7 +3,7 @@ require 'rspec_api_documentation/writers/json_writer'
3
3
  module RspecApiDocumentation
4
4
  module Writers
5
5
  class CombinedJsonWriter < Writer
6
- def self.write(index, configuration)
6
+ def write
7
7
  File.open(configuration.docs_dir.join("combined.json"), "w+") do |f|
8
8
  examples = []
9
9
  index.examples.each do |rspec_example|
@@ -1,7 +1,7 @@
1
1
  module RspecApiDocumentation
2
2
  module Writers
3
3
  class CombinedTextWriter < Writer
4
- def self.write(index, configuration)
4
+ def write
5
5
  index.examples.each do |rspec_example|
6
6
  example = CombinedTextExample.new(rspec_example)
7
7
  FileUtils.mkdir_p(configuration.docs_dir.join(example.resource_name))
@@ -1,8 +1,10 @@
1
1
  module RspecApiDocumentation
2
2
  module Writers
3
+ # Base class for writers that write HTML
3
4
  class GeneralMarkupWriter < Writer
4
5
  INDEX_FILE_NAME = 'index'
5
6
 
7
+ # Write out the generated documentation
6
8
  def write
7
9
  File.open(configuration.docs_dir.join(index_file_name + '.' + extension), "w+") do |f|
8
10
  f.write markup_index_class.new(index, configuration).render
@@ -0,0 +1,19 @@
1
+ module RspecApiDocumentation
2
+ module Writers
3
+ class MarkdownWriter < GeneralMarkupWriter
4
+ EXTENSION = 'markdown'
5
+
6
+ def markup_index_class
7
+ RspecApiDocumentation::Views::MarkdownIndex
8
+ end
9
+
10
+ def markup_example_class
11
+ RspecApiDocumentation::Views::MarkdownExample
12
+ end
13
+
14
+ def extension
15
+ EXTENSION
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,68 @@
1
+ # {{ resource_name }} API
2
+
3
+ ## {{ description }}
4
+
5
+ ### {{ http_method }} {{ route }}
6
+
7
+ {{# explanation }}
8
+ {{ explanation }}
9
+ {{/ explanation }}
10
+
11
+ {{# has_parameters? }}
12
+ ### Parameters
13
+ {{# parameters }}
14
+
15
+ Name : {{ name }} {{# required }} *- required -*{{/ required }}
16
+ Description : {{ description }}
17
+ {{/ parameters }}
18
+ {{/ has_parameters? }}
19
+
20
+ {{# requests }}
21
+ ### Request
22
+
23
+ #### Headers
24
+
25
+ <pre>{{ request_headers_text }}</pre>
26
+
27
+ #### Route
28
+
29
+ <pre>{{ request_method }} {{ request_path }}</pre>
30
+
31
+ {{# request_query_parameters_text }}
32
+ #### Query Parameters
33
+
34
+ <pre>{{ request_query_parameters_text }}</pre>
35
+ {{/ request_query_parameters_text }}
36
+
37
+ {{# request_body }}
38
+ #### Body
39
+
40
+ <pre>{{{ request_body }}}</pre>
41
+ {{/ request_body }}
42
+
43
+ {{# curl }}
44
+ #### cURL
45
+
46
+ <pre class="request">{{ curl }}</pre>
47
+ {{/ curl }}
48
+
49
+ {{# response_status }}
50
+ ### Response
51
+
52
+ #### Headers
53
+
54
+ <pre>{{ response_headers_text }}</pre>
55
+
56
+ #### Status
57
+
58
+ <pre>{{ response_status }} {{ response_status_text}}</pre>
59
+
60
+ {{# response_body }}
61
+ #### Body
62
+
63
+ <pre>{{{ response_body }}}</pre>
64
+ {{/ response_body }}
65
+ {{/ response_status }}
66
+
67
+ {{/ requests }}
68
+
@@ -0,0 +1,10 @@
1
+ # {{ api_name }}
2
+
3
+ {{# sections }}
4
+ ## {{ resource_name }}
5
+
6
+ {{# examples }}
7
+ * [{{ description }}]({{ dirname }}/{{ filename }})
8
+ {{/ examples }}
9
+
10
+ {{/ sections }}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec_api_documentation
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Cahoon
@@ -10,188 +10,194 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-04-15 00:00:00.000000000 Z
13
+ date: 2014-05-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '>='
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: 2.14.0
22
+ - - ">="
20
23
  - !ruby/object:Gem::Version
21
24
  version: 2.14.0
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
26
- - - '>='
29
+ - - "~>"
30
+ - !ruby/object:Gem::Version
31
+ version: 2.14.0
32
+ - - ">="
27
33
  - !ruby/object:Gem::Version
28
34
  version: 2.14.0
29
35
  - !ruby/object:Gem::Dependency
30
36
  name: activesupport
31
37
  requirement: !ruby/object:Gem::Requirement
32
38
  requirements:
33
- - - '>='
39
+ - - ">="
34
40
  - !ruby/object:Gem::Version
35
41
  version: 3.0.0
36
42
  type: :runtime
37
43
  prerelease: false
38
44
  version_requirements: !ruby/object:Gem::Requirement
39
45
  requirements:
40
- - - '>='
46
+ - - ">="
41
47
  - !ruby/object:Gem::Version
42
48
  version: 3.0.0
43
49
  - !ruby/object:Gem::Dependency
44
50
  name: i18n
45
51
  requirement: !ruby/object:Gem::Requirement
46
52
  requirements:
47
- - - '>='
53
+ - - ">="
48
54
  - !ruby/object:Gem::Version
49
55
  version: 0.1.0
50
56
  type: :runtime
51
57
  prerelease: false
52
58
  version_requirements: !ruby/object:Gem::Requirement
53
59
  requirements:
54
- - - '>='
60
+ - - ">="
55
61
  - !ruby/object:Gem::Version
56
62
  version: 0.1.0
57
63
  - !ruby/object:Gem::Dependency
58
64
  name: mustache
59
65
  requirement: !ruby/object:Gem::Requirement
60
66
  requirements:
61
- - - '>='
67
+ - - ">="
62
68
  - !ruby/object:Gem::Version
63
69
  version: 0.99.4
64
70
  type: :runtime
65
71
  prerelease: false
66
72
  version_requirements: !ruby/object:Gem::Requirement
67
73
  requirements:
68
- - - '>='
74
+ - - ">="
69
75
  - !ruby/object:Gem::Version
70
76
  version: 0.99.4
71
77
  - !ruby/object:Gem::Dependency
72
78
  name: json
73
79
  requirement: !ruby/object:Gem::Requirement
74
80
  requirements:
75
- - - '>='
81
+ - - ">="
76
82
  - !ruby/object:Gem::Version
77
83
  version: 1.4.6
78
84
  type: :runtime
79
85
  prerelease: false
80
86
  version_requirements: !ruby/object:Gem::Requirement
81
87
  requirements:
82
- - - '>='
88
+ - - ">="
83
89
  - !ruby/object:Gem::Version
84
90
  version: 1.4.6
85
91
  - !ruby/object:Gem::Dependency
86
92
  name: fakefs
87
93
  requirement: !ruby/object:Gem::Requirement
88
94
  requirements:
89
- - - '>='
95
+ - - ">="
90
96
  - !ruby/object:Gem::Version
91
97
  version: '0'
92
98
  type: :development
93
99
  prerelease: false
94
100
  version_requirements: !ruby/object:Gem::Requirement
95
101
  requirements:
96
- - - '>='
102
+ - - ">="
97
103
  - !ruby/object:Gem::Version
98
104
  version: '0'
99
105
  - !ruby/object:Gem::Dependency
100
106
  name: sinatra
101
107
  requirement: !ruby/object:Gem::Requirement
102
108
  requirements:
103
- - - '>='
109
+ - - ">="
104
110
  - !ruby/object:Gem::Version
105
111
  version: '0'
106
112
  type: :development
107
113
  prerelease: false
108
114
  version_requirements: !ruby/object:Gem::Requirement
109
115
  requirements:
110
- - - '>='
116
+ - - ">="
111
117
  - !ruby/object:Gem::Version
112
118
  version: '0'
113
119
  - !ruby/object:Gem::Dependency
114
120
  name: aruba
115
121
  requirement: !ruby/object:Gem::Requirement
116
122
  requirements:
117
- - - '>='
123
+ - - ">="
118
124
  - !ruby/object:Gem::Version
119
125
  version: '0'
120
126
  type: :development
121
127
  prerelease: false
122
128
  version_requirements: !ruby/object:Gem::Requirement
123
129
  requirements:
124
- - - '>='
130
+ - - ">="
125
131
  - !ruby/object:Gem::Version
126
132
  version: '0'
127
133
  - !ruby/object:Gem::Dependency
128
134
  name: capybara
129
135
  requirement: !ruby/object:Gem::Requirement
130
136
  requirements:
131
- - - '>='
137
+ - - ">="
132
138
  - !ruby/object:Gem::Version
133
139
  version: '0'
134
140
  type: :development
135
141
  prerelease: false
136
142
  version_requirements: !ruby/object:Gem::Requirement
137
143
  requirements:
138
- - - '>='
144
+ - - ">="
139
145
  - !ruby/object:Gem::Version
140
146
  version: '0'
141
147
  - !ruby/object:Gem::Dependency
142
148
  name: rake
143
149
  requirement: !ruby/object:Gem::Requirement
144
150
  requirements:
145
- - - '>='
151
+ - - ">="
146
152
  - !ruby/object:Gem::Version
147
153
  version: '0'
148
154
  type: :development
149
155
  prerelease: false
150
156
  version_requirements: !ruby/object:Gem::Requirement
151
157
  requirements:
152
- - - '>='
158
+ - - ">="
153
159
  - !ruby/object:Gem::Version
154
160
  version: '0'
155
161
  - !ruby/object:Gem::Dependency
156
162
  name: rack-test
157
163
  requirement: !ruby/object:Gem::Requirement
158
164
  requirements:
159
- - - '>='
165
+ - - ">="
160
166
  - !ruby/object:Gem::Version
161
167
  version: 0.6.2
162
168
  type: :development
163
169
  prerelease: false
164
170
  version_requirements: !ruby/object:Gem::Requirement
165
171
  requirements:
166
- - - '>='
172
+ - - ">="
167
173
  - !ruby/object:Gem::Version
168
174
  version: 0.6.2
169
175
  - !ruby/object:Gem::Dependency
170
176
  name: rack-oauth2
171
177
  requirement: !ruby/object:Gem::Requirement
172
178
  requirements:
173
- - - '>='
179
+ - - ">="
174
180
  - !ruby/object:Gem::Version
175
181
  version: 0.14.4
176
182
  type: :development
177
183
  prerelease: false
178
184
  version_requirements: !ruby/object:Gem::Requirement
179
185
  requirements:
180
- - - '>='
186
+ - - ">="
181
187
  - !ruby/object:Gem::Version
182
188
  version: 0.14.4
183
189
  - !ruby/object:Gem::Dependency
184
190
  name: webmock
185
191
  requirement: !ruby/object:Gem::Requirement
186
192
  requirements:
187
- - - '>='
193
+ - - ">="
188
194
  - !ruby/object:Gem::Version
189
195
  version: 1.7.0
190
196
  type: :development
191
197
  prerelease: false
192
198
  version_requirements: !ruby/object:Gem::Requirement
193
199
  requirements:
194
- - - '>='
200
+ - - ">="
195
201
  - !ruby/object:Gem::Version
196
202
  version: 1.7.0
197
203
  description: Generate API docs from your test suite
@@ -204,44 +210,49 @@ extensions: []
204
210
  extra_rdoc_files: []
205
211
  files:
206
212
  - lib/rspec_api_documentation.rb
207
- - lib/tasks/docs.rake
208
- - lib/rspec_api_documentation/rack_test_client.rb
213
+ - lib/rspec_api_documentation/api_documentation.rb
209
214
  - lib/rspec_api_documentation/api_formatter.rb
215
+ - lib/rspec_api_documentation/client_base.rb
216
+ - lib/rspec_api_documentation/configuration.rb
210
217
  - lib/rspec_api_documentation/curl.rb
211
- - lib/rspec_api_documentation/index.rb
212
- - lib/rspec_api_documentation/headers.rb
213
- - lib/rspec_api_documentation/oauth2_mac_client.rb
218
+ - lib/rspec_api_documentation/dsl.rb
214
219
  - lib/rspec_api_documentation/dsl/callback.rb
215
220
  - lib/rspec_api_documentation/dsl/endpoint.rb
216
221
  - lib/rspec_api_documentation/dsl/resource.rb
217
- - lib/rspec_api_documentation/dsl.rb
222
+ - lib/rspec_api_documentation/example.rb
223
+ - lib/rspec_api_documentation/headers.rb
224
+ - lib/rspec_api_documentation/index.rb
225
+ - lib/rspec_api_documentation/oauth2_mac_client.rb
226
+ - lib/rspec_api_documentation/rack_test_client.rb
227
+ - lib/rspec_api_documentation/railtie.rb
228
+ - lib/rspec_api_documentation/test_server.rb
218
229
  - lib/rspec_api_documentation/views/html_example.rb
219
230
  - lib/rspec_api_documentation/views/html_index.rb
231
+ - lib/rspec_api_documentation/views/markdown_example.rb
232
+ - lib/rspec_api_documentation/views/markdown_index.rb
233
+ - lib/rspec_api_documentation/views/markup_example.rb
234
+ - lib/rspec_api_documentation/views/markup_index.rb
220
235
  - lib/rspec_api_documentation/views/textile_example.rb
221
236
  - lib/rspec_api_documentation/views/textile_index.rb
222
- - lib/rspec_api_documentation/views/markup_index.rb
223
- - lib/rspec_api_documentation/views/markup_example.rb
224
237
  - lib/rspec_api_documentation/writers/append_json_writer.rb
225
- - lib/rspec_api_documentation/writers/textile_writer.rb
238
+ - lib/rspec_api_documentation/writers/combined_json_writer.rb
239
+ - lib/rspec_api_documentation/writers/combined_text_writer.rb
240
+ - lib/rspec_api_documentation/writers/formatter.rb
226
241
  - lib/rspec_api_documentation/writers/general_markup_writer.rb
227
242
  - lib/rspec_api_documentation/writers/html_writer.rb
228
- - lib/rspec_api_documentation/writers/json_iodocs_writer.rb
229
243
  - lib/rspec_api_documentation/writers/index_helper.rb
244
+ - lib/rspec_api_documentation/writers/json_iodocs_writer.rb
230
245
  - lib/rspec_api_documentation/writers/json_writer.rb
246
+ - lib/rspec_api_documentation/writers/markdown_writer.rb
247
+ - lib/rspec_api_documentation/writers/textile_writer.rb
231
248
  - lib/rspec_api_documentation/writers/writer.rb
232
- - lib/rspec_api_documentation/writers/combined_json_writer.rb
233
- - lib/rspec_api_documentation/writers/formatter.rb
234
- - lib/rspec_api_documentation/writers/combined_text_writer.rb
235
- - lib/rspec_api_documentation/configuration.rb
236
- - lib/rspec_api_documentation/example.rb
237
- - lib/rspec_api_documentation/api_documentation.rb
238
- - lib/rspec_api_documentation/test_server.rb
239
- - lib/rspec_api_documentation/railtie.rb
240
- - lib/rspec_api_documentation/client_base.rb
241
- - templates/rspec_api_documentation/textile_example.mustache
249
+ - lib/tasks/docs.rake
250
+ - templates/rspec_api_documentation/html_example.mustache
242
251
  - templates/rspec_api_documentation/html_index.mustache
252
+ - templates/rspec_api_documentation/markdown_example.mustache
253
+ - templates/rspec_api_documentation/markdown_index.mustache
254
+ - templates/rspec_api_documentation/textile_example.mustache
243
255
  - templates/rspec_api_documentation/textile_index.mustache
244
- - templates/rspec_api_documentation/html_example.mustache
245
256
  homepage: http://smartlogicsolutions.com
246
257
  licenses:
247
258
  - MIT
@@ -252,18 +263,19 @@ require_paths:
252
263
  - lib
253
264
  required_ruby_version: !ruby/object:Gem::Requirement
254
265
  requirements:
255
- - - '>='
266
+ - - ">="
256
267
  - !ruby/object:Gem::Version
257
268
  version: '0'
258
269
  required_rubygems_version: !ruby/object:Gem::Requirement
259
270
  requirements:
260
- - - '>='
271
+ - - ">="
261
272
  - !ruby/object:Gem::Version
262
273
  version: 1.3.6
263
274
  requirements: []
264
275
  rubyforge_project:
265
- rubygems_version: 2.0.14
276
+ rubygems_version: 2.2.2
266
277
  signing_key:
267
278
  specification_version: 4
268
279
  summary: A double black belt for your docs
269
280
  test_files: []
281
+ has_rdoc: