dox 1.0.2 → 2.0.0.beta3
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 +5 -5
- data/.rubocop.yml +6 -3
- data/.ruby-version +1 -1
- data/.travis.yml +7 -11
- data/CHANGES.md +40 -0
- data/Gemfile +1 -1
- data/README.md +115 -116
- data/Rakefile +3 -3
- data/bin/console +3 -3
- data/dox.gemspec +14 -13
- data/lib/dox.rb +14 -1
- data/lib/dox/config.rb +38 -5
- data/lib/dox/dsl/action.rb +10 -4
- data/lib/dox/dsl/documentation.rb +4 -0
- data/lib/dox/dsl/syntax.rb +1 -0
- data/lib/dox/entities/action.rb +33 -12
- data/lib/dox/entities/example.rb +34 -10
- data/lib/dox/entities/resource.rb +4 -5
- data/lib/dox/entities/resource_group.rb +2 -3
- data/lib/dox/formatter.rb +22 -12
- data/lib/dox/formatters/base.rb +19 -0
- data/lib/dox/formatters/json.rb +14 -0
- data/lib/dox/formatters/multipart.rb +23 -0
- data/lib/dox/formatters/plain.rb +13 -0
- data/lib/dox/formatters/xml.rb +14 -0
- data/lib/dox/printers/action_printer.rb +18 -27
- data/lib/dox/printers/base_printer.rb +36 -17
- data/lib/dox/printers/document_printer.rb +27 -7
- data/lib/dox/printers/example_request_printer.rb +69 -0
- data/lib/dox/printers/example_response_printer.rb +86 -0
- data/lib/dox/printers/resource_group_printer.rb +7 -7
- data/lib/dox/printers/resource_printer.rb +12 -7
- data/lib/dox/util/http.rb +64 -0
- data/lib/dox/version.rb +1 -1
- metadata +91 -29
- data/lib/dox/printers/example_printer.rb +0 -110
@@ -3,7 +3,7 @@ module Dox
|
|
3
3
|
class ResourcePrinter < BasePrinter
|
4
4
|
def print(resource)
|
5
5
|
self.resource = resource
|
6
|
-
|
6
|
+
add_resources
|
7
7
|
|
8
8
|
resource.actions.each do |_, action|
|
9
9
|
action_printer.print(action)
|
@@ -14,16 +14,21 @@ module Dox
|
|
14
14
|
|
15
15
|
attr_accessor :resource
|
16
16
|
|
17
|
-
def
|
18
|
-
|
17
|
+
def add_resources
|
18
|
+
add_to_tags
|
19
|
+
add_to_groups
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_to_tags
|
23
|
+
spec['tags'] = spec['tags'].push(name: resource.name, description: format_desc(resource.desc)).uniq
|
24
|
+
end
|
19
25
|
|
20
|
-
|
21
|
-
|
22
|
-
HEREDOC
|
26
|
+
def add_to_groups
|
27
|
+
spec['x-tagGroups'].find { |group| group[:name] == resource.group }['tags'].push(resource.name)
|
23
28
|
end
|
24
29
|
|
25
30
|
def action_printer
|
26
|
-
@action_printer ||= ActionPrinter.new(
|
31
|
+
@action_printer ||= ActionPrinter.new(spec['paths'])
|
27
32
|
end
|
28
33
|
end
|
29
34
|
end
|
data/lib/dox/util/http.rb
CHANGED
@@ -2,6 +2,70 @@ module Dox
|
|
2
2
|
module Util
|
3
3
|
module Http
|
4
4
|
VERB = ['POST', 'GET', 'PUT', 'PATCH', 'DELETE', 'HEAD'].freeze
|
5
|
+
HTTP_STATUS_CODES = {
|
6
|
+
100 => 'Continue',
|
7
|
+
101 => 'Switching Protocols',
|
8
|
+
102 => 'Processing',
|
9
|
+
103 => 'Early Hints',
|
10
|
+
200 => 'OK',
|
11
|
+
201 => 'Created',
|
12
|
+
202 => 'Accepted',
|
13
|
+
203 => 'Non-Authoritative Information',
|
14
|
+
204 => 'No Content',
|
15
|
+
205 => 'Reset Content',
|
16
|
+
206 => 'Partial Content',
|
17
|
+
207 => 'Multi-Status',
|
18
|
+
208 => 'Already Reported',
|
19
|
+
226 => 'IM Used',
|
20
|
+
300 => 'Multiple Choices',
|
21
|
+
301 => 'Moved Permanently',
|
22
|
+
302 => 'Found',
|
23
|
+
303 => 'See Other',
|
24
|
+
304 => 'Not Modified',
|
25
|
+
305 => 'Use Proxy',
|
26
|
+
307 => 'Temporary Redirect',
|
27
|
+
308 => 'Permanent Redirect',
|
28
|
+
400 => 'Bad Request',
|
29
|
+
401 => 'Unauthorized',
|
30
|
+
402 => 'Payment Required',
|
31
|
+
403 => 'Forbidden',
|
32
|
+
404 => 'Not Found',
|
33
|
+
405 => 'Method Not Allowed',
|
34
|
+
406 => 'Not Acceptable',
|
35
|
+
407 => 'Proxy Authentication Required',
|
36
|
+
408 => 'Request Timeout',
|
37
|
+
409 => 'Conflict',
|
38
|
+
410 => 'Gone',
|
39
|
+
411 => 'Length Required',
|
40
|
+
412 => 'Precondition Failed',
|
41
|
+
413 => 'Payload Too Large',
|
42
|
+
414 => 'URI Too Long',
|
43
|
+
415 => 'Unsupported Media Type',
|
44
|
+
416 => 'Range Not Satisfiable',
|
45
|
+
417 => 'Expectation Failed',
|
46
|
+
421 => 'Misdirected Request',
|
47
|
+
422 => 'Unprocessable Entity',
|
48
|
+
423 => 'Locked',
|
49
|
+
424 => 'Failed Dependency',
|
50
|
+
425 => 'Too Early',
|
51
|
+
426 => 'Upgrade Required',
|
52
|
+
428 => 'Precondition Required',
|
53
|
+
429 => 'Too Many Requests',
|
54
|
+
431 => 'Request Header Fields Too Large',
|
55
|
+
451 => 'Unavailable for Legal Reasons',
|
56
|
+
500 => 'Internal Server Error',
|
57
|
+
501 => 'Not Implemented',
|
58
|
+
502 => 'Bad Gateway',
|
59
|
+
503 => 'Service Unavailable',
|
60
|
+
504 => 'Gateway Timeout',
|
61
|
+
505 => 'HTTP Version Not Supported',
|
62
|
+
506 => 'Variant Also Negotiates',
|
63
|
+
507 => 'Insufficient Storage',
|
64
|
+
508 => 'Loop Detected',
|
65
|
+
509 => 'Bandwidth Limit Exceeded',
|
66
|
+
510 => 'Not Extended',
|
67
|
+
511 => 'Network Authentication Required'
|
68
|
+
}.freeze
|
5
69
|
|
6
70
|
def self.verb?(value)
|
7
71
|
VERB.include?(value.upcase)
|
data/lib/dox/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Melita Kokot
|
@@ -9,52 +9,52 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-11-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: codeclimate-test-reporter
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: json
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name: pry
|
57
|
+
name: pry-nav
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - ">="
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: pry-rails
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ">="
|
@@ -82,7 +82,7 @@ dependencies:
|
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
85
|
+
name: pry-stack_explorer
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - ">="
|
@@ -96,33 +96,89 @@ dependencies:
|
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
99
|
+
name: rails
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
102
|
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
104
|
+
version: '4.0'
|
105
105
|
type: :runtime
|
106
106
|
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '4.0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rake
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '10.0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '10.0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rspec
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '3.0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '3.0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: rubocop
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
107
149
|
version_requirements: !ruby/object:Gem::Requirement
|
108
150
|
requirements:
|
109
151
|
- - ">="
|
110
152
|
- !ruby/object:Gem::Version
|
111
153
|
version: '0'
|
112
154
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
155
|
+
name: simplecov
|
114
156
|
requirement: !ruby/object:Gem::Requirement
|
115
157
|
requirements:
|
116
158
|
- - ">="
|
117
159
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
160
|
+
version: '0'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: rspec-core
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
119
175
|
type: :runtime
|
120
176
|
prerelease: false
|
121
177
|
version_requirements: !ruby/object:Gem::Requirement
|
122
178
|
requirements:
|
123
179
|
- - ">="
|
124
180
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
181
|
+
version: '0'
|
126
182
|
description:
|
127
183
|
email:
|
128
184
|
- melita.kokot@gmail.com
|
@@ -166,10 +222,16 @@ files:
|
|
166
222
|
- lib/dox/errors/invalid_resource_error.rb
|
167
223
|
- lib/dox/errors/invalid_resource_group_error.rb
|
168
224
|
- lib/dox/formatter.rb
|
225
|
+
- lib/dox/formatters/base.rb
|
226
|
+
- lib/dox/formatters/json.rb
|
227
|
+
- lib/dox/formatters/multipart.rb
|
228
|
+
- lib/dox/formatters/plain.rb
|
229
|
+
- lib/dox/formatters/xml.rb
|
169
230
|
- lib/dox/printers/action_printer.rb
|
170
231
|
- lib/dox/printers/base_printer.rb
|
171
232
|
- lib/dox/printers/document_printer.rb
|
172
|
-
- lib/dox/printers/
|
233
|
+
- lib/dox/printers/example_request_printer.rb
|
234
|
+
- lib/dox/printers/example_response_printer.rb
|
173
235
|
- lib/dox/printers/resource_group_printer.rb
|
174
236
|
- lib/dox/printers/resource_printer.rb
|
175
237
|
- lib/dox/util/http.rb
|
@@ -190,13 +252,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
252
|
version: 2.0.0
|
191
253
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
254
|
requirements:
|
193
|
-
- - "
|
255
|
+
- - ">"
|
194
256
|
- !ruby/object:Gem::Version
|
195
|
-
version:
|
257
|
+
version: 1.3.1
|
196
258
|
requirements: []
|
197
259
|
rubyforge_project:
|
198
|
-
rubygems_version: 2.
|
260
|
+
rubygems_version: 2.7.6.2
|
199
261
|
signing_key:
|
200
262
|
specification_version: 4
|
201
|
-
summary: Generates API documentation for rspec in
|
263
|
+
summary: Generates API documentation for rspec in OpenAPI format.
|
202
264
|
test_files: []
|
@@ -1,110 +0,0 @@
|
|
1
|
-
module Dox
|
2
|
-
module Printers
|
3
|
-
class ExamplePrinter < BasePrinter
|
4
|
-
def print(example)
|
5
|
-
self.example = example
|
6
|
-
print_example_request
|
7
|
-
print_example_response
|
8
|
-
end
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
attr_accessor :example
|
13
|
-
|
14
|
-
def print_example_request
|
15
|
-
@output.puts example_request_title
|
16
|
-
@output.puts example_request_headers
|
17
|
-
return unless example.request_body.present?
|
18
|
-
|
19
|
-
@output.puts example_request_body
|
20
|
-
end
|
21
|
-
|
22
|
-
def print_example_response
|
23
|
-
@output.puts example_response_title
|
24
|
-
|
25
|
-
if example.response_headers.present?
|
26
|
-
@output.puts example_response_headers
|
27
|
-
end
|
28
|
-
|
29
|
-
return unless example.response_body.present?
|
30
|
-
@output.puts example_response_body
|
31
|
-
end
|
32
|
-
|
33
|
-
def example_request_title
|
34
|
-
<<-HEREDOC
|
35
|
-
|
36
|
-
+ Request #{example.request_identifier}
|
37
|
-
**#{example.request_method.upcase}** `#{CGI.unescape(example.request_fullpath)}`
|
38
|
-
HEREDOC
|
39
|
-
end
|
40
|
-
|
41
|
-
def example_request_headers
|
42
|
-
<<-HEREDOC
|
43
|
-
|
44
|
-
+ Headers
|
45
|
-
|
46
|
-
#{indent_lines(12, print_headers(example.request_headers))}
|
47
|
-
HEREDOC
|
48
|
-
end
|
49
|
-
|
50
|
-
def example_request_body
|
51
|
-
<<-HEREDOC
|
52
|
-
|
53
|
-
+ Body
|
54
|
-
|
55
|
-
#{indent_lines(12, pretty_json(example.request_body))}
|
56
|
-
HEREDOC
|
57
|
-
end
|
58
|
-
|
59
|
-
def example_response_title
|
60
|
-
<<-HEREDOC
|
61
|
-
|
62
|
-
+ Response #{example.response_status}
|
63
|
-
HEREDOC
|
64
|
-
end
|
65
|
-
|
66
|
-
def example_response_headers
|
67
|
-
<<-HEREDOC
|
68
|
-
|
69
|
-
+ Headers
|
70
|
-
|
71
|
-
#{indent_lines(12, print_headers(example.response_headers))}
|
72
|
-
HEREDOC
|
73
|
-
end
|
74
|
-
|
75
|
-
def example_response_body
|
76
|
-
<<-HEREDOC
|
77
|
-
|
78
|
-
+ Body
|
79
|
-
|
80
|
-
#{indent_lines(12, pretty_json(safe_json_parse(example.response_body)))}
|
81
|
-
HEREDOC
|
82
|
-
end
|
83
|
-
|
84
|
-
def safe_json_parse(json_string)
|
85
|
-
json_string.length >= 2 ? JSON.parse(json_string) : nil
|
86
|
-
end
|
87
|
-
|
88
|
-
def pretty_json(json_string)
|
89
|
-
if json_string.present?
|
90
|
-
JSON.pretty_generate(json_string)
|
91
|
-
else
|
92
|
-
''
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def print_headers(headers)
|
97
|
-
headers.map do |key, value|
|
98
|
-
"#{key}: #{value}"
|
99
|
-
end.join("\n")
|
100
|
-
end
|
101
|
-
|
102
|
-
def indent_lines(number_of_spaces, string)
|
103
|
-
string
|
104
|
-
.split("\n")
|
105
|
-
.map { |a| a.prepend(' ' * number_of_spaces) }
|
106
|
-
.join("\n")
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|