grape-dsl 1.2.2 → 1.3.0
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 -13
- data/VERSION +1 -1
- data/files.rb +6 -7
- data/grape-dsl.gemspec +1 -1
- data/lib/grape-dsl.rb +7 -9
- data/lib/grape-dsl/doc.rb +338 -340
- data/lib/grape-dsl/dsl.rb +63 -29
- data/lib/grape-dsl/endpoint.rb +7 -9
- data/lib/grape-dsl/headers.rb +60 -58
- data/lib/grape-dsl/mounter.rb +17 -15
- metadata +11 -13
- data/lib/grape-dsl/config.rb +0 -9
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NTZhN2Q0OWI0M2U1NDIzYjhlOTA2OWNjZWQ1NGFjY2I5ZTViMTBhNQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0d49f85e73510207801984abfad36a45999bf54c
|
4
|
+
data.tar.gz: e1aa53de44935e387db8121c2985aaf388d360e9
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
Mjg4M2U5NGY3NzEyMzZkMWU5OGIwMzE3ZjlhNTM4ZGRkYjI2NDk4MGY2YmNl
|
11
|
-
N2Y0Mjc1ZWYyMjdkNDk5MzBkYmVmNDU2ZjBiNTE1OGI0YzVjMTQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YzlhOGI2ZGI5NzIxZmJhMjcxNzAwNDdkMTg2Y2ViZWVlNTZkYTQzZWY0OGM5
|
14
|
-
NWYyMGZhNDAyYTM2ZDgxOTM3OWQwZjI5MGRjYjE4YjRjYTVmY2M5ZDA5ZGVh
|
15
|
-
N2VjYjY0YTYyZjJhNzY2NDM4NmE5NjcwNjBmNzAwNDFiNmRlMTk=
|
6
|
+
metadata.gz: a0cb2d97ce1259c36bbff809b037d91efd52076aa789af65bd095c16ab00221862887711fe0e85ada408c312845c7d86b3007681b9ad38f373de66077ab3e5ed
|
7
|
+
data.tar.gz: 62e02105d1be4a63d276077cc3dd8ef12a7eab75dea64db53dda3cb1c5fc728dea4e3eafad527d07232f0ae5074444e4013228411ba9b6b6826b9f598d8731ac
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
data/files.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
### Get Files from dir
|
2
2
|
begin
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
module GrapeDSL
|
5
|
+
SpecFiles= Array.new
|
6
|
+
end
|
7
7
|
|
8
8
|
Dir[File.expand_path(File.join(File.dirname(__FILE__),"**","*"))].sort.uniq.each do |one_file_name|
|
9
9
|
one_file_name = File.expand_path one_file_name
|
@@ -11,11 +11,10 @@ begin
|
|
11
11
|
|
12
12
|
if !one_file_name.include?("pkg")
|
13
13
|
if !File.directory? file_name
|
14
|
-
|
14
|
+
|
15
|
+
GrapeDSL::SpecFiles.push file_name
|
15
16
|
STDOUT.puts file_name if $DEBUG
|
16
|
-
|
17
|
-
load one_file_name
|
18
|
-
end
|
17
|
+
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
data/grape-dsl.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = "https://github.com/adamluzsi/grape-dsl"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
-
spec.files = SpecFiles
|
17
|
+
spec.files = GrapeDSL::SpecFiles
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ["lib"]
|
data/lib/grape-dsl.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
#encoding: UTF-8
|
2
|
-
module
|
3
|
-
module DSL
|
2
|
+
module GrapeDSL
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
require 'procemon'
|
5
|
+
require 'grape'
|
6
|
+
require 'json'
|
7
|
+
require 'yaml'
|
9
8
|
|
10
|
-
|
9
|
+
require_relative_directory 'grape-dsl'
|
11
10
|
|
12
|
-
|
13
|
-
end
|
11
|
+
end
|
data/lib/grape-dsl/doc.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
|
2
2
|
class Array
|
3
|
-
|
4
3
|
def convert_all_value_to_s
|
5
4
|
|
6
5
|
self.count.times do |index|
|
@@ -23,12 +22,8 @@ class Array
|
|
23
22
|
|
24
23
|
return self
|
25
24
|
end
|
26
|
-
|
27
25
|
end
|
28
|
-
|
29
|
-
|
30
26
|
class Hash
|
31
|
-
|
32
27
|
def convert_all_value_to_s
|
33
28
|
|
34
29
|
self.each do |key,value|
|
@@ -50,479 +45,482 @@ class Hash
|
|
50
45
|
|
51
46
|
return self
|
52
47
|
end
|
53
|
-
|
54
48
|
end
|
55
49
|
|
56
|
-
module
|
57
|
-
|
50
|
+
module GrapeDSL
|
51
|
+
module Extend
|
52
|
+
module Doc
|
58
53
|
|
59
|
-
|
60
|
-
|
61
|
-
|
54
|
+
def syntax_highlight target,wrapper_begin,wrapper_end
|
55
|
+
return "#{wrapper_begin}#{target}#{wrapper_end}"
|
56
|
+
end
|
62
57
|
|
63
|
-
|
64
|
-
|
58
|
+
# helpers for doc generation
|
59
|
+
def wiki_body(route,wrapper_begin,wrapper_end,wrapper_close)
|
65
60
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
61
|
+
description_key= :body
|
62
|
+
tmp_array= Array.new()
|
63
|
+
params= nil
|
64
|
+
evalue= nil
|
65
|
+
content_type= nil
|
71
66
|
|
72
|
-
|
73
|
-
|
74
|
-
|
67
|
+
#if route.route_path == "/booking/request(.:format)"
|
68
|
+
# debugger
|
69
|
+
#end
|
75
70
|
|
76
|
-
|
71
|
+
case route.route_description.class.to_s.downcase
|
77
72
|
|
78
|
-
|
79
|
-
|
73
|
+
when "string"
|
74
|
+
params= route.route_params
|
80
75
|
|
81
|
-
|
76
|
+
when "hash"
|
82
77
|
|
83
|
-
|
84
|
-
|
85
|
-
|
78
|
+
if !route.route_description[:content_type].nil?
|
79
|
+
content_type= route.route_description[:content_type]
|
80
|
+
end
|
86
81
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
82
|
+
if description_key.nil?
|
83
|
+
params= route.route_params
|
84
|
+
evalue= "value[:type]"
|
85
|
+
else
|
86
|
+
params= route.route_description[description_key]
|
87
|
+
evalue= "value"
|
88
|
+
end
|
94
89
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
90
|
+
when "nilclass"
|
91
|
+
params= route.route_params
|
92
|
+
params ||= "no return"
|
93
|
+
content_type= "TXT"
|
99
94
|
|
100
|
-
|
101
|
-
|
102
|
-
|
95
|
+
else
|
96
|
+
params= route.route_params
|
97
|
+
content_type= "TXT"
|
103
98
|
|
104
|
-
|
99
|
+
end
|
105
100
|
|
106
|
-
|
101
|
+
case params.class.to_s.downcase
|
107
102
|
|
108
|
-
|
103
|
+
when "hash"
|
109
104
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
105
|
+
if params == route.route_params
|
106
|
+
tmp_hash= Hash.new
|
107
|
+
params.each do |key,value|
|
108
|
+
tmp_hash[key]= value[:type].to_s
|
109
|
+
end
|
110
|
+
params= tmp_hash
|
114
111
|
end
|
115
|
-
params= tmp_hash
|
116
|
-
end
|
117
112
|
|
118
|
-
|
113
|
+
params = params.convert_all_value_to_s
|
119
114
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
115
|
+
when "class"
|
116
|
+
begin
|
117
|
+
if params.to_s.include? '::'
|
118
|
+
if params.to_s.downcase.include? 'boolean'
|
119
|
+
params= params.to_s.split('::').last
|
120
|
+
end
|
125
121
|
end
|
122
|
+
|
123
|
+
content_type= "TXT"
|
126
124
|
end
|
127
125
|
|
126
|
+
when "string"
|
128
127
|
content_type= "TXT"
|
129
|
-
end
|
130
128
|
|
131
|
-
|
132
|
-
|
129
|
+
else
|
130
|
+
begin
|
131
|
+
params= "no params spec"
|
132
|
+
content_type= "TXT"
|
133
|
+
end
|
133
134
|
|
134
|
-
|
135
|
-
begin
|
136
|
-
params= "no params spec"
|
137
|
-
content_type= "TXT"
|
138
|
-
end
|
135
|
+
end
|
139
136
|
|
140
|
-
|
137
|
+
content_type ||= "TXT"
|
138
|
+
case content_type.to_s.downcase
|
141
139
|
|
142
|
-
|
143
|
-
|
140
|
+
when "json"
|
141
|
+
begin
|
144
142
|
|
145
|
-
when "json"
|
146
|
-
begin
|
147
143
|
|
148
144
|
|
145
|
+
tmp_array.push syntax_highlight(content_type.to_s,wrapper_begin,wrapper_end)
|
149
146
|
|
150
|
-
|
147
|
+
require "json"
|
151
148
|
|
152
|
-
|
149
|
+
formatted_string= params.to_json
|
150
|
+
|
151
|
+
{
|
152
|
+
"{" => "{\n",
|
153
|
+
"}" => "\n}",
|
154
|
+
"," => ",\n"
|
155
|
+
}.each do |from,to|
|
156
|
+
formatted_string.gsub!(from,to)
|
157
|
+
end
|
153
158
|
|
154
|
-
|
159
|
+
formatted_string.gsub!(/^"/," \"")
|
155
160
|
|
156
|
-
|
157
|
-
|
158
|
-
"}" => "\n}",
|
159
|
-
"," => ",\n"
|
160
|
-
}.each do |from,to|
|
161
|
-
formatted_string.gsub!(from,to)
|
161
|
+
tmp_array.push formatted_string
|
162
|
+
tmp_array.push wrapper_close
|
162
163
|
end
|
163
164
|
|
164
|
-
|
165
|
+
when "txt"
|
166
|
+
begin
|
167
|
+
tmp_array.push(params.inspect)
|
168
|
+
end
|
165
169
|
|
166
|
-
tmp_array.push formatted_string
|
167
|
-
tmp_array.push wrapper_close
|
168
|
-
end
|
169
170
|
|
170
|
-
when "txt"
|
171
|
-
begin
|
172
|
-
tmp_array.push(params.inspect)
|
173
|
-
end
|
174
171
|
|
172
|
+
end
|
175
173
|
|
174
|
+
return tmp_array
|
176
175
|
|
177
176
|
end
|
178
177
|
|
179
|
-
|
180
|
-
|
181
|
-
|
178
|
+
# this method help create from grape params and description a ppt like redmine wiki doc
|
179
|
+
# Usage:
|
180
|
+
#
|
181
|
+
##> example variable for description (hash obj)
|
182
|
+
#description= Hash.new
|
183
|
+
#
|
184
|
+
##> optional -> :description
|
185
|
+
#description[:desc]= String.new
|
186
|
+
#
|
187
|
+
##> response body like if JSON than a ruby Hash obj with the Structure and the values are the types
|
188
|
+
#description[:body]= Hash.new
|
189
|
+
#
|
190
|
+
##> response body code type -> like json usually same as content_type (format :xy)
|
191
|
+
#description[:content_type]= String.new #> "JSON"
|
192
|
+
#
|
193
|
+
#desc description
|
194
|
+
#params do
|
195
|
+
# optional :blabla, :type => String, :desc => "bla bla desc"
|
196
|
+
# requires :xy, type: String, desc: "XY desc"
|
197
|
+
#end
|
198
|
+
#get "xy" do
|
199
|
+
#
|
200
|
+
#end
|
201
|
+
#
|
202
|
+
##>---------------------------------------------------------------------------------------------------
|
203
|
+
#> OR the classic
|
204
|
+
#desc "My awsome String Description"
|
205
|
+
#params do
|
206
|
+
# optional :blabla, :type => String, :desc => "bla bla desc"
|
207
|
+
# requires :xy, type: String, desc: "XY desc"
|
208
|
+
#end
|
209
|
+
#delete "xy" do
|
210
|
+
#
|
211
|
+
#end
|
212
|
+
#
|
213
|
+
##>---------------------------------------------------------------------
|
214
|
+
## For the method use
|
215
|
+
#
|
216
|
+
## for a targeted specified class
|
217
|
+
#Grape.create_redmine_wiki_doc target_class: REST::API,
|
218
|
+
# path: File.expand_path(File.join(File.dirname(__FILE__),"test_file.txt"))
|
219
|
+
#
|
220
|
+
## for all grape subclass (directs and indirects)
|
221
|
+
#Grape.create_redmine_wiki_doc path: File.expand_path(File.join(File.dirname(__FILE__),"test_file.txt"))
|
222
|
+
#
|
223
|
+
def create_wiki_doc(*args)
|
224
|
+
|
225
|
+
# default set in args
|
226
|
+
begin
|
227
|
+
|
228
|
+
args= Hash[*args]
|
229
|
+
args.dup.each do |key,value|
|
230
|
+
if key.class != Symbol
|
231
|
+
args[key.to_s.to_sym]= value
|
232
|
+
args.delete key
|
233
|
+
end
|
234
|
+
end
|
182
235
|
|
183
|
-
|
184
|
-
|
185
|
-
#
|
186
|
-
##> example variable for description (hash obj)
|
187
|
-
#description= Hash.new
|
188
|
-
#
|
189
|
-
##> optional -> :description
|
190
|
-
#description[:desc]= String.new
|
191
|
-
#
|
192
|
-
##> response body like if JSON than a ruby Hash obj with the Structure and the values are the types
|
193
|
-
#description[:body]= Hash.new
|
194
|
-
#
|
195
|
-
##> response body code type -> like json usually same as content_type (format :xy)
|
196
|
-
#description[:content_type]= String.new #> "JSON"
|
197
|
-
#
|
198
|
-
#desc description
|
199
|
-
#params do
|
200
|
-
# optional :blabla, :type => String, :desc => "bla bla desc"
|
201
|
-
# requires :xy, type: String, desc: "XY desc"
|
202
|
-
#end
|
203
|
-
#get "xy" do
|
204
|
-
#
|
205
|
-
#end
|
206
|
-
#
|
207
|
-
##>---------------------------------------------------------------------------------------------------
|
208
|
-
#> OR the classic
|
209
|
-
#desc "My awsome String Description"
|
210
|
-
#params do
|
211
|
-
# optional :blabla, :type => String, :desc => "bla bla desc"
|
212
|
-
# requires :xy, type: String, desc: "XY desc"
|
213
|
-
#end
|
214
|
-
#delete "xy" do
|
215
|
-
#
|
216
|
-
#end
|
217
|
-
#
|
218
|
-
##>---------------------------------------------------------------------
|
219
|
-
## For the method use
|
220
|
-
#
|
221
|
-
## for a targeted specified class
|
222
|
-
#Grape.create_redmine_wiki_doc target_class: REST::API,
|
223
|
-
# path: File.expand_path(File.join(File.dirname(__FILE__),"test_file.txt"))
|
224
|
-
#
|
225
|
-
## for all grape subclass (directs and indirects)
|
226
|
-
#Grape.create_redmine_wiki_doc path: File.expand_path(File.join(File.dirname(__FILE__),"test_file.txt"))
|
227
|
-
#
|
228
|
-
def create_wiki_doc(*args)
|
229
|
-
|
230
|
-
# default set in args
|
231
|
-
begin
|
232
|
-
|
233
|
-
args= Hash[*args]
|
234
|
-
args.dup.each do |key,value|
|
235
|
-
if key.class != Symbol
|
236
|
-
args[key.to_s.to_sym]= value
|
237
|
-
args.delete key
|
236
|
+
if args[:path].nil?
|
237
|
+
raise ArgumentError,"You must set a file path with a file name in order to create documentation for grape!"
|
238
238
|
end
|
239
|
-
end
|
240
239
|
|
241
|
-
|
242
|
-
raise ArgumentError,"You must set a file path with a file name in order to create documentation for grape!"
|
243
|
-
end
|
240
|
+
args[:desc_files] ||= Array.new
|
244
241
|
|
245
|
-
|
242
|
+
[:desc,:desc_file,:extra_desc_file].each do |one_key|
|
246
243
|
|
247
|
-
|
244
|
+
args[:desc_files] += args[(one_key.to_s+"s").to_sym] if args[(one_key.to_s+"s").to_sym].class == Array
|
245
|
+
args[:desc_files].push(args[one_key]) if args[one_key].class == String
|
248
246
|
|
249
|
-
|
250
|
-
args[:desc_files].push(args[one_key]) if args[one_key].class == String
|
247
|
+
end
|
251
248
|
|
252
|
-
|
249
|
+
args[:type] ||= args[:doc_type]
|
250
|
+
args[:type] ||= 'wiki'
|
253
251
|
|
254
|
-
|
255
|
-
|
252
|
+
#args[:path],
|
253
|
+
#args[:extra_desc_file]
|
254
|
+
#args[:target_class]
|
255
|
+
#args[:type]
|
256
256
|
|
257
|
-
|
258
|
-
#args[:extra_desc_file]
|
259
|
-
#args[:target_class]
|
260
|
-
#args[:type]
|
257
|
+
end
|
261
258
|
|
262
|
-
end
|
263
259
|
|
260
|
+
# defaults
|
261
|
+
begin
|
264
262
|
|
265
|
-
|
266
|
-
|
263
|
+
uni_tab= ""
|
264
|
+
case args[:type].to_s.downcase
|
267
265
|
|
268
|
-
|
269
|
-
|
266
|
+
when "redmine","redmine_wiki","redmine-wiki","redminewiki"
|
267
|
+
begin
|
270
268
|
|
271
|
-
|
272
|
-
begin
|
269
|
+
mid_tab= " "*3
|
273
270
|
|
274
|
-
|
271
|
+
bsym= "*"
|
272
|
+
isym= "_"
|
275
273
|
|
276
|
-
|
277
|
-
|
274
|
+
htsym= "* "
|
275
|
+
mtsym= htsym[0]*2 +" "
|
276
|
+
stsym= htsym[0]*3 +" "
|
278
277
|
|
279
|
-
|
280
|
-
|
281
|
-
|
278
|
+
hheader= "h3. "
|
279
|
+
mheader= "h4. "
|
280
|
+
sheader= "h5. "
|
282
281
|
|
283
|
-
|
284
|
-
|
285
|
-
|
282
|
+
container_markup_begin= "<pre><code class=\""
|
283
|
+
container_markup_end= "\">"
|
284
|
+
container_markup_close= "</code></pre>"
|
286
285
|
|
287
|
-
|
288
|
-
container_markup_end= "\">"
|
289
|
-
container_markup_close= "</code></pre>"
|
286
|
+
toc_mark= "\n{{>toc}}\n"
|
290
287
|
|
291
|
-
|
288
|
+
end
|
292
289
|
|
293
|
-
|
290
|
+
when "github","wiki","md"
|
291
|
+
begin
|
294
292
|
|
295
|
-
|
296
|
-
begin
|
293
|
+
mid_tab= " "*3
|
297
294
|
|
298
|
-
|
295
|
+
bsym= "*"
|
296
|
+
isym= "_"
|
299
297
|
|
300
|
-
|
301
|
-
|
298
|
+
htsym= "* "
|
299
|
+
mtsym= htsym[0]*2 +" "
|
300
|
+
stsym= htsym[0]*3 +" "
|
302
301
|
|
303
|
-
|
304
|
-
|
305
|
-
|
302
|
+
hheader= "# "
|
303
|
+
mheader= hheader[0]*2 +" "
|
304
|
+
sheader= hheader[0]*3 +" "
|
306
305
|
|
307
|
-
|
308
|
-
|
309
|
-
|
306
|
+
container_markup_begin= "```"
|
307
|
+
container_markup_end= ""
|
308
|
+
container_markup_close= "```"
|
309
|
+
toc_mark= ""
|
310
310
|
|
311
|
-
|
312
|
-
container_markup_end= ""
|
313
|
-
container_markup_close= "```"
|
314
|
-
toc_mark= ""
|
311
|
+
end
|
315
312
|
|
316
|
-
|
313
|
+
else
|
314
|
+
raise ArgumentError, "invalid :type has been set, try github or redmine"
|
317
315
|
|
318
|
-
|
319
|
-
raise ArgumentError, "invalid :type has been set, try github or redmine"
|
316
|
+
end
|
320
317
|
|
321
318
|
end
|
322
319
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
write_out_array.push "#{hheader}#{$0} REST Interface Documentation\n\n"
|
329
|
-
end
|
320
|
+
# site name
|
321
|
+
begin
|
322
|
+
write_out_array = Array.new
|
323
|
+
write_out_array.push "#{hheader}#{$0} REST Interface Documentation\n\n"
|
324
|
+
end
|
330
325
|
|
331
|
-
|
332
|
-
|
333
|
-
|
326
|
+
# description
|
327
|
+
begin
|
328
|
+
args[:desc_files].each do |extra_desc_file_path|
|
334
329
|
|
335
|
-
|
336
|
-
|
330
|
+
write_out_array.push "#{sheader}#{extra_desc_file_path.split(File::Separator).last.split('.')[0].camelcase}\n"
|
331
|
+
write_out_array.push " "+File.open(extra_desc_file_path,"r").read+"\n"
|
337
332
|
|
333
|
+
end
|
338
334
|
end
|
339
|
-
end
|
340
335
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
336
|
+
# table of contents
|
337
|
+
begin
|
338
|
+
write_out_array.push toc_mark
|
339
|
+
end
|
345
340
|
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
end
|
350
|
-
if args[:target_class].nil?
|
351
|
-
Grape::API.each_subclass do |one_class|
|
352
|
-
rest_models.push(one_class)
|
341
|
+
# classes array
|
342
|
+
begin
|
343
|
+
rest_models= Array.new
|
353
344
|
end
|
354
|
-
|
355
|
-
|
356
|
-
|
345
|
+
if args[:target_class].nil?
|
346
|
+
Grape::API.each_subclass do |one_class|
|
347
|
+
rest_models.push(one_class)
|
348
|
+
end
|
349
|
+
else
|
350
|
+
if args[:target_class].class != Class && args[:target_class] != nil
|
351
|
+
raise ArgumentError, "invalid input :target_class is not a Class obj"
|
352
|
+
end
|
353
|
+
rest_models.push(args[:target_class])
|
357
354
|
end
|
358
|
-
rest_models.push(args[:target_class])
|
359
|
-
end
|
360
355
|
|
361
|
-
|
362
|
-
|
363
|
-
|
356
|
+
rest_models.each do |rest_api_model|
|
357
|
+
next if Grape::API == rest_api_model
|
358
|
+
rest_api_model.routes.map do |route|
|
364
359
|
|
365
360
|
|
366
|
-
|
361
|
+
method_name= "#{hheader}Request: #{route.route_path} call: #{route.route_method.to_s.downcase} part"
|
367
362
|
|
368
|
-
|
369
|
-
|
363
|
+
# check that does the method already in the documentation
|
364
|
+
unless write_out_array.include?(method_name)
|
370
365
|
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
# request
|
377
|
-
begin
|
366
|
+
# create call name
|
367
|
+
begin
|
368
|
+
write_out_array.push method_name
|
369
|
+
end
|
378
370
|
|
379
|
-
#
|
371
|
+
# request
|
380
372
|
begin
|
381
|
-
write_out_array.push("\n"+(uni_tab*1)+"#{mheader}Request description")
|
382
|
-
case route.route_description.class.to_s.downcase
|
383
373
|
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
374
|
+
# create request description
|
375
|
+
begin
|
376
|
+
write_out_array.push("\n"+(uni_tab*1)+"#{mheader}Request description")
|
377
|
+
case route.route_description.class.to_s.downcase
|
388
378
|
|
389
|
-
|
390
|
-
|
391
|
-
sym_to_find= :desc
|
392
|
-
if route.route_description[sym_to_find].nil?
|
393
|
-
sym_to_find= :description
|
394
|
-
end
|
395
|
-
route.route_description[sym_to_find].each_line do |one_line|
|
379
|
+
when "string"
|
380
|
+
route.route_description.each_line do |one_line|
|
396
381
|
write_out_array.push((uni_tab*2)+htsym+one_line.chomp)
|
397
382
|
end
|
398
|
-
end
|
399
383
|
|
384
|
+
when "hash"
|
385
|
+
begin
|
386
|
+
sym_to_find= :desc
|
387
|
+
if route.route_description[sym_to_find].nil?
|
388
|
+
sym_to_find= :description
|
389
|
+
end
|
390
|
+
route.route_description[sym_to_find].each_line do |one_line|
|
391
|
+
write_out_array.push((uni_tab*2)+htsym+one_line.chomp)
|
392
|
+
end
|
393
|
+
end
|
400
394
|
|
401
|
-
end
|
402
|
-
end
|
403
395
|
|
404
|
-
|
405
|
-
|
406
|
-
write_out_array.push("\n#{mheader}request\n")
|
407
|
-
end
|
396
|
+
end
|
397
|
+
end
|
408
398
|
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
399
|
+
# pre request
|
400
|
+
begin
|
401
|
+
write_out_array.push("\n#{mheader}request\n")
|
402
|
+
end
|
413
403
|
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
404
|
+
# create route method
|
405
|
+
begin
|
406
|
+
write_out_array.push((uni_tab*2)+"#{htsym}#{bsym}method:#{bsym}#{mid_tab} #{route.route_method}")
|
407
|
+
end
|
418
408
|
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
rest_api_model.content_types.each do |one_format_type,one_format_header|
|
423
|
-
write_out_array.push "#{mtsym}#{uni_tab*2}#{one_format_header}"
|
409
|
+
# create route path
|
410
|
+
begin
|
411
|
+
write_out_array.push((uni_tab*2)+"#{htsym}#{bsym}path:#{bsym}#{mid_tab} #{route.route_path}")
|
424
412
|
end
|
425
413
|
|
426
|
-
|
427
|
-
|
414
|
+
# create route content_type
|
415
|
+
begin
|
416
|
+
write_out_array.push((uni_tab*2)+"#{htsym}#{bsym}headers:#{bsym}#{mid_tab}")
|
417
|
+
rest_api_model.content_types.each do |one_format_type,one_format_header|
|
418
|
+
write_out_array.push "#{mtsym}#{uni_tab*2}#{one_format_header}"
|
419
|
+
end
|
428
420
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
new_docs_element.push "
|
439
|
-
|
440
|
-
|
421
|
+
write_out_array.push ""
|
422
|
+
end
|
423
|
+
|
424
|
+
# parameters
|
425
|
+
begin
|
426
|
+
new_docs_element= Array.new
|
427
|
+
if route.route_params.count == 0
|
428
|
+
new_docs_element.push " No specified or special params"
|
429
|
+
else
|
430
|
+
new_docs_element.push ""
|
431
|
+
new_docs_element.push "#{htsym}#{isym}#{bsym}Parameters#{bsym}#{isym}"
|
432
|
+
route.route_params.each do |key,value|
|
433
|
+
new_docs_element.push "#{mtsym}#{isym}#{key}#{isym}"
|
434
|
+
value.each do |value_key,value_value|
|
435
|
+
new_docs_element.push "#{stsym}#{value_key}: #{value_value}"
|
436
|
+
end
|
441
437
|
end
|
438
|
+
new_docs_element.push "\n"
|
442
439
|
end
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
refactored_element.
|
440
|
+
refactored_element= Array.new
|
441
|
+
new_docs_element.each do |one_element|
|
442
|
+
refactored_element.push((uni_tab*2)+one_element)
|
443
|
+
end
|
444
|
+
write_out_array.push refactored_element.join("\n")
|
448
445
|
end
|
449
|
-
|
446
|
+
|
450
447
|
end
|
451
448
|
|
452
|
-
|
449
|
+
# response
|
450
|
+
begin
|
453
451
|
|
454
|
-
|
455
|
-
|
452
|
+
# pre response
|
453
|
+
begin
|
454
|
+
write_out_array.push("\n#{mheader}response\n")
|
455
|
+
end
|
456
456
|
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
end
|
457
|
+
#create route content_type
|
458
|
+
begin
|
459
|
+
if !Grape::Endpoint.config_obj.nil?
|
461
460
|
|
462
|
-
|
463
|
-
begin
|
464
|
-
if !Grape::Endpoint.config_obj.nil?
|
461
|
+
write_out_array.push((uni_tab*2)+"#{sheader}Extra headers:")
|
465
462
|
|
466
|
-
|
463
|
+
Grape::Endpoint.header_config_obj.each do |header_key,header_value|
|
464
|
+
write_out_array.push "#{htsym}#{header_key}: #{header_value.join(', ')}"
|
465
|
+
end
|
466
|
+
|
467
|
+
write_out_array.push ""
|
467
468
|
|
468
|
-
Grape::Endpoint.header_config_obj.each do |header_key,header_value|
|
469
|
-
write_out_array.push "#{htsym}#{header_key}: #{header_value.join(', ')}"
|
470
469
|
end
|
470
|
+
end
|
471
471
|
|
472
|
+
# create response bodies
|
473
|
+
begin
|
474
|
+
#TODO check out why not working normaly with evry path!
|
475
|
+
write_out_array.push((uni_tab*2)+"#{sheader}*body:*")
|
476
|
+
wiki_body(route,container_markup_begin,container_markup_end,container_markup_close ).each do |one_element|
|
477
|
+
write_out_array.push one_element
|
478
|
+
end
|
472
479
|
write_out_array.push ""
|
473
|
-
|
474
480
|
end
|
481
|
+
|
475
482
|
end
|
476
483
|
|
477
|
-
#
|
484
|
+
# error resp
|
478
485
|
begin
|
479
|
-
#TODO check out why not working normaly with evry path!
|
480
|
-
write_out_array.push((uni_tab*2)+"#{sheader}*body:*")
|
481
|
-
wiki_body(route,container_markup_begin,container_markup_end,container_markup_close ).each do |one_element|
|
482
|
-
write_out_array.push one_element
|
483
|
-
end
|
484
|
-
write_out_array.push ""
|
485
|
-
end
|
486
486
|
|
487
|
-
|
487
|
+
# pre error
|
488
|
+
begin
|
489
|
+
write_out_array.push("\n#{mheader}response in case of failure\n")
|
490
|
+
end
|
488
491
|
|
489
|
-
|
490
|
-
|
492
|
+
# create error response headers
|
493
|
+
begin
|
491
494
|
|
492
|
-
|
493
|
-
begin
|
494
|
-
write_out_array.push("\n#{mheader}response in case of failure\n")
|
495
|
-
end
|
495
|
+
end
|
496
496
|
|
497
|
-
|
498
|
-
|
497
|
+
# create error response bodies
|
498
|
+
begin
|
499
|
+
#write_out_array.push((uni_tab*2)+"*body:*")
|
500
|
+
write_out_array.push((uni_tab*2)+"#{htsym}*Internal Server Error:500*")
|
501
|
+
end
|
499
502
|
|
500
503
|
end
|
501
504
|
|
502
|
-
#
|
505
|
+
# after space
|
503
506
|
begin
|
504
|
-
|
505
|
-
write_out_array.push((uni_tab*2)+"#{htsym}*Internal Server Error:500*")
|
507
|
+
write_out_array.push "\n----\n"
|
506
508
|
end
|
507
509
|
|
508
510
|
end
|
509
511
|
|
510
|
-
# after space
|
511
|
-
begin
|
512
|
-
write_out_array.push "\n----\n"
|
513
|
-
end
|
514
|
-
|
515
512
|
end
|
516
|
-
|
517
513
|
end
|
518
|
-
end
|
519
514
|
|
520
|
-
|
515
|
+
File.new(args[:path],"w").write write_out_array.join("\n")
|
521
516
|
|
522
|
-
|
523
|
-
|
517
|
+
return nil
|
518
|
+
end
|
524
519
|
|
525
|
-
|
520
|
+
alias :create_ppt_doc :create_wiki_doc
|
526
521
|
|
522
|
+
end
|
527
523
|
end
|
528
524
|
end
|
525
|
+
|
526
|
+
Grape.__send__ :extend, ::GrapeDSL::Extend::Doc
|